内容纲要
监控必要性
- 掌控各个服务的情况
- 快速发现问题(调用错误、可优化空间等)
- ……
监控对象
- 用户端监控
- 对为用户提供的功能进行监控
- 接口监控
- 对业务所提供的功能依赖的接口进行监控
- 资源监控
- 对某接口的依赖进行监控
- 基础监控
- 对服务本身的健康进行监控
监控指标
- 请求量
- 实时请求量(QPS)
- 统计请求量(PV)
- 响应时间
- 把响应时间划分为多个区间
- 找出慢请求
- 错误率
- 接口调用失败占总调用的比率
监控维度
- 全局维度
- 整体的请求量、响应时间、错误率等
- 机房维度
- 不同机房面临的压力可能不一样
- 单机维度
- 同机房的不同机器由于各种原因性能指标也有差异
- 时间维度
- 不同时段的请求量差异可能很大
- 核心维度
- 核心业务和非核心业务的请求量也不可混为一谈
监控原理
监控系统的四个环节
- 数据采集
- 方式
- 服务主动上报(在程序中加入代码收集逻辑)
- 代理收集(程序把日志输出到本地,代理服务负责收集日志)
- 关键点
- 采样率(影响精度和性能,需要做好平衡)
- 方式
- 数据传输
- 方式
- UDP(数据中心提供 UDP 请求地址,数据采集放请求地址发送数据)
- Kafka(数据采集放将数据发往指定 Topic,数据中心从 Topic 取数据)
- 关键点
- 数据格式
- 二进制协议(压缩率高,序列化、反序列化效率高)
- 文本协议(可读性好)
- 数据格式
- 方式
- 数据处理
- 维度
- 接口维度聚合(得到每个接口的请求量、响应时间等)
- 机器维度聚合(得到单机的接口请求量、响应时间等)
- 关键点
- 数据持久化
- 索引数据库
- 时序数据库
- 数据持久化
- 维度
- 数据展示
- 方式
- Dashboard
- 曲线图(体现变化趋势)
- 饼图(体现占比分布)
- 格子图(更精细粒度监控)
- ……
- Dashboard
- 方式
落地
集中式日志解决方案
ELK Stack
即 ElasticSearch、Logstash、Kibana、Beats。
- Logstahs:负责收集日志(过滤、格式化等)
- ElasticSearch:负责数据存储、处理(分布式搜索、分析引擎)
- Kibana:负责数据展示
- Beats(作为扩展补充:比 Logstash 节省资源)
- Packetbeat:收集网络流量数据
- Topbeat:收集系统进程、CPU、内存等使用情况数据
- Filebeat:收集日志文件数据
- Winlogbeat:收集 Windows 事件日志数据
时序数据库解决方案
Graphite
主要由 Carbon、Whisper、Graphite-Web 组成。
- Carbon:接收被监控节点的连接,收集各个指标数据(本身不采集数据),将数据写入 carbon-cache,并最终持久化到 Whisper
- Whisper:一个简单的时序数据库,可以按照不同的粒度存储时间序列的数据
- Graphite-Web:用于展示数据(先从 carbon-cache 查询数据,没有则再去 Whisper 查询)
TICK Stack
即 Telegraf、InfluxDB、Chronograf、Kapacitor。
- Telegraf:采集数据
- InfluxDB:存储数据
- Chronograf:展示数据
- Kapacitor:数据告警
Prometheus
Prometheus 是一套开源系统监控、报警框架。
- Prometheus Server:用于拉取 metrics 信息并存储到数据库
- Jobs、Exporters:用于暴露已有的第三方服务的 metrics 给 Prometheus Server
- Pushgateway:用于短期 Jobs
- Alertmanager:用于数据报警
- Prometheus Web UI:负责数据展示(UI 可以使用 Grafana)
选型
名称 | 数据收集 | 数据传输 | 数据处理 | 数据展示 |
---|---|---|---|---|
ELK Stack | Beats | Beats -> Logstash -> ElasticSearch | 可以对日子任意字段进行索引(适合多维度查询;存储消耗比时序数据库大) | Kibana |
Graphite | 无 | 第三方 -> Carbon | 正则表达式、subSeries 求和等 | 本身不太好,支持 Grafana |
TICK Stack | Telegraf | Telegraf -> influxDB | SQL 语言 | 本身不太好,支持 Grafana |
Prometheus | Jobs、Exporters | Prometheus Server 定期从 Jobs、Exporters 拉取(侵入性小) | PromeQL 语言 | 本身不太好,支持 Grafana |