Prometheus是否支持标签值拆分截取?如何提取label的指定部分?
Prometheus标签值拆分提取方法
Prometheus完全支持标签值的拆分、字符串截取、正则提取操作,可根据使用场景选择以下两种方案实现从job_name/pod_name中提取前缀的需求:
方案1:PromQL查询时动态提取(临时使用)
适合偶尔需要用前缀做查询/聚合的场景,直接使用label_replace函数在查询时动态生成新标签,示例如下:
# 仅从job_name提取前缀 label_replace(rows_inserted_total, "idc_prefix", "$1", "job_name", "([^-]+)-.*") # 同时兼容只有pod_name的指标 label_replace( label_replace(rows_inserted_total, "idc_prefix", "$1", "job_name", "([^-]+)-.*"), "idc_prefix", "$1", "pod_name", "([^-]+)-.*" )
上述语句会在查询结果中新增idc_prefix标签,值就是你需要的maejcc100、vacocc100这类前缀,可直接用该标签做过滤、聚合操作。
方案2:采集阶段预生成标签(全局永久生效)
如果前缀需要频繁使用,建议在指标入库前通过metric_relabel_configs预生成新标签,查询时可直接调用,性能更高,配置示例如下:
# 在对应采集job的配置中添加以下规则 metric_relabel_configs: # 从job_name提取前缀 - source_labels: [job_name] regex: '([^-]+)-.*' target_label: idc_prefix replacement: '$1' action: replace # 兼容只有pod_name的指标,仅当idc_prefix为空时执行 - source_labels: [pod_name] regex: '([^-]+)-.*' target_label: idc_prefix replacement: '$1' action: replace if: 'idc_prefix == ""'
扩展说明
如果需要做固定长度截取、其他规则的字符串提取,只需修改正则规则即可:
- 提取前8位字符:正则改为
^(.{8}).* - 提取第二个
-之前的内容:正则改为^([^-]+-[^-]+)-.*
Prometheus使用RE2标准正则,常用的字符串匹配、捕获逻辑均支持。
内容的提问来源于stack exchange,提问作者Arnav Bose
相关产品推荐
相关产品推荐

