跳到主要内容

Prometheus 配置管理

prometheus.yml 定义抓取、服务发现、规则文件、告警接收端和全局参数。配置应进入版本控制,通过 promtool 校验并在预发环境验证,不应长期依赖生产 UI 或临时 shell 修改。

1. prometheus.yml 配置结构​

prometheus.yml
global:
scrape_interval: 30s
scrape_timeout: 10s
evaluation_interval: 30s
external_labels:
cluster: production-a
environment: production

rule_files:
- /etc/prometheus/rules/*.yml

alerting:
alertmanagers:
- static_configs:
- targets: [alertmanager.monitoring.svc:9093]

scrape_configs: []

scrape_timeout 必须小于 scrape_interval。external_labels 主要用于远端写入和 Alertmanager 去重,应在同一告警域内稳定且可区分集群与副本。

2. Global 配置​

scrape_interval 控制抓取频率,evaluation_interval 控制规则评估频率。不要以为越短越好:更短间隔会增加目标压力、样本量和查询成本。根据故障发现目标、指标变化速度和资源预算选择间隔。

3. Scrape Configs​

scrape_configs:
- job_name: node-exporter
scrape_interval: 30s
static_configs:
- targets:
- node-01.internal.example:9100
- node-02.internal.example:9100
labels:
team: platform

job_name 会生成 job 标签,默认 instance 为目标地址。目标变动频繁时应改用文件、DNS、Kubernetes 或云服务发现,不要持续手工维护 IP 列表。

Relabel 与 Metric Relabel​

relabel_configs 在抓取前处理目标元数据,用于筛选、重写地址和添加标签;metric_relabel_configs 在抓取后处理样本,用于明确丢弃少量无用指标。

relabel_configs:
- source_labels: [__meta_kubernetes_namespace]
action: keep
regex: production
- source_labels: [__meta_kubernetes_pod_name]
target_label: pod

metric_relabel_configs:
- source_labels: [__name__]
action: drop
regex: go_memstats_.*

不要把 metric_relabel_configs 当作高基数治理的主要方案。它发生在样本抓取后,无法消除网络与解析成本;应优先从应用指标、Exporter 配置和目标选择器控制数据量。完整的服务发现、目标重写、keep/drop、labelmap 与分片示例见 服务发现与 Relabeling。

4. Rule 配置​

/etc/prometheus/rules/service.yml
groups:
- name: service-rules
interval: 30s
rules:
- record: service:http_requests:rate5m
expr: sum by (cluster, service, code) (rate(http_requests_total[5m]))
- alert: ServiceHighErrorRate
expr: |
sum by (cluster, service) (service:http_requests:rate5m{code=~"5.."})
/ sum by (cluster, service) (service:http_requests:rate5m) > 0.05
for: 10m
labels:
severity: warning
team: platform
annotations:
summary: "{{ $labels.service }} 5xx 错误率持续过高"
runbook_url: "https://runbooks.example.com/service-high-error-rate"

记录规则统一复杂查询口径;告警规则必须包含责任团队、严重程度和运行手册。Alertmanager 的路由、静默和抑制见 Alertmanager 文档。

5. 配置最佳实践​

  • 指标以单位结尾,例如 _seconds、_bytes、_total,同一概念不要混用单位。
  • 标签描述有限维度,禁止无约束用户标识和请求标识。
  • 每个任务设置合适抓取间隔和超时,避免所有目标使用同一高频策略。
  • 用 Git 管理配置与规则,在 CI 执行 promtool check config、promtool check rules。
  • 发布后检查 prometheus_config_last_reload_successful、Targets 和关键规则状态。