如何在 Prometheus 中持续轮询 JSON 数据?

Shu*_*oor 6 java rest grafana prometheus prometheus-alertmanager

我是 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
}
Run Code Online (Sandbox Code Playgroud)

现在我想将我的 API 注册到 Prometheus,以便它不断轮询上述数据并以图形格式显示。

Daz*_*kin 1

我认为你的意思是,你引用的 JSON 文档是 API 调用的结果,并且你希望它的每个属性(例如dskreads)被 Prometheus 视为一个指标,以便你可以查询|图表这些?

如果是这样,您将需要编写一个导出器:

  1. GET是你的API

  2. 解析 JSON 响应

  3. 迭代属性

    • 为每个生成 Prometheus 指标
  4. 将结果呈现为 HTTP ( /metrics) 页面

  5. 从 Prometheus 服务器上抓取此页面

请参阅编写导出器

需要注意的一件事是,Prometheus 期望 Counter 始终递增(并且您可能无法设置初始值,例如,对于名为 也许total_disk_reads(派生自dskreads)的 Counter,您可能无法将 Counter 的值初始化为26815

出于这个原因,如果您认为需要减少测量值,您可能需要确保您希望使用计数器而不是仪表。查看指标类型