Prometheus Labeldrop 操作背后的基本原理

Posted

技术标签:

【中文标题】Prometheus Labeldrop 操作背后的基本原理【英文标题】:Rationale behind Prometheus Labeldrop Action 【发布时间】:2019-11-27 17:32:33 【问题描述】:

我知道为了限制向存储系统发送不必要的指标,我们可以使用 metrics_relabel_configs 和 action "labeldrop" 来删除某些标签。

在我看到的所有示例中,人们都在删除标签,就好像他们已经知道与指标相关的所有标签一样。

在为 kubernetes 使用诸如 node_exporters、process_exporter 和 kubestatemetrics 之类的导出器时,存在的指标太多了。你如何决定保留或放弃哪一个?

【问题讨论】:

【参考方案1】:

labeldrop 操作的存在是因为 cAdvisor 用于向每个 pod 指标添加大量不同且不需要的标签,并且它允许您删除它们。这就是 labeldrop 和 labelkeep 的用例,当目标在指标上公开标签时,实际上应该在信息指标上进行。

【讨论】:

【参考方案2】:

labeldrop 仅删除附加到指标的标签,正如 Brian 所说的那样,它可以修剪不必要的信息标签。完成该操作后,指标名称和标签集必须仍然是唯一的,以免与其他指标混淆。

为了删除整个指标,可以使用 drop 操作,它使用正则表达式来定位指标的特征 - 包括 __name__ 标签 - 来决定是否应该删除整个指标删除。

查看任何一个目标的可用标签的最快方法是查看目标部分中的 Prometheus UI,例如prometheus:9090/targets。在该页面上,您可以看到抓取作业的每个目标,以及附加到存储指标的标签。如果您将鼠标悬停在这些标签上,您还可以查看在对其应用任何重写之前的标签。

一些重新标记操作是自动的,例如__address__ 被重命名为instance,并且labeldrop 操作会自动应用于名称开头带有__double_underscore__ 的所有标签应用了所有重新标记规则之后。这意味着无需删除任何以双下划线开头的规则。

至于选择完全删除哪些指标,这取决于您的需求、您是否有任何recording rules 以及您在什么时候删除它们。

1234563删除所有原始指标。

将所有这些指标保留在短期本地存储中也可能有意义,但使用 write_relabel_configs 在将它们发送到长期 remote storage 之前删除它们。

另外值得注意的是,还有另一个名为keep 的操作与drop 相反,删除所有匹配的除了指标。此操作的一个很好的用途是使用应用于 pod 的注释来确保 Prometheus 仅获取特定作业的正确指标。 my blog post and video 中有一个示例,其中要为特定作业的指标抓取的 pod 被注释为 prometheus.io/scrape: "true"。该注释通过服务发现作为名为@9​​87654336@ 的标签传递,keep 规则基于标签的值是否为true

【讨论】:

以上是关于Prometheus Labeldrop 操作背后的基本原理的主要内容,如果未能解决你的问题,请参考以下文章

监控平台设计 之 Prometheus 存储 LevelDB

从仿真到实飞,Prometheus自主无人机开发全覆盖!快来参加阿木实验室线下集训吧!

Prometheus 操作员 AlertmanagerConfig 未知字段“webhook_configs”

轻松搭建Prometheus监控容器服务

普罗米修斯?古希腊泰坦之神?异形?不,新一代企业级监控组件—Prometheus!

普罗米修斯?古希腊泰坦之神?异形?不,新一代企业级监控组件—Prometheus!