2. Prometheus 生态概览:核心组件关系与数据流

在构建日志检索、准入门禁、自监控与告警自愈体系之前,必须先理解 Prometheus 生态中各组件的角色与协作方式。本章从组件职责、数据流向、部署拓扑三个维度,梳理 Prometheus、Loki、Alertmanager、Grafana 之间的核心关系。

2.1 组件职责矩阵

下表列出四个核心组件在可观测性体系中的定位、数据来源与输出目标:

组件 核心职责 数据来源 输出目标 数据形态
Prometheus 指标采集、存储、告警规则评估 Exporter、Pushgateway、服务自身 Alertmanager、Grafana、Remote Storage 时序指标(Metric + Label)
Loki 日志聚合、索引、查询 Promtail、Fluent Bit、Docker 日志驱动 Grafana(LogQL 查询) 日志行 + Label 索引
Alertmanager 告警去重、分组、静默、路由、通知 Prometheus(Alerting Rules) 邮件、Slack、PagerDuty、Webhook 告警事件(Alert JSON)
Grafana 统一可视化、仪表盘、告警管理 Prometheus、Loki、Elasticsearch 等 用户浏览器、告警通知 图表、表格、日志面板
关键认知: Prometheus 负责“数字型”指标,Loki 负责“文本型”日志,Alertmanager 负责“事件型”告警,Grafana 负责“展示型”界面。四者互补,构成完整的可观测性三角。

2.2 数据流全景图

下图展示从数据采集到告警通知、从指标查询到日志关联的完整数据流。箭头方向代表数据推送或拉取的方向。

Prometheus 生态数据流全景图 Prometheus 生态数据流全景图 被监控目标 (应用/主机/容器) Exporter / Promtail (指标/日志采集器) Prometheus Server (拉取 / 存储 / 规则评估) Loki (日志聚合 / 索引) Alertmanager (去重 / 分组 / 通知) Grafana (可视化 / 统一查询) 通知渠道 (邮件/Slack/Webhook) 数据流说明: 1. 实线箭头:Prometheus 主动拉取指标 → 评估告警规则 → 推送至 Alertmanager → 通知外部。 2. 虚线箭头:Grafana 作为统一查询层,从 Prometheus 拉取指标、从 Loki 拉取日志。 3. 日志采集器(Promtail)将日志推送到 Loki,不经过 Prometheus。

2.3 组件间数据流详解

根据上图,数据流可拆解为三条主线:

2.3.1 指标采集与告警链路

  1. Prometheus Server 通过 scrape_config 配置,定期从 Exporter 或应用自身暴露的 /metrics 端点拉取指标。
  2. Prometheus 将指标存储在本地 TSDB 中,并持续评估 Recording Rules 和 Alerting Rules。
  3. 当告警规则触发,Prometheus 将告警事件推送到 Alertmanager。
  4. Alertmanager 执行去重、分组、静默、抑制后,通过配置的 Receiver(邮件、Slack、PagerDuty、Webhook)发送通知。

2.3.2 日志采集与查询链路

  1. Promtail(或其他日志采集器)从日志文件、stdout、journald 等来源读取日志行。
  2. Promtail 为日志行附加 Label(如 job、instance、container),通过 HTTP 推送到 Loki。
  3. Loki 对日志内容进行压缩存储,仅对 Label 建立索引,不对日志全文建索引(区别于 Elasticsearch)。
  4. 用户通过 Grafana 使用 LogQL 查询日志,Grafana 将查询请求转发给 Loki 的 HTTP API。

2.3.3 统一可视化链路

  1. Grafana 配置多个数据源:Prometheus(指标)、Loki(日志)、以及可能的 Jaeger(链路)。
  2. 在同一个 Dashboard 中,用户可以将指标趋势图与日志面板并排展示,实现 指标→日志→链路 的关联分析。
  3. Grafana 也支持基于 Prometheus 指标的告警规则配置,但生产环境通常将告警规则放在 Prometheus 侧,Grafana 仅做可视化。
实践要点: 在准入门禁场景中,Prometheus 负责采集准入请求的 QPS、延迟、错误率;Loki 负责存储准入日志(如拒绝原因、用户身份);Alertmanager 负责在错误率突增时发送告警;Grafana 提供统一的“准入控制面板”,同时展示指标曲线和日志详情。

2.4 部署拓扑模式

根据规模与职责分离需求,常见三种部署模式:

模式 适用场景 组件部署方式 优缺点
单机 All-in-One 开发测试、小规模 Prometheus + Loki + Alertmanager + Grafana 同主机 部署简单,但单点故障,扩展性差
分层部署 中等规模、多团队 Prometheus 按业务拆分;Loki 独立集群;Alertmanager 全局共享 职责清晰,可独立扩缩容;运维复杂度增加
微服务 + 联邦 大规模、多数据中心 Prometheus 联邦 + Thanos/Cortex;Loki 微服务模式;Grafana 统一入口 高可用、长期存储、全局视图;架构复杂
避坑提示: 不要将 Prometheus 和 Loki 部署在同一台磁盘 IO 密集的主机上。Prometheus 的 WAL 写入与 Loki 的日志写入会争抢磁盘带宽,导致采集延迟或日志丢失。建议至少分离数据盘或使用独立节点。

2.5 组件间通信协议与端口

下表列出组件间默认通信方式,便于网络策略配置与故障排查:

源组件 目标组件 协议 默认端口 说明
Prometheus Server Exporter / 应用 HTTP 9100 / 自定义 Prometheus 主动拉取 /metrics
Prometheus Server Alertmanager HTTP/gRPC 9093 推送告警事件
Promtail Loki HTTP/gRPC 3100 推送日志流
Grafana Prometheus HTTP 9090 查询指标数据
Grafana Loki HTTP 3100 查询日志数据
Alertmanager 通知渠道 SMTP/HTTP 25/443 发送告警通知

2.6 本章小结

  • Prometheus 生态以 指标 为中心,Loki 以 日志 为中心,Alertmanager 以 事件 为中心,Grafana 以 可视化 为中心。
  • 数据流分为三条主线:指标采集→告警通知、日志采集→日志查询、统一可视化。
  • 部署模式需根据规模选择,生产环境推荐分层或联邦模式,避免单点瓶颈。
  • 组件间通信协议以 HTTP/gRPC 为主,端口规划需提前纳入网络策略。