Monitoring 如何在普罗米修斯中重命名公制内的标签

Monitoring 如何在普罗米修斯中重命名公制内的标签,monitoring,prometheus,Monitoring,Prometheus,我有一个问题: node_systemd_unit_state{instance="server-01",job="node-exporters",name="kubelet.service",state="active"} 1 我希望标签名称仅在节点系统单位状态度量内重命名(或替换)为单位名称。因此,期望的结果是: node_systemd_unit_state{instance="server-01",job="node-exporters",unit_name="kubelet.serv

我有一个问题:

node_systemd_unit_state{instance="server-01",job="node-exporters",name="kubelet.service",state="active"} 1
我希望标签
名称
仅在
节点系统单位状态
度量内重命名(或替换)为
单位名称
。因此,期望的结果是:

node_systemd_unit_state{instance="server-01",job="node-exporters",unit_name="kubelet.service",state="active"} 1

节点导出器
作业中,还有许多其他指标具有标签名
名称
。这就是为什么我不能在整个作业中使用relabel配置

您可以有多个源标签,因此:

- source_labels: [__name__, name]
  regex: "node_systemd_unit_state;(.+)"
  target_label: unit_name

如果标签名称与其他指标/导出器不匹配,您应该向他们提交一个bug。像这样重新标记应该只是一个临时解决方案,而需要进行适当的修复。

您可以在ProMQ中使用label\u replace函数,但它也会添加标签,而不是替换它

label_replace(
  <vector_expr>, "<desired_label>", "$1", "<existing_label>", "(.+)"
)

label_replace(
node_systemd_unit_state{instance="server-01",job="node-exporters",name="kubelet.service",state="active"},
"unit_name","$1","name", "(.+)"
)

我厌倦了所有零碎的文档,我觉得我在这篇文章中提供了一个更好的答案:

替换不是真正的替换

您的目标是简单地将旧标签名“old_job_id”替换为新标签名“new_task_id”。普罗米修斯标签将真正“添加”新的标签名称。它还将保留旧的标签名称…因此,这可能是一个问题,它不是真正的“替换到位”

因此,如果要“添加”新标签名并“删除”旧标签名,则需要执行以下操作:

sum without (old_job_id) (label_replace(metric, "new_task_id", "$1", "old_job_id", "(.*)"))
这是这样写的:

  • 不带(旧\u作业\u id)的总和将从列表中删除旧标签名称 查询输出

  • 度量是您的度量,如“节点\文件系统\可用字节”

  • “new_task_id”是您放置新标签名称的位置

  • “$1”是用于在新标签名称中使用字符串的正则表达式,请勿更改 这个

  • “旧工作id”是你将旧标签放在那里的地方,你想要的标签 摆脱(.*……)那乱七八糟的正则表达式将取代整个正则表达式 标签名称


太好了!但在这种情况下,我总是有两个标签:
name
unit\u name
,它们的值每次都是相同的。我希望避免这种重复。除了将
name
的值临时存储在
\uu tmp\u name
标签中,并将其从所有人手中删除之外,似乎没有办法做到这一点trics,然后将其添加回除
node\u systemd\u unit\u state
之外的所有度量。但是编写正则表达式以匹配除
node\u systemd\u unit\u state
之外的所有度量值将是一个PITA,整个过程可能不会那么高效。这是一种不进行任何配置更改的方法!
sum without (old_job_id) (label_replace(metric, "new_task_id", "$1", "old_job_id", "(.*)"))