它们是什么
- Prometheus:CNCF Graduated(2018)的时序数据库,擅长指标采集 + 告警
- Grafana:可视化平台,能连 Prometheus / Loki / InfluxDB / 各种云监控
两者单独都强、组合是 K8s 时代监控的事实标准("PromGraf 栈")。
拉模型(Pull)的意义
传统:app push 数据到监控(statsd / DataDog agent)
Prometheus:监控主动 pull /metrics 端点
Pull 的好处:
- 监控知道哪些目标该活着——目标不响应 = 异常
- 应用不需要知道监控在哪
- 服务发现自动化(K8s / Consul / 文件 / DNS)
代价:app 要暴露 /metrics 端点(Prometheus 客户端库一行)。
4 种 metric 类型
counter 单调递增(总请求数、总错误数)
gauge 可上可下(当前内存、队列长度)
histogram 分布(请求延迟分桶)
summary 类似 histogram,分位数预算(少用,histogram 更通用)
/metrics 端点长啥样
# HELP http_requests_total Total HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="GET",status="200"} 1234
http_requests_total{method="POST",status="500"} 12
# HELP http_request_duration_seconds Latency
# TYPE http_request_duration_seconds histogram
http_request_duration_seconds_bucket{le="0.1"} 800
http_request_duration_seconds_bucket{le="0.5"} 1200
http_request_duration_seconds_bucket{le="1"} 1230
应用层接 [client_python / client_golang / client_java] 自动维护这些。
PromQL 速览
# 当前 5xx 速率
sum(rate(http_requests_total{status=~"5.."}[5m])) by (service)
# p95 延迟
histogram_quantile(0.95,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service)
)
# 5 分钟错误率超过 1%
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) > 0.01
PromQL 的核心是 rate(...[5m])——把 counter 转成"每秒变化率"。
Exporter 生态
Prometheus 不直接采集系统指标,靠 exporter:
| Exporter | 采集什么 |
|---|---|
node_exporter |
Linux 主机层(CPU / 内存 / 磁盘 / 网络) |
cAdvisor |
容器层 |
blackbox_exporter |
探活(HTTP / TCP / DNS) |
mysqld_exporter / postgres_exporter |
数据库 |
redis_exporter / kafka_exporter |
中间件 |
K8s 集群里 [kube-prometheus-stack] Helm chart 一键装齐。
Grafana:连 Prometheus 之外的事
Grafana 不是 Prometheus 专属——它能连 几十种数据源:
- Prometheus / VictoriaMetrics / Mimir / Thanos
- Loki(同家公司)
- InfluxDB / TimescaleDB
- AWS CloudWatch / Azure Monitor / GCP Monitoring / 阿里 ARMS / 腾讯 CM
- MySQL / Postgres / Elasticsearch
统一看板,多源数据——这是 Grafana 不可替代的地方。
仪表板设计的几条经验
- 每个服务一张主大盘(RED:Rate、Errors、Duration)
- 基础设施一张总盘(节点 / 磁盘 / 网络)
- 不要堆 50 个图——看的人会放弃
- 加文字注释:每个图的旁边写"超过 X 该看什么"
- 拷贝同事的板:CNCF 周边项目大多有官方 Grafana dashboard
Prometheus 的扩展性边界
单实例 Prometheus 能吃 几十万 series——大集群会撑不住。需要扩展时:
- Thanos:多 Prometheus + 长存到对象存储 + 全局查询
- Cortex / Mimir(Grafana Labs):水平扩展,多租户
- VictoriaMetrics:兼容 PromQL,性能更好,单二进制
中小规模单 Prometheus 够用,先别上分布式。撑不住再迁。
推荐阅读
- Prometheus 官方文档
- PromLabs — 由 Prometheus 核心开发者运营,PromQL 教学
- Grafana 官方文档
- kube-prometheus-stack — K8s 一键监控栈
- VictoriaMetrics — Prometheus 兼容的高性能替代
下一篇:日志聚合——ELK vs Loki vs 云原生。