监控系统设计

监控与告警体系

在系统运维一章中我们就已经讨论了独立 Linux 服务器中简单的系统指标的获取与分析,本篇着重讨论复杂分布式系统下基于度量的监控解决方案,广义的监控往往还会涉及日志聚合与分布式追踪等。

监控系统流程

无论是开源的监控系统还是自研的监控系统,监控的整个流程大同小异,一般都包括以下模块:

  • 数据采集:采集的方式有很多种,包括日志埋点进行采集(通过 Logstash、Filebeat 等进行上报和解析),JMX 标准接口输出监控指标,被监控对象提供 REST API 进行数据采集(如 Hadoop、ES),系统命令行,统一的 SDK 进行侵入式的埋点和上报等。

  • 数据传输:将采集的数据以 TCP、UDP 或者 HTTP 协议的形式上报给监控系统,有主动 Push 模式,也有被动 Pull 模式。

  • 数据存储:有使用 MySQL、Oracle 等 RDBMS 存储的,也有使用时序数据库 RRDTool、OpentTSDB、InfluxDB 存储的,还有使用 HBase 存储的。

  • 数据展示:数据指标的图形化展示。

  • 监控告警:灵活的告警设置,以及支持邮件、短信、IM 等多种通知通道。

Links