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

如何关联Prometheus与PostgreSQL查询,替换指标中的object_id为名称?

解决Prometheus饼图显示对象名称而非ID的问题

以下是几种实用解决方案,按场景适配性排序:

方法1:Grafana值映射+PostgreSQL查询变量(推荐)

结合你用到$__rate_interval的场景,推测是在Grafana中可视化,这个方法能动态关联数据库的名称映射:

  • 在Grafana中添加PostgreSQL数据源,连接到你的配置表。
  • 创建查询变量:数据源选刚创建的PostgreSQL,SQL语句填 SELECT id::text AS value, name AS text FROM 你的配置表名称,变量类型选“键值对”(确保value对应ID,text对应名称)。
  • 进入面板设置的「图例」选项,开启「值映射」,选择「映射来自变量」,选中刚才创建的变量。此时饼图图例中的object_id值会自动替换为对应的名称。

方法2:Grafana Transform关联双查询

如果需要实时动态关联数据库数据,可通过Transform功能合并两个查询结果:

  • 在面板中新增一个查询,数据源选PostgreSQL,SQL语句为 SELECT id::text AS object_id, name FROM 你的配置表名称。
  • 切换到「Transform」标签页,添加「Join」变换:选择Prometheus查询作为主数据集,PostgreSQL查询作为连接数据集,关联字段选object_id。
  • 再添加「组织字段」变换,移除object_id字段,只保留name和对应的数值字段,饼图就会用名称作为图例。

方法3:Prometheus静态注入名称标签(适合静态场景)

如果对象ID和名称的映射很少变动,可以在Prometheus抓取阶段直接注入object_name标签:

  • 在Prometheus的scrape_configs中为对应job添加relabel规则,示例:
scrape_configs:
  - job_name: 'your_metric_job'
    # 原有抓取配置...
    relabel_configs:
      - source_labels: [object_id]
        target_label: object_name
        # 静态映射示例,多个ID用|分隔
        regex: '1|2|3'
        replacement: '对象A|对象B|对象C'

之后你的Prometheus查询可以直接按object_name分组:

sum by(object_name) (increase(my_metric[$__rate_interval])) != 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:22:47