菜单
本页目录

1 Prometheus介绍

1.1 官方架构图

1700882709367.png

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工作流程

1700881627559.jpg

3.1 数据采集

  • 数据采集过程 1700881711136.jpg Exporter 采集目标数据,并通过 HTTP 暴露, Prometheus 周期 Pull Exporter 的数据

  • 支持采集类型 1700881699358.jpg 支持的采集类型基本覆盖大多数场景,甚至部分中间件原生支持 Metrics ,无需使用 Exporter 采集,如 Nacos 、 Loki 等

3.2 数据汇聚

1700881692843.jpg 数据可通过联邦集群或 PushGateway 的方式进行汇聚,由各个子节点接收 Exporter 的数据,再由主节点接收子节点数据从而达到数据汇聚的目的。

注意:

    1. 联邦集群下,上游 Prometheus 采集周期需比下游 Prometheus 采集周期长,不可两倍大于下游 Prometheus ,防止数据采集不完整。
    1. 采集间隔不可过长,防止数据采集不完整。(建议60s左右)

3.3 数据存储

1700881686754.jpg

3.4 数据展示

1700881661853.jpg Prometheus 自带数据查询页面 Web UI ,但由于太过简陋,一般只用于测试 PromQL 表达式结果以及查看采集、告警状态。真正的数据展示场景会使用 Grafana 来替代, Grafana 图表展示数据实际上是以预先设定好的 PromQL 表达式对 Prometheus 数据进行查询,再以指定的图表样式展示。