如何在Prometheus查询中替换变量${mountpoint}的连字符为下划线?
可行方案
方案1:利用Grafana变量的内置替换语法(最直接)
如果你是在Grafana中使用这个变量,直接在变量引用时添加字符串替换规则,把所有连字符替换成下划线:
avg(increase(vault_route_create_${mountpoint/-/_/g}__count[5m]))
语法说明:${变量名/要替换的字符/替换后的字符/g} 里的g表示全局替换所有匹配的字符,确保变量里的所有连字符都被替换。
方案2:通过Prometheus Relabeling规则提前修正指标名
在Prometheus的抓取配置中添加relabel规则,将指标名里的连字符批量替换为下划线,从源头解决问题:
scrape_configs: - job_name: 'vault' # 其他抓取配置... relabel_configs: # 仅针对vault_route_create开头的指标替换连字符 - source_labels: [__name__] regex: 'vault_route_create_(.*)-(.*)__count' replacement: 'vault_route_create_${1}_${2}__count' target_label: __name__ # 如果需要全局替换所有指标名里的连字符,用下面的规则 # - source_labels: [__name__] # regex: '(.*)-(.*)' # replacement: '${1}_${2}' # target_label: __name__
方案3:用PromQL的指标名正则匹配(兜底方案)
如果上面两种方法都没法用,可以通过正则匹配包含连字符的指标名,再聚合计算:
avg( increase( {__name__=~"vault_route_create_${mountpoint//-/\\\\-}__count|vault_route_create_${mountpoint//-/}_.*__count"}[5m] ) )
说明:把变量里的-转义成\-匹配原始带连字符的指标,同时匹配替换成下划线后的指标,再取平均值。不过这种方法不如前两种简洁,仅作为兜底。
内容的提问来源于stack exchange,提问作者Ronaldo Lanhellas
相关产品推荐
相关产品推荐

