监控告警怎么搭建比较合理?B站SRE实践总结了4大关键步骤|TakinTalks大咖分享
在上期文章中,4位社区专家就“告警怎么加出效果”做了深入探讨,当然,能通过监控告警监测系统动态,做到预防问题提升故障响应效率最好。可实际情况往往是告警噪音太多难以判断,等到用户投诉才发现问题,那监控告警体系怎么搭建比较合理高效呢?
B站吕帆老师根据自身实践经验为大家总结了监控告警体系搭建的4大关键步骤:
1.明确监控告警的目标:一般分为预测故障、发现故障、定位故障、故障恢复4个方面;
2.确定具体的监控指标:4个黄金监控指标+指南针指标(核心指标)+日志监控才能有效掌握系统的状况;
3.结合监控设置合理的告警:监控和告警结合才能达成闭环发挥实际的效益,但告警不能随意设置;
4.明确告警的人员和方式:渐进式告警到负责人、告警投群、告警拉群都可以,选择合适的即可。老师还介绍了一些开源的监控告警平台,想了解具体细节可以往下阅读完整版本。👇
作者介绍
TakinTalks社区专家团成员,毕业于华中科技大学,硕士。曾就职于美团点评,蚂蚁金服等公司,拥有丰富的服务端研发开发架构经验,对于高可用高并发系统设计,系统稳定性保障,服务治理,单元化部署,网络协议,加解密,互联网常见业务(直播,营销,开发平台,交易等)等方面较多实践经验。
温馨提醒:本文共计4649字,预计花费7分钟阅读
是不是经常会遇到,有人在群里@你,告诉你你的系统出故障了,你在犹豫是不是真的出故障的同时还得慌乱地去查找?
老板问你系统现在到底健康与否,能不能快速给个判断,你却不敢断言?
这一切都源自于你的系统没有做好监控和告警:
没有监控或者没有一个好的监控,导致你无法快速判断系统是不是健康的; 没有告警或者没有一个精准的告警,当系统出问题时不能及时通知到你,并且告诉你哪里出了问题,影响是什么以及具体怎么解决。
一、监控告警为什么重要?
所以它关乎我们是否能发现或者快速的发现,定位和解决事故。特别是在业务高峰期,早一分钟解决就能减少很多损失,如果一个事故出现较长时间没有解决,甚至没有定位,将会直接影响用户的实际使用体验,这对公司形象和业务产生的影响与损失都是不可估量的。监控告警的重要性也就不言而喻了,可以那么说做好了监控告警能事半功倍。那监控和告警应该怎么做呢?
二、监控与告警体系该怎么搭建?
监控的定义就是监测和控制,监测某些事物的变化,以便进行控制。在常见的软件系统中,大多分为四大观察类别:
业务逻辑:项目所对应的服务及其承担的业务逻辑,通常需要对其进行度量。例如:单量,库存量。
应用程序:应用程序。例如:统一的基础框架,接口耗时,接口QPS。
硬件资源:服务器资源情况等。例如:CPU Load,内存使用量。
网络情况:比如网络丢包情况等。
1、明确监控告警的目标
预测故障:故障还没出现,但存在异常。监控系统根据流量模型、数据分析、度量趋势来推算应用程序的异常趋势,推算可能出现故障的问题点。
发现故障:故障已经出现,客户还没反馈到一线人员。监控系统根据真实的度量趋势来计算既有的告警规则,发现已经出现故障的问题点。
定位故障:故障已经出现,但未找到具体故障位置,此时是需要协调公司内的多个组件,例如:链路追踪系统、日志平台、监控系统等,来定位故障点。
故障恢复:出现故障后,我们根据SOP或者其他方式(hotfix等)来恢复故障。
2、确定具体监控指标
2.1 基础监控指标——黄金指标
《Google SRE 运维解密》 总结出了 4 个黄金指标,在业界广为流传和借鉴:
区分成功和失败请求很重要,例如:某个由于数据库连接丢失或者其他后端问题造成的 HTTP 500 错误可能延迟很低。因此在计算整体延迟时,如果将 500 回复的延迟也计算在内,可能会产生误导性的结果。 “慢” 错误要比 “快” 错误更糟糕。
对 Web 服务器来讲,该指标通常是每秒 HTTP 请求数量,同时可能按请求类型分类(静态请求与动态请求)。 针对音频流媒体系统来说,指标可能是网络 I/O 速率,或者并发会话数量。 针对键值对存储系统来说,指标可能是每秒交易数量,或每秒的读者操作数量。
显式失败(例如:HTTP 500); 隐式失败(例如:HTTP 200 回复中包含了错误内容); 策略原因导致的失败(例如:如果要求回复在 1s 内发出,任何超过 1s 的请求就都是失败请求)。
很多系统在达到 100% 利用率之前性能会严重下降,因此可以考虑增加一个利用率目标。
延迟增加是饱和度的前导现象,99% 的请求延迟(在某一个小的时间范围内,例如一分钟)可以作为一个饱和度早期预警的指标。
饱和度需要进行预测,例如 “看起来数据库会在 4 小时内填满硬盘”。
2.2 核心监控指标——指南针指标
指南针指标是系统对业务的核心价值体现,指南针指标同时也体现系统的健康与否
指南针指标的波动,一定意味着业务出现波动,业务出现问题,指南针指标一定异常
出现波动需要给出解释
要对指南针指标设置告警
2.3 日志监控
错误日志量要有监控
核心链路上易出问题的地方务必设置日志监控和告警
3、结合监控设置合理的告警
3.1 一些实用的告警原则
告警不要太多,否则会导致“狼来了”。
告警出现时,应当要有具体的操作,或者SOP。
不需要人工响应/处理的告警规则,应当直接删除。
告警信息应当有告警级别,影响面,如何处理等。
3.2 故障等级与告警设置
故障时间超过40分钟,属于P0事故;
故障时间超过30分钟,属于P1事故;
故障时间超过20分钟,属于P2事故;
故障时间超过10分钟,属于P3事故。
告警分级别,根据严重性,我们可以分为:提示,预警,严重,灾难 告警分原因 告警要有解决方案
输入和返回参数
4、明确告警的人员和方式
4.1 渐进式告警到负责人
4.2 告警投群
4.3 告警拉群
三、监控告警平台的搭建
1、Prometheus
多维度数据模型,一个时间序列由一个度量指标和多个标签键值对确定; 灵活的查询语言,对收集的时序数据进行重组; 强大的数据可视化功能,除了内置的浏览器,也支持跟 Grafana 集成; 高效的存储,内存加本地磁盘,可通过功能分片和联盟来扩展性能; 运维简单,只依赖本地磁盘,Go 二进制安装包没有任何其他库包依赖; 精确告警; 非常多的客户端库; 提供了许多导出器来收集常见系统指标; 可以通过中间网关进行时序列数据推送; 通过服务发现或者静态配置来发现目标服务对象。
2、CAT
3、ELK&ElastAlert
3.1 ELK
LogStash/Beats: 负责数据的收集与处理
ElasticSearch: 一个开源的分布式搜索引擎,负责数据的存储、检索和分析
Kibana: 提供了可视化的界面。负责数据的可视化操作
3.2 ElastAlert
四、B站的实践案例
讲了那么多方法论,可能大家还是没有一个特别清晰的概念,我这边就拿B站的实际应用监控来给大家具体说说,先给大家展示一下。
1、黄金指标类的监控
服务常用指标监控:
服务接口监控:
依赖的服务监控
依赖的组件监控
2、指南针指标类监控
弹幕指南针指标
相关下钻指标
五、总结
监控告警的最佳状态就是实现“一五十”,所谓“一五十”,就是指我们能一分钟发现事故,五分钟定位,十分钟解决。相信这也是众多企业SRE的想要达成的目标,希望今天给大家讲的这些内容能够帮助大家实现精准的监控和告警,把问题扼杀在摇篮里,减少故障带来的业务损失。
🙋🏻♀️报名方式:扫码回复【沙龙】邀您进群交流
「好文推荐」
👉B站SRE负责人亲述 713事故后的多活容灾建设👉10年稳定性保障经验总结,故障复盘要回答哪三大关键问题?👉故障复盘后的告警如何加出效果?浙江移动等老司机总结了4条注意事项📢点击【阅读原文】直达故障经验库,了解更多精彩内容