如何借助kube-prom-stack监控外部JSON接口并配置告警?
方案一:用Blackbox Exporter提取JSON字段
Blackbox Exporter完全支持从JSON响应中提取字段,只需在配置中启用json探针模块即可,步骤如下:
配置Blackbox Exporter模块
在Blackbox的配置文件(或Helm values)中定义一个专门的HTTP探针模块,指定提取foo字段:modules: api_json_check: prober: http http: method: GET valid_status_codes: [200] json: # 提取响应中foo字段的值,生成指标blackbox_http_json_foo extract_fields: - json_path: "$.foo" metric_name: blackbox_http_json_foo配置Prometheus抓取任务
在kube-prom-stack的Prometheus额外配置中添加对这个Blackbox实例的抓取:additionalScrapeConfigs: - job_name: 'blackbox_api_json' metrics_path: /probe params: module: [api_json_check] static_configs: - targets: - "http://your-external-api-endpoint.com/xxx" relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: "blackbox-exporter:9115" # 替换成你的Blackbox服务地址编写Prometheus告警规则
基于提取的指标编写告警规则,当foo=1时触发:groups: - name: api_foo_alerts rules: - alert: ApiFooStatusCritical expr: blackbox_http_json_foo == 1 for: 1m labels: severity: critical annotations: summary: "API端点foo值为1,触发告警" description: "API {{ $labels.instance }} 的foo字段值为 {{ $value }}"
方案二:用Json Exporter(更轻量化)
如果你的需求只是提取JSON响应中的字段,Json Exporter是更针对性的工具,配置更简洁:
安装Json Exporter
用Helm安装社区维护的Json Exporter chart:helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install json-exporter prometheus-community/json-exporter --namespace monitoring配置Json Exporter的指标映射
创建配置文件,指定要提取的foo字段:metrics: - name: api_foo_value type: gauge help: "Value of foo field from API response" path: "{.foo}"通过Helm values挂载这个配置文件到Exporter容器中。
配置Prometheus抓取任务
添加抓取Json Exporter的任务,指定要监控的API端点:additionalScrapeConfigs: - job_name: 'api_json_scrape' metrics_path: /probe params: target: ["http://your-external-api-endpoint.com/xxx"] static_configs: - targets: - "json-exporter:7979" # Json Exporter服务地址编写告警规则
同样基于生成的api_foo_value指标编写告警:groups: - name: api_foo_alerts rules: - alert: ApiFooStatusCritical expr: api_foo_value == 1 for: 1m labels: severity: critical annotations: summary: "API端点foo值为1,触发告警" description: "API {{ $labels.target }} 的foo字段值为 {{ $value }}"
总结
- 如果已经在用Blackbox Exporter做其他探针(比如端口连通性、HTTP状态),直接扩展配置即可,无需额外部署工具;
- 如果只需要提取JSON字段,Json Exporter的配置更简单,资源占用更低。
内容的提问来源于stack exchange,提问作者Jenney
相关产品推荐
相关产品推荐

