1 Prometheus介绍
1.1 官方架构图
Prometheus 是一款基于时序数据库的开源监控告警系统,Prometheus 的基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控,输出被监控组件信息的 HTTP 接口被叫做 Exporter 。目前常用的组件大部分都有 Exporter 可以直接使用,比如 Nginx 、 MySQL 、 ES 、 Redis 、 Linux 系统 、 Windiws 系统等。
Promethus有以下特点:
- 支持多维数据模型:由度量名和键值对组成的时间序列数据
- 内置时间序列数据库 TSDB 支持 PromQL 查询语言,可以完成非常复杂的查询和分析
- 支持 HTTP 的 Pull 方式采集时间序列数据
- 支持 PushGateway 采集瞬时任务的数据
- 支持服务发现和静态配置两种方式发现目标
- 支持接入 Grafana
2 监控方案对比
2.1 Zabbix
-
优点: 组件集成度高 图形化配置 官方提供大量模板 被动模式支持发送命令
-
缺点: 原生不支持集群,大规模场景下表现较差 对云原生环境支持较差 使用关系型数据库 前端基于 ThinkPHP 框架开发,漏洞较多
2.2 Prometheus
使用 Pull 的方式进行采集
-
优点: 支持集群模式 采用时序数据库 适配大部分中间件和云原生环境 支持自制 Exporter 支持接入 Grafana
-
缺点: 组件太多, 学习成本较高
总结: 纯服务器环境使用 Zabbix ,混合环境和云原生环境使用 Prometheus
3 Prometheus工作流程
3.1 数据采集
-
数据采集过程 Exporter 采集目标数据,并通过 HTTP 暴露, Prometheus 周期 Pull Exporter 的数据
-
支持采集类型 支持的采集类型基本覆盖大多数场景,甚至部分中间件原生支持 Metrics ,无需使用 Exporter 采集,如 Nacos 、 Loki 等
3.2 数据汇聚
数据可通过联邦集群或 PushGateway 的方式进行汇聚,由各个子节点接收 Exporter 的数据,再由主节点接收子节点数据从而达到数据汇聚的目的。
注意:
-
- 联邦集群下,上游 Prometheus 采集周期需比下游 Prometheus 采集周期长,不可两倍大于下游 Prometheus ,防止数据采集不完整。
-
- 采集间隔不可过长,防止数据采集不完整。(建议60s左右)
3.3 数据存储
3.4 数据展示
Prometheus 自带数据查询页面 Web UI ,但由于太过简陋,一般只用于测试 PromQL 表达式结果以及查看采集、告警状态。真正的数据展示场景会使用 Grafana 来替代, Grafana 图表展示数据实际上是以预先设定好的 PromQL 表达式对 Prometheus 数据进行查询,再以指定的图表样式展示。