监控与告警

监控一个大规模的系统是一个非常有挑战的事情,组件多,分析繁杂,而又要求监控系统本身的维护非常低。在大规模系统部署下,任何一个单机问题的报警都没有任何意义,因为这发生的太多太频繁。Google监控系统从传统的探针模型(脚本测试,检查结果继而报警)与图形化趋势展示演变为一个基于时间序列数据(Borgmon,类似开源产品有Prometheus等)并使用标准数据分析进行报警的新模型。

  • 监控系统要解决“什么东西出现故障”和“为什么出故障”这两个问题
  • 黄金指标
    • 延迟,区分成功和失败很重要
    • 流量
    • 错误,包括显式失败(比如500)、隐式失败(比如200回复中包含了错误内容)和策略原因导致的失败(比如超时)
    • 饱和度,系统在达到100%利用率之前会出现性能的严重下降
  • 系统指标应该以“分布”而不是平均值来定义
  • 简化告警系统
    • 避免告警太多导致“狼来了”效应
    • 每个告警都应该是可以具体操作的
    • 每个紧急告警的回复都应该包括某种智力分析过程,否则不应该成为紧急警报
    • 应对紧急警报经常会牺牲短期内的可用性和性能,以换取未来整体系统性能的提升

白盒监控:基于时间序列有效报警(Borgmon)

  • 标准监控格式:HTTP请求/varz,响应为文本方式的监控数据,比如http_requests 37或者
    http_responses map:code 200:25 404:0 500:12
  • 每个服务都对监控系统系统一个HTTP服务/varz
  • Borgmon通过配置文件配置需要收集的目标列表,并定期抓取/varz URI
  • 抓取的数据以时间序列方式存储
  • Borgmon编程语言提供查询和汇总计算服务:监控计算的结果还是一个时间序列,可以存储或图表方式展现;而报警规则的结果则是true或false,当true时报警
  • 分片机制应对大规模系统,比如Borgmon划分为收集层、汇总层和全局层,上层直接接收下层的时间序列数据

黑盒监控

黑盒监控用户监控最终用户访问服务的情况,基于探针实现。探针可以探测前端,也可以探测负载均衡后面的服务,这可以非常方便的发现某个数据中心的问题,而整个系统的服务依然正常工作。

Feisky wechat
微信公众号订阅