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"
。该注释通过服务发现作为名为@987654336@ 的标签传递,keep
规则基于标签的值是否为true
。
【讨论】:
以上是关于Prometheus Labeldrop 操作背后的基本原理的主要内容,如果未能解决你的问题,请参考以下文章
监控平台设计 之 Prometheus 存储 LevelDB
从仿真到实飞,Prometheus自主无人机开发全覆盖!快来参加阿木实验室线下集训吧!
Prometheus 操作员 AlertmanagerConfig 未知字段“webhook_configs”