普罗米修斯 json 指标

Posted

技术标签:

【中文标题】普罗米修斯 json 指标【英文标题】:Prometheus json metrics 【发布时间】:2020-01-10 15:59:15 【问题描述】:

我要监控的应用程序提供了一个用于运行状况检查的 api 端点,该端点以 json 中的指标进行响应。举个例子:

$ curl  https://example.com/api/stats
"status":"success","code":0,"data":"UserCount":140,"UserCountActive":23

我已经设置了 Prometheus blackbox_exporter 来监控此端点返回 200 Ok 但是我也希望获得这些指标。我了解仪器直接从应用程序导出这些数据。但是由于该应用程序已经在 json 对象中导出了我想要的内容,因此我宁愿不维护我自己的这个软件的分支以包含检测所需的 Prometheus 库。我应该如何使用 json 中的指标?

【问题讨论】:

【参考方案1】:

目前没有官方的导出器来抓取 JSON 端点。也许是因为它是easy to write one from scratch,并且任何通用解决方案都必须使用一些默认行为,例如从不考虑指标类型的数据路径构建指标名称;或任何相关标签来应用或解析日期等等。

您可以使用首选搜索引擎轻松找到可用的 JSON 导出器。他们可以很容易地替换 blackbox_exporter。考虑到提供的样本,它们应该很合适。

我想提一个解决方案是exporter_exporter,因为我发现它对于在等待临时导出器时快速实现导出器很有用。它可用于执行生成普罗米修斯指标的脚本。 在您的情况下,编写一个抓取 Json 端点并使用它在标准输出中编写相应的普罗米修斯格式的 python 脚本非常容易。

【讨论】:

【参考方案2】:

您可以使用 Prometheus JSON Exporter (https://github.com/prometheus-community/json_exporter) 调用您的服务并从 JSON 中提取值

将 Prometheus JSON Exporter 部署到 Prometheus 可以拉取它并且 Exporter 可以访问您的 URL 的位置

对于您的 JSON 示例,JSON Exporter 的 config.xml 将类似于

---
metrics:
  - name: user_count
    path: "$.data.UserCount"
    type: value
    help: UserCount value
  - name: user_count_active
    path: "$.data.UserCountActive"
    type: value
    help: UserCountActive value

并在 Prometheus (prometheus.yml) 中抓取配置:

    ## gather the metrics from third party json sources, via the json exporter
  - job_name: json_user_stat
    metrics_path: /probe
    static_configs:
      - targets:
          # URL of each API for json exporter
          - https://example.com/api/stats
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        # Location of the json exporter's real <hostname>:<port> from Prometheus
        replacement: json_exporter:7979

首先通过点击 URL 测试您的导出器(如果您想在浏览器之外使用,请对“目标”值进行编码,浏览器将自动编码)http://json_exporter:7979/probe?target=https://example。 com/api/stats 并检查输出

# HELP UserCount value
# TYPE logstash_audit_events_in untyped
user_count 140
# HELP lUserCountActive value
# TYPE logstash_audit_events_out untyped
user_count_active 23

如果你明白了 - 在 Prometheus 中配置 scape 并享受你的指标

【讨论】:

以上是关于普罗米修斯 json 指标的主要内容,如果未能解决你的问题,请参考以下文章

Apache Flink 在 UI 中显示自定义指标,但普罗米修斯指标报告器没有抓取它们

kubelet 指标未出现在普罗米修斯中

使用变量标签名称创建普罗米修斯指标

从文件中解析普罗米修斯指标并更新计数器

在普罗米修斯中显示任意@Timed 指标

自定义指标未在普罗米修斯中公开