You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Prometheus图例中的Docker网桥ID转换为可读服务名

可用实现方案(无需修改node_exporter)

以下方案按实现成本从低到高排序:

1. Grafana 值映射(最推荐,适合用Grafana做可视化的场景)

  • 操作逻辑:通过Grafana面板的值映射功能,直接将原始网桥ID映射为可读服务名,无需修改Prometheus侧任何配置
  • 操作步骤:
    • 执行脚本批量导出网桥ID与服务名的对应关系:
      docker network ls --format "br-{{.ID}} {{.Name}}" | awk '{gsub(/_default$/, "", $2); print $1" "$2}'
      
    • 打开对应面板的编辑界面,进入「值映射」配置页,选择「值到文本」映射类型,将导出的映射关系批量录入
    • 保持图例配置为{{device}} received即可,Grafana渲染时会自动替换为映射后的服务名
  • 优化方案:可配置crontab定时任务,定期调用Grafana API自动更新值映射表,无需人工维护映射关系

2. PromQL 标签动态替换(适合映射关系较少、变动频率低的场景)

使用PromQL内置的label_replace函数,在查询时动态生成服务名标签,示例查询语句:

label_replace(
  irate(node_network_receive_bytes_total{job="job-name",device=~"br-.*",name="a-name"}[5m]),
  # 新标签名
  "service_name",
  # 替换后的服务名
  "a-service",
  # 匹配的原始标签
  "device",
  # 匹配的原始网桥ID正则
  "br-6c596943b7c8"
)

有多组映射时嵌套多层label_replace即可,完成后将图例配置修改为{{service_name}} received即可生效。

3. Prometheus Recording Rule 预生成指标(适合查询量较大的生产环境)

在Prometheus配置中添加预聚合规则,提前生成带服务名标签的专用指标,避免每次查询都执行标签替换逻辑,提升查询性能,示例配置:

groups:
- name: custom_network_metrics
  interval: 1m
  rules:
  - record: node_network_receive_bytes_service:irate_5m
    expr: |
      # 此处填写嵌套好所有label_replace逻辑的PromQL语句
      label_replace(irate(node_network_receive_bytes_total{job="job-name",device=~"br-.*",name="a-name"}[5m]),"service_name","a-service","device","br-6c596943b7c8")

后续查询直接使用node_network_receive_bytes_service:irate_5m指标,图例配置为{{service_name}} received即可。

4. Prometheus 采集阶段重写标签(适合全局统一修改标签的场景)

在Prometheus对应采集job的metric_relabel_configs配置段添加标签替换规则,采集指标时直接将device标签替换为服务名,无需修改查询与面板配置,效果和修改node_exporter输出一致。

内容的提问来源于stack exchange,提问作者Lars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:39:05