如何在Prometheus中实现对JSON格式接口数据的持续轮询采集
实现方案总览
Prometheus默认仅支持抓取application/openmetrics-text或text/plain格式的指标数据,你现有的返回JSON结构的接口无法直接被识别,你可以从以下两种方案中选适合自己的实现:
方案1:使用官方json_exporter(无代码改造成本,适合新手)
这是Prometheus官方维护的通用JSON转指标工具,不需要修改现有API的业务代码,仅通过配置就能完成转换。
- 第一步:下载对应系统的json_exporter二进制包,解压后即可直接使用
- 第二步:编写映射配置文件
config.yml,把JSON字段对应到Prometheus指标,参考配置如下:
metrics: - name: database_disk_reads_total path: "{.dskreads}" help: "数据库累计磁盘读取次数" type: counter - name: database_buffer_reads_total path: "{.bufreads}" help: "数据库累计缓冲区读取次数" type: counter # 剩余所有JSON字段都可以按照上面的格式依次添加,type根据字段属性选counter(持续递增的统计值)或gauge(可上下浮动的瞬时值)即可
- 第三步:启动json_exporter,执行命令
./json_exporter --config.file config.yml,服务默认监听7979端口 - 第四步:配置Prometheus采集任务,在
prometheus.yml的scrape_configs节点下新增如下配置:
scrape_configs: - job_name: 'database_metrics' scrape_interval: 15s # 可按需调整轮询间隔 metrics_path: /probe params: target: ['你的现有JSON接口的完整访问地址'] static_configs: - targets: ['json_exporter所在机器的IP:7979']
配置完成后可以先访问http://<json_exporter地址>:7979/probe?target=<你的API地址>验证返回指标是否正常,确认没问题后重启Prometheus即可开始采集数据。
方案2:修改现有API原生暴露Prometheus指标(性能最优)
如果你有权限修改现有API的代码,更推荐该方案,不需要额外部署中间组件,性能损耗更低。
- 给现有API引入对应编程语言的Prometheus官方SDK,比如Go用
prometheus/client_golang、Python用prometheus-client、Java用simpleclient - 把查询数据库得到的每个字段值,对应赋值给Prometheus的Counter或Gauge类型指标
- 新增一个
/metrics接口,按照Prometheus要求的格式返回所有指标 - 直接在Prometheus的抓取配置中添加对这个
/metrics接口的采集规则即可
可视化展示
数据正常采集到Prometheus之后,用Grafana对接Prometheus数据源,新建Dashboard,按需选择指标生成折线图、仪表盘、数值卡片等可视化面板即可,还支持自定义时间范围、阈值告警规则。
内容的提问来源于stack exchange,提问作者Shubham kapoor
相关产品推荐
相关产品推荐

