使用Prometheus与json-exporter监控REST API无法查看指标求助
排查Prometheus无法采集json-exporter指标的步骤
一、验证json-exporter自身能否正确解析目标API
- 进入json-exporter的Pod:
kubectl exec -it <json-exporter-pod-name> -n <你的命名空间> -- sh - 直接调用exporter的探针接口,测试指标生成:
curl "http://localhost:7979/probe?module=default&target=http://xxx.xxx.xxx.xxx:xxxx"- 如果返回内容里没有
used_storage_byte等自定义指标:- 先确认目标API的实际返回结构:在Pod内执行
curl http://xxx.xxx.xxx.xxx:xxxx,检查是否为{"used": xxx, "free": xxx, "total": xxx}格式 - 调整
configuration.config里的path配置,确保与JSON返回结构完全匹配
- 先确认目标API的实际返回结构:在Pod内执行
- 如果返回内容里没有
二、检查ServiceMonitor是否被Prometheus识别
- 查看ServiceMonitor的标签与配置:
kubectl get servicemonitor pi2 -n monitoring -o yaml- 确认
metadata.labels中的release: prometheus与Prometheus实例的serviceMonitorSelector匹配(kube-prometheus-stack默认会选择带该标签的ServiceMonitor)
- 确认
- 验证Prometheus是否加载了该抓取任务:
- 访问Prometheus UI的
/config页面,搜索是否存在对应pi2的job配置 - 或在Prometheus Pod内查看生成的配置文件:
cat /etc/prometheus/config_out/prometheus.env.yaml
- 访问Prometheus UI的
三、检查Prometheus的抓取状态
- 访问Prometheus UI的
/targets页面:- 如果目标状态为
DOWN:查看Error列的具体信息,常见原因包括:网络不通(json-exporter无法访问目标API)、目标API响应超时、模块配置错误 - 如果目标未出现在列表中:说明ServiceMonitor未被Prometheus识别,回到第二步重新检查标签与选择器
- 如果目标状态为
四、确认Prometheus是否存储了指标
- 在Prometheus UI的
/graph页面,直接搜索自定义指标名(如used_storage_byte):- 若能搜到结果:问题出在Grafana,需确认数据源配置正确、面板查询语句无拼写错误
- 若搜不到:说明采集流程存在问题,回到前面步骤排查
五、额外排查点
- 查看json-exporter的Pod日志,获取错误信息:
kubectl logs <json-exporter-pod-name> -n <你的命名空间> - 确认集群网络策略:确保
monitoring命名空间的Prometheus能访问json-exporter的Service,同时json-exporter能访问目标API的IP/端口 - 检查版本兼容性:kube-prometheus-stack v0.58.0与json-exporter v0.5.0无明显兼容性问题,但需确认CRD资源正常
你的配置优化建议
当前json-exporter配置中,metrics下的values字段属于冗余配置(path已直接提取指标值,values用于添加额外标签),可简化为:
configuration: config: | --- modules: default: metrics: - name: used_storage_byte path: '{ .used }' help: used storage byte labels: {} - name: free_storage_byte path: '{ .free }' help: free storage byte labels: {} - name: total_storage_byte path: '{ .total }' help: total storage byte labels: {}
内容的提问来源于stack exchange,提问作者YoungWoo
相关产品推荐
相关产品推荐

