如何为Prometheus同一module的所有指标批量应用delta函数?
批量为Modbus导出器指标应用delta函数的解决方案
问题原因
delta函数要求输入单指标时间序列,直接用{module="ddcga"}会把多个指标的序列混在一起,触发“vector cannot contain metrics with the same labelset”错误。
方法1:PromQL层面批量处理(推荐)
用label_replace给每个指标添加临时标签,让delta能识别单独的时间序列,自动遍历所有匹配指标计算变化量:
delta( label_replace({module="ddcga"}, "__metric_name", "$1", "__name__", "(.*)") [1h] )
在Grafana图例设置里填{{__name__}},就能显示每个指标的名称。
方法2:Grafana变量+foreach模板
如果需要更灵活的可视化配置,可以用Grafana变量实现批量查询:
- 创建Prometheus类型变量(比如命名为
metric_names),查询语句设为label_values({module="ddcga"}, __name__),自动获取所有符合条件的指标名。 - 添加面板时用
foreach模板,查询语句写delta(${metric_names}{module="ddcga"}[1h]),图例设置为${metric_names},就能自动为每个指标生成对应的变化量图表。
内容的提问来源于stack exchange,提问作者Linus Dierheimer
相关产品推荐
相关产品推荐

