剖析核心配置文件 prometheus.yml 详解

剖析核心配置文件 prometheus.yml 详解

prometheus.yml 是 Prometheus 的主配置文件,决定了 Prometheus Server 如何发现目标、抓取指标、评估规则、以及与外部系统(如 Alertmanager)交互。理解并正确配置该文件,是部署和运维 Prometheus 的核心技能。

本文将逐段详解 prometheus.yml所有关键配置项,结合生产环境最佳实践,帮助你构建一个稳定、高效、可维护的监控系统。


一、配置文件结构概览

# 全局配置
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  scrape_timeout: 10s

# 告警配置(连接 Alertmanager)
alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']

# 规则配置(记录规则 + 告警规则)
rule_files:
  - "rules/*.yml"

# 抓取配置(核心:定义监控目标)
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

二、1. global:全局配置

定义 Prometheus 的默认行为。

配置项详解

配置项默认值说明
scrape_interval1m默认抓取间隔(可被 job 覆盖)
scrape_timeout10s单次抓取超时时间
evaluation_interval1m告警和记录规则的评估频率
external_labels{}添加到所有指标的外部标签(如 datacenter: "us-east-1"

推荐配置(生产环境)

global:
  scrape_interval: 15s           # 统一抓取频率
  scrape_timeout: 10s            # 超时应小于 scrape_interval
  evaluation_interval: 15s       # 与 scrape_interval 保持一致
  external_labels:
    datacenter: "shanghai"
    environment: "production"
    cluster: "k8s-prod"

建议scrape_intervalevaluation_interval 保持一致,避免规则评估时数据不完整。


三、2. alerting:告警配置

配置 Prometheus 如何将告警发送到 Alertmanager

配置结构

alerting:
  alertmanagers:
    - scheme: http
      static_configs:
        - targets: ['alertmanager1:9093', 'alertmanager2:9093']
      timeout: 10s
      api_version: v1

关键配置项

配置项说明
targetsAlertmanager 实例地址列表(支持高可用)
schemehttphttps
timeout发送告警的超时时间
api_versionv1(当前唯一版本)

高可用配置示例

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager-primary:9093', 'alertmanager-standby:9093']

✅ Prometheus 会轮询所有 Alertmanager,实现高可用。


四、3. rule_files:规则文件

指定 Prometheus 加载的记录规则(Recording Rules)告警规则(Alerting Rules) 文件路径。

配置示例

rule_files:
  - "rules/alerts.yml"
  - "rules/recording.yml"
  - "rules/k8s/*.yml"

✅ 支持通配符 *,便于模块化管理。

规则文件示例(rules/alerts.yml

groups:
  - name: example-alerts
    rules:
      - alert: HighRequestLatency
        expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) > 1
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "High latency on {{ $labels.instance }}"

⚠️ 规则文件修改后需 重载 PrometheusPOST /-/reloadkill -SIGHUP)。


五、4. scrape_configs:抓取配置(核心)

定义 Prometheus 的监控任务(Jobs)目标发现方式

基本结构

scrape_configs:
  - job_name: 'node-exporter'
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: '/metrics'
    scheme: http
    static_configs:
      - targets: ['192.168.1.10:9100', '192.168.1.11:9100']
        labels:
          region: 'east'

关键配置项详解

配置项说明
job_name任务名称,会作为 job 标签自动添加
scrape_interval该任务的抓取频率(覆盖全局)
scrape_timeout该任务的抓取超时
metrics_path指标端点路径(默认 /metrics
schemehttphttps
basic_auth / bearer_token认证配置
tls_configTLS 证书配置
static_configs静态目标配置
file_sd_configs文件服务发现
kubernetes_sd_configsKubernetes 服务发现
relabel_configs抓取前重写标签
metric_relabel_configs抓取后重写指标

5.1 静态配置 static_configs

适用于固定 IP 的服务。

- job_name: 'prometheus'
  static_configs:
    - targets: ['localhost:9090']

5.2 文件服务发现 file_sd_configs

从外部文件动态加载目标。

- job_name: 'node'
  file_sd_configs:
    - files:
        - 'targets/nodes.json'
      refresh_interval: 5m

targets/nodes.json 示例:

[
  {
    "targets": ["192.168.1.10:9100", "192.168.1.11:9100"],
    "labels": { "region": "east" }
  }
]

✅ 适合非 Kubernetes 环境的动态服务。


5.3 Kubernetes 服务发现 kubernetes_sd_configs

自动发现 Kubernetes 中的 Pod、Service、Endpoint 等。

- job_name: 'kubernetes-pods'
  kubernetes_sd_configs:
    - role: pod
  relabel_configs:
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
      action: keep
      regex: true
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
      action: replace
      target_label: __metrics_path__
      regex: (.+)
    - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
      action: replace
      regex: ([^:]+)(?::\d+)?;(\d+)
      replacement: $1:$2
      target_label: __address__
    - action: labelmap
      regex: __meta_kubernetes_pod_label_(.+)
    - source_labels: [__meta_kubernetes_namespace]
      action: replace
      target_label: namespace

✅ 这是 Kubernetes 环境的标准配置,可自动发现所有带注解的服务。


六、6. relabel_configsmetric_relabel_configs

区别

配置时机用途
relabel_configs抓取前控制目标发现、修改 __* 元标签、过滤目标
metric_relabel_configs抓取后修改指标名称、标签,过滤无用指标

常见 relabel_configs 用法

1. 过滤目标(只抓取特定 Pod)
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
  action: keep
  regex: true
2. 重写 metrics_path
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
  action: replace
  target_label: __metrics_path__
  regex: (.+)
3. 添加自定义标签
- action: replace
  source_labels: [__meta_kubernetes_namespace]
  target_label: namespace
4. 使用 labelmap 提取所有 Pod 标签
- action: labelmap
  regex: __meta_kubernetes_pod_label_(.+)

常见 metric_relabel_configs 用法

1. 删除无用指标(节省存储)
- source_labels: [__name__]
  regex: 'go_.+'
  action: drop
2. 重命名指标
- source_labels: [__name__]
  regex: 'old_metric_name'
  replacement: 'new_metric_name'
  action: replace
  target_label: __name__
3. 过滤高基数标签
- action: labeldrop
  regex: 'user_id'

✅ 强烈推荐:使用 labeldrop 删除 user_id, request_id 等高基数标签。


七、完整生产级配置示例

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  scrape_timeout: 10s
  external_labels:
    environment: "production"
    cluster: "k8s-prod"

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

rule_files:
  - "rules/alerts.yml"
  - "rules/recording.yml"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: namespace
    metric_relabel_configs:
      - source_labels: [__name__]
        regex: 'unwanted_metric_.+'
        action: drop
      - action: labeldrop
        regex: 'user_id|trace_id'

八、配置管理最佳实践

实践说明
✅ 使用 external_labels 标识集群/环境便于多集群聚合
✅ 统一 scrape_interval避免数据不一致
✅ 模块化 rule_files按服务或团队拆分
✅ 使用 relabel_configs 控制标签爆炸删除或重写高基数标签
✅ 定期 reload 配置curl -X POST http://prometheus:9090/-/reload
✅ 配置文件版本化使用 Git 管理 prometheus.yml

九、总结

prometheus.yml 是 Prometheus 的“大脑”,其核心配置项包括:

配置块作用
global全局默认值
alerting连接 Alertmanager
rule_files加载告警和记录规则
scrape_configs定义监控任务和目标发现
relabel_configs抓取前标签重写
metric_relabel_configs抓取后指标处理

关键原则:

  • 服务发现优先:Kubernetes 用 kubernetes_sd_configs
  • 标签治理:用 relabelmetric_relabel 控制标签爆炸
  • 规则分离:将告警和记录规则放入独立文件
  • 高可用:配置多个 Alertmanager

通过深入理解 prometheus.yml,你可以构建一个自动化、可扩展、低维护成本的监控系统,为云原生应用提供坚实保障。

📌 官方文档https://prometheus.io/docs/prometheus/latest/configuration/configuration/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值