2. Prometheus 架构总览:核心组件、数据流与通信拓扑

Prometheus 采用 拉取(Pull) 为主的监控数据采集模型,辅以 推送(Push) 机制处理短生命周期任务。理解其核心组件及通信拓扑是进行故障排查的基础。本章将拆解 Prometheus Server、Alertmanager、Pushgateway 和 Exporter 四大组件,并梳理它们之间的数据流关系。

2.1 核心组件一览

组件 角色 关键特性 通信方向
Prometheus Server 监控核心 数据采集、存储、查询、告警规则评估 主动 Pull / 接收 Push
Alertmanager 告警处理 告警去重、分组、静默、路由、通知 接收 Server 推送
Pushgateway 推送中转 接收短期任务指标,供 Server 拉取 接收 Push / 被 Pull
Exporter 数据采集代理 将第三方系统指标转换为 Prometheus 格式 被 Pull
架构要点: Prometheus Server 是唯一主动发起 HTTP 请求的组件(除 Pushgateway 场景外)。Exporter 和 Pushgateway 只被动等待拉取,Alertmanager 只接收推送。这种单向依赖简化了故障排查路径。

2.2 数据流与通信拓扑

下图展示了 Prometheus 生态中完整的指标数据流与组件间通信关系。箭头方向代表数据或告警的流动方向。

Prometheus 核心组件通信拓扑 Prometheus 核心组件通信拓扑 Exporter 集群 Node Exporter Blackbox Exporter MySQL Exporter ... 其他 Exporter Pushgateway 接收短期任务指标 Prometheus Server 数据采集 / 存储 告警规则评估 HTTP API / 查询 Alertmanager 告警去重 / 分组 路由 / 通知 通知渠道 邮件 / Slack / PagerDuty Pull /metrics Pull /metrics 告警推送 通知 任务推送 短期 / 批处理任务 说明:实线箭头表示数据流方向。Exporter 和 Pushgateway 被 Server 拉取;Server 向 Alertmanager 推送告警;Alertmanager 向外部渠道发送通知。

2.3 组件职责详解

2.3.1 Prometheus Server

  • 数据采集:根据配置的 scrape_config,定期向目标 Exporter 或 Pushgateway 的 /metrics 端点发起 HTTP GET 请求。
  • 时序存储:将拉取到的指标数据以自定义格式写入本地磁盘(TSDB),支持数据压缩与保留策略。
  • 告警规则评估:周期性计算 PromQL 表达式,当条件满足时生成告警并推送至 Alertmanager。
  • 查询接口:提供 PromQL 查询 API,供 Grafana 等可视化工具或命令行使用。

2.3.2 Alertmanager

  • 告警去重:对相同告警进行合并,避免重复通知。
  • 分组:按标签将告警归类,减少通知风暴。
  • 静默与抑制:支持基于标签的静默规则,以及依赖告警的抑制逻辑。
  • 路由与通知:根据配置的路由树,将告警发送至邮件、Slack、PagerDuty 等渠道。

2.3.3 Pushgateway

  • 适用场景:批处理任务、短生命周期容器、无法被直接拉取的临时作业。
  • 工作方式:任务结束时将指标推送到 Pushgateway,Prometheus Server 再定期从 Pushgateway 拉取。
  • 注意事项:Pushgateway 是单点,需监控其可用性;指标过期需手动清理或设置 push_timeout_seconds。

2.3.4 Exporter

  • 职责:将第三方系统(操作系统、数据库、中间件)的内部状态转换为 Prometheus 可识别的指标格式。
  • 常见类型:Node Exporter(主机)、Blackbox Exporter(网络探测)、MySQL Exporter、JMX Exporter 等。
  • 部署模式:通常与被监控对象同主机部署,或作为 Sidecar 容器运行。

2.4 通信拓扑关键点

通信对 协议 方向 故障排查要点
Server → Exporter HTTP / HTTPS Pull 网络可达性、端口开放、Exporter 进程存活、/metrics 端点响应
Server → Pushgateway HTTP / HTTPS Pull Pushgateway 服务状态、指标过期时间、数据完整性
Server → Alertmanager HTTP / gRPC Push Alertmanager 集群状态、告警队列积压、网络延迟
任务 → Pushgateway HTTP Push 任务脚本正确性、Pushgateway 认证、指标命名冲突
Alertmanager → 通知渠道 SMTP / Webhook / Slack API Push 通知服务配置、、速率限制
常见陷阱: 如果 Prometheus Server 无法拉取 Exporter 数据,请优先检查 scrape_config 中的 targets 地址是否正确、Exporter 端口是否被防火墙拦截、以及 /metrics 端点是否返回 200 状态码。不要忽略 DNS 解析和网络超时设置。

2.5 数据流示例:一次完整的监控循环

  1. 采集:Prometheus Server 每 15 秒(默认 scrape_interval)向 Node Exporter 的 http://node-exporter:9100/metrics 发起 GET 请求。
  2. 存储:Server 解析返回的文本格式指标,写入本地 TSDB,并打上 job="node"、instance="node-exporter:9100" 等标签。
  3. 评估:Server 执行告警规则 node_cpu_seconds_total > 0.9,触发告警。
  4. 推送:Server 将告警通过 HTTP 发送至 Alertmanager 的 /api/v1/alerts 端点。
  5. 通知:Alertmanager 对告警进行分组、去重后,通过配置的邮件路由发送通知。

理解这个循环有助于快速定位故障环节:是采集失败、存储异常、规则未触发,还是告警通知未送达。