跳到主要内容

Prometheus 简介

Prometheus 是面向动态基础设施和云原生系统的开源监控与告警平台。它以拉取方式采集指标,将数据存入时序数据库,使用 PromQL 查询,并将满足条件的告警交给 Alertmanager 路由通知。

1. Prometheus 解决的问题​

传统监控通常围绕固定主机、阈值和人工配置展开。容器、弹性扩缩、微服务和多集群环境中,实例地址频繁变化,单纯依赖固定 IP 和人工维护容易造成采集遗漏、标签不一致与告警噪声。

Prometheus 的核心能力是:

  • 自动发现动态目标,并持续检查采集是否成功。
  • 用统一标签描述服务、环境、集群和实例,支持多维聚合。
  • 使用 PromQL 计算速率、错误率、延迟分位数和容量趋势。
  • 通过规则把查询固化为记录指标和可执行告警。

它适合系统、应用、数据库、中间件和业务指标。日志用于还原事件细节,链路追踪用于定位单个请求路径;Prometheus 不能替代它们。

2. Prometheus 与传统监控系统对比​

维度Prometheus传统主机监控模式
目标管理服务发现与标签驱动固定 IP、手工模板或 Agent 列表
数据模型多维时间序列通常按主机或单一指标组织
查询方式PromQL 实时聚合固定报表或预定义图表
告警规则计算后交由 Alertmanager 分组路由单点阈值直接通知较常见
动态环境适合容器、Kubernetes、弹性实例需要频繁维护资产清单

Prometheus 不意味着零配置。服务发现、标签、存储保留、权限和告警责任边界都需要按生产标准设计。

3. Prometheus 核心概念​

概念含义示例
Metric被度量对象的名称http_requests_total
Time Series指标名与完整标签集确定的一条序列http_requests_total{service="checkout",code="200"}
Label描述维度的键值对cluster="production-a"
Sample某个时间点的值时间戳加数值
Instance一个被抓取的具体目标node-01.internal:9100
Job同类目标的采集任务node-exporter

Metric、Label 与 Sample 共同构成时间序列。标签必须是有限且稳定的维度;用户 ID、订单号、请求 ID、完整 URL 和异常文本会导致高基数,应放入日志或追踪系统。

Prometheus 常见指标类型:Counter 记录只增不减的累计量,使用 rate() 或 increase() 查询;Gauge 表示可升可降的当前值;Histogram 用于延迟和分布统计;Summary 是客户端计算的分位数,跨实例聚合受限。

4. Prometheus 生态​

应用 / Exporter --> Prometheus Server --> Grafana
| |
Rule Engine Alertmanager --> IM / 邮件 / 电话
|
Remote Write / 长期存储
  • Prometheus Server:服务发现、抓取、TSDB、规则评估和 HTTP API。
  • Exporter:将主机或中间件状态暴露为 /metrics,例如 node_exporter。
  • Service Discovery:从 Kubernetes、DNS、文件或云平台发现目标。
  • Recording Rule:预计算高频或复杂查询,生成新的时间序列。
  • Alert Rule:在表达式持续满足条件时生成告警。
  • Grafana:查询、看板、探索和可视化,详见 Grafana 文档。
  • Alertmanager:告警分组、去重、静默、抑制与通知路由,详见 Alertmanager 文档。

5. Prometheus 学习路线​

  1. 整体架构:理解采集、TSDB 与规则链路。
  2. 安装部署:完成二进制、systemd 或 Docker 部署。
  3. 配置管理、Targets 与 服务发现:接入目标并排障。
  4. Exporter 与 PromQL:建立指标与查询能力。
  5. Kubernetes、监控体系、高可用 与 最佳实践:进入生产实践。

验收清单​

  • 能说明 Metric、Time Series、Label、Sample、Instance 与 Job 的关系
  • 能区分 Prometheus、Grafana 与 Alertmanager 的职责
  • 知道高基数标签为什么会影响内存、磁盘和查询性能
  • 能根据监控目标选择 Counter、Gauge 或 Histogram