它们是什么

  • 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 够用,先别上分布式。撑不住再迁。

推荐阅读

下一篇:日志聚合——ELK vs Loki vs 云原生。