Prometheus JSON Exporter状态转指标配置问题及报错咨询
基于prometheus-json-exporter根据JSON状态生成Prometheus指标
用户希望通过prometheus-json-exporter实现:当服务返回的JSON中.e2eCheckResult.totalStatus为"ok"时,指标app_e2eCheckResult_totalStatus值为1;为"fail"时值为0。但当前配置出现报错,报错信息显示values is not found,相关信息如下:
原配置
modules: default: metrics: - name: app_e2eCheckResult_totalStatus path: '{ $.values[?(@.e2eCheckResult.totalStatus == "fail")] }' help: E2E total status from app labels: environment: prod component: app totalStatus: '{ $.e2eCheckResult.totalStatus }' values: totalStatus: 0 http_client_config: tls_config: insecure_skip_verify: true
服务返回JSON示例
{ "e2eCheckResult": { "totalStatus": "fail", "totalTime":145, "e2EComponents": [ {...} ] } }
报错日志
level=error msg="Failed to execute jsonpath" err="values is not found" path="{ $.values[?(@.e2eCheckResult.totalStatus == \"fail\")] }" data="{\"e2eCheckResult\":{\"totalStatus\":\"fail\",\"totalTime\":145,\"e2EComponents\":[{...}]}}"
问题分析与修复配置
原报错是因为JSONPath路径$.values[?(@.e2eCheckResult.totalStatus == "fail")]中的$.values在服务返回的JSON中不存在,服务返回的根节点直接是e2eCheckResult,没有values字段。
要实现需求,需使用json-exporter的条件值映射功能,通过values结合JSONPath的条件判断设置指标值,修改后的配置如下:
modules: default: metrics: - name: app_e2eCheckResult_totalStatus path: '$' # 指定根节点,确保能获取整个JSON内容 help: E2E total status from app (1=ok, 0=fail) labels: environment: prod component: app totalStatus: '{ $.e2eCheckResult.totalStatus }' values: # 根据totalStatus的值动态设置指标值 status_value: '{ if $.e2eCheckResult.totalStatus == "ok" then 1 else 0 end }' http_client_config: tls_config: insecure_skip_verify: true
配置说明
path: '$':定位到JSON根节点,避免因路径不存在导致的报错,确保能访问到e2eCheckResult字段。values.status_value:使用JSONPath的条件表达式if...then...else,实现状态到数值的映射:- 当
$.e2eCheckResult.totalStatus == "ok"时,指标值为1 - 其他情况(包括"fail")指标值为0
- 当
- 保留自定义标签
environment、component和totalStatus,便于在Prometheus中按维度过滤查询。
预期效果
- 当服务返回
totalStatus: "ok"时,指标为app_e2eCheckResult_totalStatus{environment="prod",component="app",totalStatus="ok"} 1 - 当服务返回
totalStatus: "fail"时,指标为app_e2eCheckResult_totalStatus{environment="prod",component="app",totalStatus="fail"} 0
内容的提问来源于stack exchange,提问作者RMNTRVN
相关产品推荐
相关产品推荐

