监控系统设计
监控与告警体系
在系统运维一章中我们就已经讨论了独立 Linux 服务器中简单的系统指标的获取与分析,本篇着重讨论复杂分布式系统下基于度量的监控解决方案,广义的监控往往还会涉及日志聚合与分布式追踪等。
监控系统流程
无论是开源的监控系统还是自研的监控系统,监控的整个流程大同小异,一般都包括以下模块:
-
数据采集:采集的方式有很多种,包括日志埋点进行采集(通过 Logstash、Filebeat 等进行上报和解析),JMX 标准接口输出监控指标,被监控对象提供 REST API 进行数据采集(如 Hadoop、ES),系统命令行,统一的 SDK 进行侵入式的埋点和上报等。
-
数据传输:将采集的数据以 TCP、UDP 或者 HTTP 协议的形式上报给监控系统,有主动 Push 模式,也有被动 Pull 模式。
-
数据存储:有使用 MySQL、Oracle 等 RDBMS 存储的,也有使用时序数据库 RRDTool、OpentTSDB、InfluxDB 存储的,还有使用 HBase 存储的。
-
数据展示:数据指标的图形化展示。
-
监控告警:灵活的告警设置,以及支持邮件、短信、IM 等多种通知通道。