如何通过单条Curl请求调用Prometheus HTTP API批量查询指标?
如何通过单条Curl请求批量查询Prometheus指标的标签?
可以实现,但原生的/api/v1/labels接口不支持直接传入指标名称列表来关联查询标签。推荐使用/api/v1/series接口结合数据处理工具来达成需求,具体步骤如下:
1. 使用/api/v1/series接口批量匹配指标
该接口支持通过多个match[]参数传入指标名称,返回匹配到的所有时间序列的标签集合。示例Curl命令:
curl 'localhost:9090/api/v1/series?' \ --data-urlencode 'match[]=metric1' \ --data-urlencode 'match[]=metric2'
接口返回的原始结构大致如下:
{ "status": "success", "data": [ {"__name__": "metric1", "label1": "val1", "label2": "val2"}, {"__name__": "metric1", "label1": "val3", "label2": "val4"}, {"__name__": "metric2", "label3": "val5"} ] }
2. 用jq处理结果为期望格式
通过jq工具对返回数据进行分组、去重,提取每个指标的唯一标签名,直接得到你想要的格式:
curl 'localhost:9090/api/v1/series?' \ --data-urlencode 'match[]=metric1' \ --data-urlencode 'match[]=metric2' | \ jq '[.data[] | {metric_name: .__name__, labels: keys - ["__name__"]} | unique_by(.metric_name)]'
最终输出示例:
[ { "metric_name": "metric1", "labels": ["label1", "label2"] }, { "metric_name": "metric2", "labels": ["label3"] } ]
补充说明
- 原生
/api/v1/labels接口用于查询全局标签名或特定标签的值,无法直接关联指定指标列表,因此不适用该场景。 - 若不想用
jq,也可以在业务代码中对/api/v1/series的返回结果进行类似的聚合处理。
内容的提问来源于stack exchange,提问作者Ronit Tsysar
相关产品推荐
相关产品推荐

