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 学习路线
- 整体架构:理解采集、TSDB 与规则链路。
- 安装部署:完成二进制、systemd 或 Docker 部署。
- 配置管理、Targets 与 服务发现:接入目标并排障。
- Exporter 与 PromQL:建立指标与查询能力。
- Kubernetes、监控体系、高可用 与 最佳实践:进入生产实践。
验收清单
- 能说明 Metric、Time Series、Label、Sample、Instance 与 Job 的关系
- 能区分 Prometheus、Grafana 与 Alertmanager 的职责
- 知道高基数标签为什么会影响内存、磁盘和查询性能
- 能根据监控目标选择 Counter、Gauge 或 Histogram