通过脚本重命名普罗米修斯中的图例标签?

Posted

技术标签:

【中文标题】通过脚本重命名普罗米修斯中的图例标签?【英文标题】:Rename legend label in prometheus by script? 【发布时间】:2021-11-17 14:04:12 【问题描述】:

我在 Prometheus 中有一个简单的查询,例如:

irate(node_network_receive_bytes_totaljob="job-name",device=~"br-.*",name="a-name"[5m])

传说包含:device received

在面板上,我看到了我的度量图形,右侧是一个图例列表,其中包含所有网络“设备”的名称,例如:

br-a539a330b41b received
br-6c596943b7c8 received
br-dc406d831d4e received
[...]

如果我询问那台计算机上的 docker network,我可以得到一个名单,例如:

ubuntu@ip-10-278-0-45:~$ docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
0a9c74974c7f   bridge               bridge    local
6c596943b7c8   a-service_default    bridge    local
dc406d831d4e   b-service_default    bridge    local
a539a330b41b   c-service_default    bridge    local
68a058a0a38b   host                 host      local
0b101d111154   none                 null      local
[...]

在一个简单的 bash 中,我可以将当​​前给定的面板图例翻译成更易于理解的服务名称。

docker network ls | grep 6c596943b7c8 | awk 'print $2' | sed 's/_default//'

有没有一种简单的方法可以将当前的 Legend device 翻译成更易读的东西,比如 docker network ls 中的名称?

所以我得到了这样的传说:

a-service received
b-service received
c-service received
[...]

或者还有其他“简单”的方式来翻译像桥接网络名称这样的 uuid?

一种“其他”方式可能是“操纵”node_exporter 输出。

【问题讨论】:

【参考方案1】:

您可以将label_map 函数与network_id -> network_name 映射一起使用。例如:

label_map(
  irate(node_network_receive_bytes_totaljob="job-name",device=~"br-.*",name="a-name"[5m]),
  "device",
  "br-6c596943b7c8", "a-service",
  "br-dc406d831d4e", "b-service",
  "br-a539a330b41b", "c-service",
)

label_map 函数在VictoriaMetrics 中可用。我希望它很快就会被添加到 Prometheus 中。

【讨论】:

这很好,但对我不起作用,因为 br-* 名称在新部署后会改变。没有更自动的方法吗? node_exporter 不会在 node_network_receive_bytes_total 指标的标签中导出接口名称。最好在 github.com/prometheus/node_exporter/issues 提交功能请求,以便添加将网络接口名称放入该指标标签的功能。

以上是关于通过脚本重命名普罗米修斯中的图例标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何从普罗米修斯警报中标记松弛通道中的用户

从普罗米修斯抓取中排除 Kubernetes 命名空间

普罗米修斯缺席函数

Grafana 过滤 Thanos 商店标签|格拉法纳普罗姆修斯灭霸

在普罗米修斯的标签中使用标识。标签的最佳实践

普罗米修斯警报中缺少标签