通过脚本重命名普罗米修斯中的图例标签?
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 提交功能请求,以便添加将网络接口名称放入该指标标签的功能。以上是关于通过脚本重命名普罗米修斯中的图例标签?的主要内容,如果未能解决你的问题,请参考以下文章