In 1960, Kálmán introduced a characterization he called observability to describe mathematical control systems in his paper. In control theory, observability is defined as a measure of how well internal states of a system can be inferred from knowledge of its external outputs.传统监控的范围
侧重于依赖“履历主义”,应对“已知问题”传统监控,要预先知晓收罗哪些指标,添加什么样的告警策略,定制什么样的仪表盘,以便发现某种范例的故障后,采用什么样的 Runbook 来应对。比如技术团队根据过往履历,知道一台服务器上打开的文件句柄数量不能太多,超过某个上限就会影响到网络通信以及文件读写,因此我们会收罗一个 node_filefd_allocated 的指标,然后设置一个告警策略:当 node_filefd_allocated > 1000k 则触发告警,同时我们会提前制作一个 Linux 主机 Dashboard,其中包含有 node_filefd_allocated 的趋势图。预备好这些工作之后,接下来就是守株待兔,等待告警的触发,值班的技术团队就可以按照 Runbook 中载明的排查步骤,检查是否有进程泄露文件句柄,或者是否有大量的网络链接建立等等。
告警驱动的传统监控,缺乏对故障的全局感知在传统监控中,告警充当着举足轻重的作用。当使用传统监控方式,发出某个告警之后,值班的技术团队看到的只是一个孤立的”技术问题“,这个技术问题的影响面有多大,重要程度如何,是否需要立即处置惩罚,是否需要上升和协同,很难快速的做出判定。某个”技术问题“是否重要,是否紧急,不取决于该技术问题自己的难易程度,也不取决于所涉及的服务器规模多寡,唯一的衡量标准是”对用户体验产生的影响有多大“。使用传统监控无法快速的评估某个告警事件和用户体验之间的一定联系,导致无法投入准确的应急处置资源,无法确定合理的应急相应时效,也无法和其他资源产生有效的联动协同,最终使得稳定性保障工作效率低下。
传统监控认为,系统的开辟者和系统的维护者,职责是相对分割的,导致监控以外挂形式为主系统在设计之初,开辟者的重心在于完成必备的业务逻辑,对于自身运行状态的暴露,并没有考虑的很完善甚至有时候都没有考虑。大家大概会经常碰到,做的好的开辟者大概还会打印较为具体的日志,做的不好的,连日志也打的不全,更不必说提供主动暴露系统状态的 Metrics 接口或者为实现 Tracing 进行埋点了。一旦系统到了上线运行阶段,维护职员接手后,每每只能开启“外挂”模式,通过写各种各样的脚本,去探测进程是否存在、去分析匹配日志中是否有关键的错误字段。假如要进一步统计系统的访问量、访问延迟、资源斲丧等等,就会更加被动。“外挂”每每是传统监控数据收罗的特征。
传统监控面向的通常是底子办法,Metrics是传统监控的底子传统监控面向底子办法,底子办法的变化较慢,且变化带来的结果相对可预测。Metrics 范例的监控指标,具有收罗存储成本低、简单直观、易于聚合计算的特点,因此在过去的二三十年里,基于 Metrics 为底子,出现了各种各样的收罗器、时序数据库、可视化工具、告警工具等,基于前面提到的”履历主义“,尚能应付面向底子办法的稳定性保障工作。
互联网大盛行前,擅长于局部场景,部分工具到现在仍然被广泛使用
阶段2:Metrics监控之互联网快速发展期
- Cacti:最悠久的监控系统之一,2001年9月,一个名叫Lan Berry的高中生,当时他还在为一家小的ISP厂商工作,为了更好地监控网络质量,开辟了Cacti的第一个版本,基于RRDtool,提供更友好的使用体验。
- Nagios:Nagios可谓是早期告警方向究竟上的工业标准,可以用来监控主机和网络底子办法,以及各种应用服务。在监控对象出现问题时,实时发送邮件或者短信通知相关职员;当问题办理后,发送恢复信息。一段时间的主流,后来以难用闻名。
- Ganglia: UC Berkeley发起的一个开源集群监督项目,设计用于测量数以千计的节点。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,至今仍然在Hadoop监控领域盛行。
- RRDtool:在时间序列数据(time-series data)的存储、展示方面,其独创的round-robin database数据存储格式,曾经是究竟上的时序数据存储工业标准。包括Cacti、MRTG、Collectd、Ganglia、Zenoss等系统,都是采用RRDtool的格式来存储数据,以及使用RRDtool的Graph工具来绘图。
- Collectd:定位是收集和传输数据。在告警方面不是Collectd的设计初衷,不过它也支持一些简单的阈值判定,并发送告警信息。要支持更高级的一些告警需求,Collectd可以和Nagios共同使用。
- StatsD:最早是 2008 年 Flickr 公司用 Perl 写的,StatsD 其实就是一个监听UDP(默认)或者TCP的守护程序,根据简单的协议收集statsd客户端发送来的数据,聚合之后,定时推送给后端,如graphite和influxdb等,再通过grafana等展示。
- Graphite:一个开源实时的、显示时间序列度量数据的图形系统。Graphite并不收集度量数据自己,而是像一个数据库,通过其后端接收度量数据,然后以实时方式查询、转换、组合这些度量数据。Graphite支持内建的Web界面,它允许用户欣赏度量数据和图。
互联网快速发展的时代,监控往一体化方向发展,注意体验的提拔Zabbix
Prometheus 成为时代的王者Prometheus
OpenTelemetry
- 相比单体应用,技术团队面临着更多的服务需要管理;
- 许多服务之间都是松耦合,而且像云数据库、云存储、第三方API等服务,都不处于你的掌控之下;
- 代码的发布和变更,频率越来越高,连续集成、连续发布成为主流;
- 底子办法动态化,容量也在动态的弹性伸缩;
- 当代化的系统架构下,大概出现故障的点位越来越多,”长尾问题“出现的频率也越来越高,难以定位和分析;
- 研发工程师更多的加入到系统的运行维护工作中来;
- 技术团队天天接收到大量的告警。
- 许多告警长时间无相应,恒久无人问津。
- 告警与告警之间缺乏关联性,处置惩罚效率低下。
- 告警处置惩罚缺乏协同,处置惩罚过程不透明,信息难以共享,知识难以沉淀。
- 许多告警并未准确反应实际情况,无谓的斲丧技术团队精力。
- 客户/用户每每先于技术团队发现故障,客户满足度连续走低。
- 无法量化的衡量应急相应的现状和效率,无法制定出改进和优化路线。
没有度量就没有改进,在实际工作中,运维负责人表面看到的是告警太多、团队成员疲于奔命,但苦于看不清告警处置惩罚的工作量,没法规划调和补充人力,更严峻的是看不清优化告警的方向,导致情况连续恶化,最终团队散了,故障频发。所以在告警处置惩罚的领域,尤其需要“可观测”,保举关注下面 5 个关键的OnCall度量指标:
- 告警聚合收敛:办理告警风暴问题,按照业界的实践,压缩率为70%~80%。
- 告警全生命周期管理:告警认领、转派、升级,办理告警不能实时处置惩罚、告警漏处置惩罚、告警散落在各个监控系统的问题。
- 告警排班:引入值班表,以排班的形式高效的OnCall,镌汰疏忽和失误,镌汰告警对非值班team的打扰,让团队可连续发展。
- 故障管理:相关的告警聚合为故障,基于故障的告警处置惩罚协作模式,办理跨团队协同不畅的问题。
- ChatOps交互:在电话、短信之外,通过各种IM触达通知技术团队,在IM中交互式的相应和处置惩罚告警。
兵器保举:
- 降噪比:即告警的压缩比,通过算法、规则将众多相关的告警聚合后,再通知到值班职员。告警聚合能有效降低告警风暴,镌汰值班职员的工作量,进步信息处置惩罚的效率(该指标越高越好)。
- 相应比:被认领的告警占所有告警的比例。在告警管理领域,需要相应或者认领的告警,才是有效的告警,因此通过统计和观察“相应比“,能整体的评估告警是否足够有效和有效,并连续的推动提拔告警”相应比“(该指标越高越好)。
- 告警总量:一段时间窗口内产生的告警数量。过高的告警总量,意味着值班的压力越大,对技术团队注意力的干扰越多,埋伏的意味着告警的噪音大概也过大,因此过多的告警,会让整个系统处于不可运维的状态,应该该努力的降低告警总量,譬如采用基于SLO的告警,就可以回复降低该指标(该指标越低越好)。
- MTTA(平均相应或认领用时):从告警发生到值班职员相应或者认领的时间间隔。越快的 MTTA,标志着越高的告警处置惩罚效率,埋伏的代表着越高的服务稳定性。通过MTTA我们可以有效的度量团队的工作压力,以便决议合适的资源投入,确保团队始终处于可连续发展的状态(该指标合适就好)。
- MTTR(平均恢复或办理用时):从告警发生到问题办理的时间间隔。越快的 MTTR,每每意味着团队拥有更先进的观测技术、更强大的底子办法平台、更熟练的工作技能、以及对业务系统有更深入的理解(该指标越快越好)。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |