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 和关键规则状态。