如何通过Prometheus接口获取OpenTelemetry自定义指标?
解决方案
搞懂Prometheus接口的本质
/metrics接口本来就只返回Prometheus自己的运行指标(比如prometheus_tsdb_head_samples_appended_total这类),根本不会返回你写入的自定义指标——这是设计逻辑,别再死磕这个接口了。/federate不是打开就能拿到所有数据,必须带匹配参数才能筛选出你要的指标。
正确用/federate拉取数据
访问/federate时必须携带match[]参数,比如拉取所有指标:
curl "http://localhost:9090/federate?match[]={job=~'.+'}"
或者只拉取特定指标:
curl "http://localhost:9090/federate?match[]=your_custom_metric"
match[]支持PromQL的匹配规则,比如按job标签过滤,或者直接指定指标名。之前空访问肯定拿不到数据。
换用Prometheus查询API获取数据
如果/federate不符合你的需求,直接用官方查询API更灵活:
查最新指标值
curl "http://localhost:9090/api/v1/query?query=your_custom_metric"
查时间范围内的时序数据
curl "http://localhost:9090/api/v1/query_range?query=your_custom_metric&start=1718000000&end=1718003600&step=15s"
把your_custom_metric换成你的实际指标名,时间戳改成你需要的范围。
确认Prometheus配置没问题
Docker部署的Prometheus默认允许查询远程写入的数据,检查prometheus.yml里的remote_write配置是否正确指向了/api/v1/write,如果之前能在UI看到数据,大概率配置没问题。要是实在不放心,确保没有额外的权限限制(默认没有)。
最后验证下数据状态
先在Prometheus UI的Graph页面用PromQL查你的自定义指标,确认能看到数据——只要UI能查到,就说明数据已经写入TSDB,只是接口用错了,按上面的方法调接口就行。
内容的提问来源于stack exchange,提问作者Matteo Di Lorenzi
相关产品推荐
相关产品推荐

