You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:36:28