用 Prometheus + Grafana 搭建容器监控
用 Prometheus + Grafana 搭建容器监控
「看不见,就无从优化」。监控体系的核心目标是:实时看见系统状态,并在异常发生前告警。Prometheus 负责采集与存储指标,Grafana 负责可视化。
架构一图流
[Exporters / /metrics] → [Prometheus 拉取] → [TSDB 存储]
→ [Alertmanager 告警]
→ [Grafana 查询展示]
Prometheus 采用拉(pull)模型:它周期性地访问各目标的 /metrics 端点抓取指标。
一个最小配置
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'k8s-pods'
kubernetes_sd_configs:
- role: pod
用 PromQL 提问题
PromQL 是 Prometheus 的查询语言,下面是几个高频问题:
# CPU 使用率(按实例)
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# 容器内存使用 TOP 5
topk(5, container_memory_usage_bytes)
# 请求错误率
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))
技巧:把
rate()用在_total计数器上才能得到「速率」;用irate()对短时抖动更敏感。
在 Grafana 里可视化
Grafana 添加 Prometheus 数据源后,直接写 PromQL 就能出图。社区还有大量现成 Dashboard(如 Node Exporter Full,ID 1860),导入即可用。
别忘了告警
监控没有告警等于「事后诸葛亮」。在 Prometheus 中配置规则:
groups:
- name: example
rules:
- alert: HighCpuUsage
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 5m
labels: { severity: warning }
annotations:
summary: "实例 {{ $labels.instance }} CPU 持续偏高"
告警会推送到 Alertmanager,再分发到邮件、钉钉或企业微信。
小结
监控三步走:采集(Exporter)→ 查询(PromQL)→ 展示与告警(Grafana + Alertmanager)。先把指标「看见」,故障定位时间能缩短一个数量级。后续可以再引入 Loki 补齐日志、Tempo 补齐链路追踪,组成完整可观测性栈。