Lazy loaded image
Prometheus 配置文件和通用服务发现
Words 11247Read Time 29 min
2026-1-10
2026-1-10
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Jan 10, 2026 07:17 PM
是否已更新
orginal_page
是否推荐
参考资料
Prometheus 通过命令行标志和配置文件进行配置
  • 命令行标志配置不可变的系统参数
  • 配置文件定义与抓取作业及其实例相关的所有内容,以及要加载哪些规则文件
    • 要指定要加载的配置文件,请使用 --config.file 标志
  • Prometheus 可以在运行时重新加载其配置
    • 向 Prometheus 进程发送 SIGHUP 信号或向 /-/reload 端点发送 HTTP POST 请求(当启用 ` --web.enable-lifecycle 标志时)来触发配置重新加载
    • 如果新配置格式不正确,则更改将不会生效
Prometheus 三大通用服务发现:文件,HTTP,DNS
文件服务发现
  • 系统会监视各个文件的变更,其父目录也会被隐式监视
    • 如果父目录中包含大量其他无关文件,则可能导致问题,因为这些文件也会被一并监视
scrape_configs.file_sd_configs.<file_sd_config>
  • 服务发现文件格式
    • yaml 格式
      json 格式
  • 在 relabeling(标签重写)阶段,目标可以使用以下元标签
    • __meta_filepath:该目标所来源的文件路径
HTTP 服务发现
  • 从一个 HTTP 端点获取目标列表,该端点应返回零个或多个 <static_config> 的 JSON 数组
    • 目标端点必须返回 HTTP 200 响应,HTTP 响应头中的 Content-Type 必须为 application/json,且响应体必须是有效的 JSON
scrape_configs.http_sd_configs.<http_sd_config>
JSON 响应 body 格式
响应样例
DNS 服务发现
  • 系统会定期查询这些域名以发现目标列表
    • 所使用的 DNS 服务器从 /etc/resolv.conf 中读取
    • 仅支持基本的 DNS A、AAAA、MX、NS 和 SRV 记录查询,不支持 RFC6763 中定义的高级 DNS-SD(DNS Service Discovery)机制
scrape_configs.http_sd_configs.<http_sd_config>
  • 在 relabeling(标签重写)阶段,目标上可使用以下元标签
    • __meta_dns_name:生成该发现目标的 DNS 记录名称。
    • __meta_dns_srv_record_target:SRV 记录中的目标字段。
    • __meta_dns_srv_record_port:SRV 记录中的端口字段。
    • __meta_dns_mx_record_target:MX 记录中的目标字段。
    • __meta_dns_ns_record_target:NS 记录中的目标字段。
 

Prometheus 配置文件

配置 global 章节
配置 otlp 章节
scrape_configs.<scrape_config> 部分
特定服务发现配置包含
  • 主流公有云(AWS/EC2、Azure、GCE 等)
  • 其他云与主机服务商(DigitalOcean、Hetzner、Linode 等)
  • 私有云/虚拟化平台(OpenStack、Triton)
  • 容器与编排系统(Docker、K8s、Nomad、Marathon)
  • 服务注册中心(Consul、Eureka、Kuma、Nerve、Serverset)
  • 通用协议型发现(DNS、HTTP、File)
  • 配置管理工具集成(PuppetDB、Uyuni)
<static_config> 允许指定目标列表及其通用标签集
<relabel_config> 在抓取目标之前动态地重写其标签集
  • 每个抓取配置都可以配置多个 relabel 步骤,这些步骤会按照在配置文件中出现的顺序应用于每个目标的标签集
    • 所有以 __ 开头的标签(包括临时和内部标签)在重标记结束后会被自动移除
    • 如需在重标记步骤间传递临时值,可使用 __tmp 前缀,该前缀被 Prometheus 保留,不会冲突
初始标签
  • job 来自 job_name
  • __address__ 为目标的 <host>:<port>
  • 若未显式设置 instance 标签,重标记后会自动设为 __address__ 的值
  • __scheme____metrics_path____param_<name>__scrape_interval____scrape_timeout__ 等由 scrape_config 提供
  • 服务发现机制可能注入以 __meta_ 开头的元标签
支持以下 relabel_action
  • lowercase
  • uppercase
  • replace 将正则表达式与拼接后的 source_labels 值进行匹配
    • 如果匹配成功,则将 target_label 设置为 replacement,并将 replacement 中的匹配组引用(如 ${1}${2} 等)替换为实际捕获的值
    • 如果正则表达式不匹配,则不执行任何替换操作
  • keep
  • keepequal 丢弃那些拼接后的 source_labels 与 target_label 的值不相等的目标
  • labelkeep 将正则表达式应用于所有标签名称,任何不匹配的标签都将从标签集中移除
  • drop
  • dropequal 丢弃那些拼接后的 source_labels 与 target_label 的值相等的目标
  • labeldrop 将正则表达式应用于所有标签名称,任何匹配的标签都将从标签集中移除
  • hashmod 将拼接后的 source_labels 进行哈希运算后对 modulus 取模,并将结果赋值给 target_label
  • labelmap 将正则表达式应用于所有源标签名称(而不仅限于 source_labels 中指定的标签)。将匹配的标签的值复制到由 replacement 指定的新标签名中,并将 replacement 中的匹配组引用(如 ${1}${2} 等)替换为实际捕获的内容
  • relabel_action 使用 labeldrop 和 labelkeep 时必须小心,以确保在移除标签后指标仍然具有唯一标签
<metric_relabel_configs> 在样本被摄入(ingestion)前的最后一步应用的
  • 其配置格式和操作类型与目标重标记(target relabeling)完全相同
  • 指标重标记不会应用于自动生成的时间序列
  • 常见使用场景
    • 排除那些因成本过高而不宜摄入的时间序列
<http_config> 配置可以参考另一文章的 HTTP 客户端配置文件,基本上是一致的
alerting.alert_relabel_configs 在告警发送给 Alertmanager 之前应用的
  • 其配置格式和操作类型与目标重标记(target relabeling)完全相同,并且在外部标签(external labels)之后应用
    • 详见 scrape_configs.<scrape_config>.<relabel_config> 部分
  • 常见使用场景
    • 确保一对高可用(HA)的 Prometheus 服务器(具有不同的 external labels)发送完全相同的告警
alerting.alertmanagers.<alertmanager_config> 配置告警管理器
服务发现(基本和 scrape 部分一致)
  • 主流公有云(AWS/EC2、Azure、GCE 等)
  • 其他云与主机服务商(DigitalOcean、Hetzner、Linode 等)
  • 私有云/虚拟化平台(OpenStack、Triton)
  • 容器与编排系统(Docker、K8s、Nomad、Marathon)
  • 服务注册中心(Consul、Eureka、Nerve、Serverset)
    • 少一个 Kuma
  • 通用协议型发现(DNS、HTTP、File)
  • 配置管理工具集成(PuppetDB、Uyuni)
一些可用的身份验证配置 sigv4
remote_write.<remote_write> 写入到远程
  • write_relabel_configs 在将样本发送到远程端点之前对其进行重新标记。 在外部标签(external labels)之后应用
    • 可用于限制发送哪些样本
一些可用的身份验证配置 sigv4, azuread, google_iam
remote_read.<remote_read> 从远程端点读取
storage.tsdb.<tsdb> 配置 TSDB 的运行时可重新加载配置设置
storage.exemplars.<exemplars> 配置用于存储所有时间序列示例(exemplars)的环形缓冲区的最大大小
  • 实验性,必须通过 --enable-feature=exemplar-storage 启用
tracing.<tracing_config> 通过 OTLP 协议将跟踪从 Prometheus 导出到跟踪后端
  • 实验性功能,将来可能会发生变化
 
上一篇
KRaft 模式 kafka 高可用集群部署
下一篇
警报管理器 Alertmanager 和命令行工具 amtool

Comments
Loading...