Prometheus 是什么
Prometheus 是开源的时序监控与告警系统,采用拉取模型:按配置定期通过 HTTP 抓取目标的 metrics 端点,把样本写入本地时序库,再由规则引擎持续评估记录规则与告警规则。它由 SoundCloud 开源后成为 CNCF 毕业项目,其查询语言 PromQL 被大量同类系统沿用,是容器与云原生环境监控的事实标准。
基本信息
| 采集模型 | 拉取为主,短生命周期任务可经 Pushgateway 中转 |
|---|---|
| 默认端口 | Prometheus 9090,Pushgateway 9091,Alertmanager 9093 |
| 数据存储 | 本地时序库,默认保留 15 天,按时间分块并压实 |
| 查询接口 | HTTP API:/api/v1/query 与 /api/v1/query_range |
| 配置文件 | /etc/prometheus/prometheus.yml |
典型使用场景
- 主机与容器资源监控:配合 node_exporter 采集 CPU、内存、磁盘、网络
- 应用指标与告警:服务暴露请求数、错误数、耗时直方图,规则引擎自动判定异常
- 容器编排集成:从 Kubernetes API 自动发现目标并按标签分片抓取
- SLO 度量:以 PromQL 计算成功率与延迟,为错误预算提供数据
- 统一数据出口:通过远程写把样本转发到长期存储,或用联邦汇总多集群
核心组件
| 组件 | 职责 | 默认端口 |
|---|---|---|
| Prometheus Server | 抓取、存储、查询、规则评估 | 9090 |
| Exporter | 把目标系统指标转换为 metrics 端点 | 9100(node_exporter)等 |
| Pushgateway | 接收短生命周期任务的推送指标 | 9091 |
| Alertmanager | 告警去重、分组、抑制、静默与通知 | 9093 |
| Grafana | 查询与可视化,常与整套体系搭配使用 | 3000 |
组件关系示意
组件关系示意
[exporters] --scrape--> [Prometheus] --alerts--> [Alertmanager] --notify--> 值班通道
| HTTP API (/api/v1/query)
v
[Grafana]
|
remote_write --> 长期存储(Thanos / Mimir / VictoriaMetrics)验证服务是否正常
验证服务是否正常
curl -s http://127.0.0.1:9090/-/healthy # 存活探针
curl -s 'http://127.0.0.1:9090/api/v1/targets' | head -c 400 # 抓取目标状态
curl -s 'http://127.0.0.1:9090/api/v1/query?query=up' | head -c 400 # 查询 up 指标拉取模型的取舍
| 方面 | 优势 | 代价 |
|---|---|---|
| 目标可发现性 | 服务端集中配置节奏,目标上下线可观测 | 动态环境需依赖服务发现而非手工登记 |
| 采集可控性 | 抓取间隔与超时由服务端统一调整 | 短生命周期任务需要 Pushgateway 补齐 |
| 容量边界 | 单实例抓取与存储能力有明确上限 | 大规模要靠分片、联邦或远程写扩展 |
Prometheus 默认单机存储、无内置长期归档:跨集群汇总与多年留存通常配合远程写、Thanos 或 Mimir 一类方案,本地只保留热数据。
热加载只作用于配置文件:数据保留期等命令行参数改动必须重启进程,重启期间规则评估会短暂中断。
一次抓取的完整链路
抓取的链路是:服务发现产出目标列表,relabel 阶段改写目标标签,随后按间隔发起 HTTP 请求,样本先写入预写日志再异步压实落盘,最后由查询引擎对外提供。这条链路也给出了定位思路:目标列表为空属于服务发现问题,目标抓到却报错属于网络或鉴权问题,查询变慢则多半与序列基数有关。
为什么 PromQL 要单独学
PromQL 是围绕时间序列设计的查询语言:选择器先筛出序列,函数把序列转换成速率、分位或趋势,聚合运算符再裁剪维度。它与 SQL 的思维差别明显,速率计算与向量匹配是最容易踩坑的两处,也是排障时最常被误用的部分。
规模变大后的常见问题
- 抓取超时:目标数量与端点耗时同时增长时,抓取耗时先逼近超时阈值
- 规则评估变慢:单个规则组负担过重会拖长评估周期,表现为告警延迟
- 存储吃紧:高基数指标同时推高内存与磁盘占用,需要提前做指标治理
- 查询变慢:面板一次拉取过多序列,通常靠聚合与降采样缓解
- 配置膨胀:多个抓取任务叠加大量 relabel 规则后,配置文件需要拆分与评审