本文详细解析了 Prometheus 配置文件 (prometheus.yml) 的所有关键部分,包括全局设置、规则加载、告警配置、指标采集和远程存储等核心功能的配置方法。
Prometheus 配置文件完整解析
📝 配置文件概述
Prometheus 的配置基于 YAML 格式,定义了其所有核心行为:
- 全局默认参数
- 规则文件加载
- 告警管理集成
- 指标采集任务
- 远程存储配置
1️⃣ 全局配置(global)
global 块定义了适用于所有配置的默认参数:
global:
# 默认抓取间隔
scrape_interval: 15s # 每 15 秒采集一次指标
# 抓取超时时间
scrape_timeout: 10s # 等待目标响应的最长时间
# 规则评估间隔
evaluation_interval: 15s # 每 15 秒评估一次规则
# 外部标签(用于区分不同 Prometheus 实例)
external_labels:
monitor: 'prom-prod-01' # 生产环境实例标识
region: 'us-east-1' # 区域标识
💡 提示:外部标签仅附加在时间序列数据发送到外部系统(如 Alertmanager)时。
2️⃣ 规则文件配置(rule_files)
指定需要加载的规则文件路径:
rule_files:
# 使用 glob 模式加载规则文件
- "/etc/prometheus/rules/*.yml"
# 也可以指定具体文件
- "/etc/prometheus/recording.rules"
- "/etc/prometheus/alerting.rules"
3️⃣ 告警配置(alerting)
配置 Alertmanager 连接信息:
alerting:
alertmanagers:
- static_configs:
- targets:
- 'alertmanager:9093' # Alertmanager 服务地址
scheme: http # 连接协议(http/https)
timeout: 10s # 请求超时时间
// …existing code…
4️⃣ 抓取配置(scrape_configs)
定义指标采集任务:
scrape_configs:
# Prometheus 自身监控
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 节点导出器监控
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
# Kubernetes 服务发现示例
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
🔍 标签重写(relabel_configs)
relabel_configs:
# 保留特定标签的目标
- source_labels: [__meta_kubernetes_pod_label_app]
regex: my-app
action: keep
# 替换标签值
- source_labels: [__meta_kubernetes_namespace]
target_label: namespace
# 删除特定标签
- regex: '__meta_kubernetes_.*'
action: labeldrop
5️⃣ 远程存储配置(remote_write/remote_read)
# 远程写入配置
remote_write:
- url: 'http://remote-storage:9201/write'
queue_config:
capacity: 10000
max_samples_per_send: 1000
batch_send_deadline: 30s
# 远程读取配置
remote_read:
- url: 'http://remote-storage:9201/read'
read_recent: true
6️⃣ 存储配置(storage)
storage:
tsdb:
# 数据保留时间
retention.time: 15d
# 数据目录
path: /prometheus
# 启用压缩
compression: true
⚙️ 完整配置示例
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
env: 'production'
rule_files:
- '/etc/prometheus/rules/*.yml'
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
remote_write:
- url: 'http://thanos-receive:9090/api/v1/receive'
storage:
tsdb:
retention.time: 15d
path: /prometheus
📋 配置验证
# 检查配置文件语法
promtool check config /etc/prometheus/prometheus.yml
# 验证规则文件
promtool check rules /etc/prometheus/rules/*.yml
# 单元测试规则
promtool test rules test.yml
⚠️ 最佳实践
- 合理设置采集间隔,避免过于频繁
- 使用服务发现替代静态配置
- 配置适当的数据保留期限
- 定期备份配置文件
- 使用版本控制管理配置
🔗 参考资源
关于我
全平台同名”汪多多是只猫”,专注分享实用开源工具,让你的数字生活更自由!
关注我,发现更多旧物改造的乐趣与技巧!