如何在 Prometheus 中持续轮询 JSON 数据?
Posted
技术标签:
【中文标题】如何在 Prometheus 中持续轮询 JSON 数据?【英文标题】:How can I continuously poll JSON data in Prometheus? 【发布时间】:2021-08-20 09:08:48 【问题描述】:我是 prometheus 的新手,所以做了一些研究,发现它有助于监控应用程序有很多增加计数器来检查 api 调用的例子。我的用例有些不同,我有一个 Rest API,它连接到数据库执行查询并以 JSON 格式返回数据。例如:
"dskreads": 26815,
"bufreads": 14451041,
"dskwrites": 52471,
"bufwrites": 569468,
"isamtot": 18439806,
"isopens": 432586,
"isstarts": 408604,
"isreads": 6962799,
"iswrites": 80438,
"isrewrites": 54535,
"isdeletes": 54469,
"iscommits": 61673,
"isrollbacks": 0,
"latchwts": 190,
"buffwts": 192,
"lockreqs": 13921801,
"lockwts": 0,
"ckptwts": 7,
"deadlks": 0,
"lktouts": 0,
"numckpts": 106,
"plgpagewrites": 11106,
"plgwrites": 460,
"llgrecs": 552829,
"llgpagewrites": 49076,
"llgwrites": 43672,
"pagreads": 76446,
"pagwrites": 68495,
"flushes": 107,
"compress": 15039,
"fgwrites": 0,
"lruwrites": 0,
"chunkwrites": 8195,
"btraidx": 1627,
"dpra": 3933,
"rapgs_used": 4755,
"seqscans": 16008,
"totalsorts": 6691,
"memsorts": 4612,
"disksorts": 2079,
"maxsortspace": 224
现在我想将我的 API 注册到 Prometheus,以便它不断轮询上述数据并以图形格式显示。
【问题讨论】:
这是示例 JSON,我将对其进行编辑。问题是如何将 JSON 绑定到 Prometheus 的计数器指标。我已经看到了调用 api 时计数器递增的示例,但在这里我想将 json 与它绑定。 【参考方案1】:我认为您的意思是,您引用的 JSON 文档是 API 调用的结果,并且您希望 Prometheus 将其每个属性(例如 dskreads
)视为一个指标,所以你可以查询|绘制这些?
如果是这样,您将需要编写一个导出器:
GET
是你的 API
解析 JSON 响应
遍历属性
为每个生成 Prometheus 指标将结果呈现为 HTTP (/metrics
) 页面
从 Prometheus 服务器上抓取此页面
见Writing Exporters
需要注意的一点是,Prometheus 期望 Counters 始终递增(并且您可能无法设置初始值,例如对于可能称为 total_disk_reads
(源自 dskreads
)的 Counter,您可以无法将 Counter 的值初始化为 26815
。
因此,如果您认为需要减小测量值,则可能需要确保您希望使用计数器而不是仪表。见Metric Types
【讨论】:
是的,这正是我想要的。所以你的意思是说 JSON 的每个属性都将成为 Prometheus 中的一个指标?假设如果我想查看“dskreads”和“bufreads”的图表,那么我需要为每个创建两个度量标准?另外,如果您有一些与我的用例相匹配的已编写导出器的示例,请分享。 两个问题都是。 Prometheus Java 客户端包含示例:github.com/prometheus/client_java 与此同时,我运行了一个调度程序来查询数据并将其发布到“/actuator/prometheus”中。因此,在运行查询并获取 JSON 后,我正在执行如下操作 @Autowired private MeterRegistry MeterRegistry;在我的cron函数meterRegistry.gauge("requests_mem_test",json.getInt("dskreads"));我成功地看到了指标,但是一旦我的值发生变化,我就会得到 NAN以上是关于如何在 Prometheus 中持续轮询 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章