第10章 基于时间序列数据进行有效报警
作者:Jamie Wilkinson
编辑:Kavita Guliani
让查询来得更猛烈些吧,让寻呼机[2]永远保持沉默!
——SRE 谚语
监控,处于整个生产环境需求金字塔模型的最底层。监控是运营一个可靠的稳定服务不可缺少的部分。服务运维人员依靠监控数据对服务的情况做出理性判断,用科学的方法应对紧急情况。同时,监控数据也可以用来确保服务质量与产品目标保持一致(参见第6章)。
不管一个服务目前是否由SRE运维,该服务都应该建立起对应的监控系统。SRE由于长期负责保障Google生产环境的运维,对支撑监控系统的基础设施非常了解。
监控一个大型系统本身是一项非常具有挑战性的工作:
● 大型系统中组件数量特别多,分析工作繁杂繁重。
● 监控系统本身的维护要求必须非常低。
Google的监控系统不仅要分析一些简单的系统指标(比如一台在欧洲Web服务器的平均响应时间),还需要分析更高抽象级别的指标(例如整个欧洲地区Web服务器的响应时间分布情况)。这类更高级的抽象指标可以帮助我们寻找导致延迟长尾效应的问题所在。
在我们这种系统部署规模下,任何一个单机问题的报警都没有任何意义,因为这样的报警发生的次数太频繁,没有任何可操作性。我们采用的是另外一套方法:设计我们运维的系统使其能够更好地应对所依赖系统的故障。一个大型系统不应该要求运维人员持续关注其中使用的无数个小组件,而是应该自动汇总所有的信息,自动抛弃其中的异常情况。监控系统应该主要从高级服务质量目标层面进行报警,但是也应该保持足够的粒度,可以追踪到某个具体组件。
Google的监控系统经过10年的发展,从传统的探针模型(使用脚本测试,检查回复并且报警)与图形化趋势展示的模型已经演变为一个新模型。这个新模型将收集时间序列信息作为监控系统的首要任务,同时发展了一种丰富的时间序列信息操作语言,通过使用该语言将数据转化为图表和报警取代了以前的探针脚本。