✨ 揭秘Prometheus的隐藏宝藏:深入探索honor_labels

大家好!今天,我们将深入探讨在使用Prometheus时可能会遇到的一个有趣设置:honor_labels。

在使用Prometheus收集指标时,您可能会遇到这样的情况:“咦?我设置的标签怎么变了?”或者“我想要的标签不见了!”这个谜团的关键很可能就在于honor_labels!🔑


💥 标签冲突,到底发生了什么?

当Prometheus抓取(scrape)指标时,它会自动添加一些标签,以包含有关这些指标的有用信息。最典型的就是job和instance标签。

  • job: 表示该指标属于哪个抓取任务(job)。
  • instance: 表示该指标是从哪个目标(target)抓取而来的。

然而,这里可能会出现问题。如果我们要抓取的目标(target)的指标中已经存在名为job或instance的标签,会发生什么呢?🧐

例如,如果抓取目标暴露了类似my_metric{job="my-app-exporter"}的指标,而Prometheus配置中将此目标设置为job_name: 'api-server'进行抓取,那么job这个标签名就会发生冲突。

此时,Prometheus决定选择哪个标签的选项就是honor_labels。


🤔 honor_labels: false (默认值) – Prometheus的方式

此设置是honor_labels的默认值。顾名思义,它表示“不尊重”(false)抓取目标的标签,因此Prometheus自动添加的标签具有优先权。

  • 工作方式:
  1. Prometheus会直接使用自己配置的job、instance标签。🛡️
  2. 抓取目标中原有的冲突标签(例如:job)会被重命名。
  3. 名称前会添加exported_前缀,变为类似exported_job。🏷️
  • 示例:
  • 抓取目标指标: http_requests_total{job="frontend"}
  • Prometheus配置: job_name: 'web-crawlers'
  • 最终抓取结果: http_requests_total{job="web-crawlers", exported_job="frontend", ...}

结果是,Prometheus的job标签优先应用,而目标原有的job标签则被重命名为exported_job并保留。


👑 honor_labels: true – 尊重抓取目标的标签!

如果将此设置更改为true,Prometheus将以相反的方式工作。这意味着“尊重”(true)抓取目标的标签,因此Prometheus会直接使用抓取目标提供的标签。

  • 工作方式:
  1. 抓取目标指标中的标签将获得最高优先权。🙏
  2. 如果Prometheus打算添加的标签与现有标签名称冲突,Prometheus会默默放弃添加自己的标签。
  3. 抓取目标的标签将不做任何更改地保存。
  • 示例:
  • 抓取目标指标: http_requests_total{job="frontend"}
  • Prometheus配置: job_name: 'web-crawlers' 和 honor_labels: true
  • 最终抓取结果: http_requests_total{job="frontend", ...}

如您所见,Prometheus的job_name设置值’web-crawlers’被忽略,抓取目标原有的job="frontend"标签得以保留。


💡 何时应该使用 honor_labels: true?

那么,这个选项何时有用呢?它主要在以下情况下发挥作用:

  1. 配置Federation时: 当抓取另一个Prometheus服务器的/federate端点时使用。原始Prometheus已经拥有有意义的job和instance标签,因此在需要原样保留这些标签时,它是必不可少的。
  2. 使用Pushgateway时: Pushgateway会自行管理job和instance标签,因此当您希望不覆盖这些标签而直接使用它们时,此选项非常有用。
  3. 利用服务发现时: 在Kubernetes等环境中,当通过服务发现获得的元数据标签比Prometheus的job名称具有更重要的意义时,可以使用此选项将这些标签用作job标签。

📝 一目了然的总结

设置 honor_labels: false (默认值) honor_labels: true
优先级 Prometheus自动添加的标签 👑 抓取目标(Target)的现有标签 👑
冲突时行为 在目标标签名称前添加exported_ Prometheus的标签被丢弃
结果job标签 Prometheus配置值 (job_name) 抓取目标的原始job标签值
主要用途 大多数通用抓取环境 Federation、Pushgateway、高级服务发现

honor_labels是一个强大的工具,可以精细控制Prometheus的标签策略。充分理解并利用此选项,以管理更清晰、更有意义的指标!🚀


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注