Prometheus python导出器用于json值
我有一个获取和格式化json响应的场景,然后我想使用Prometheus python客户端将从Prometheus python导出器用于json值,python,python-3.x,prometheus,prometheus-node-exporter,Python,Python 3.x,Prometheus,Prometheus Node Exporter,我有一个获取和格式化json响应的场景,然后我想使用Prometheus python客户端将从响应获得的数据转换为Prometheus相关的度量 以下是我尝试过的: import time from prometheus_client.core import GaugeMetricFamily, REGISTRY, CounterMetricFamily from prometheus_client import start_http_server import requests import
响应
获得的数据转换为Prometheus相关的度量
以下是我尝试过的:
import time
from prometheus_client.core import GaugeMetricFamily, REGISTRY, CounterMetricFamily
from prometheus_client import start_http_server
import requests
import json
class CustomCollector(object):
def __init__(self):
pass
def collect(self):
response = requests.get('https://api.test.com/v1/data', auth=
('abc@gg.com', 'xxrty'))
d1=(response.json())
for key in d1:
g = GaugeMetricFamily("devicevalue", 'Help text', labels=['datalnddev'])
g.add_metric([key['appname'], key['value'])
yield g
if __name__ == '__main__':
start_http_server(8003)
REGISTRY.register(CustomCollector())
while True:
time.sleep(1)
但这无助于解决这个问题,我不确定如何在这里进行任何帮助都将是巨大的。
普罗米修斯的预期输出。您的代码的想法很好,但是有一些小错误。 -在json数据中,有一个元素的键为
appnamet
(末尾有额外的t
)。
-在遍历数据时,您忘记按键“app_metric”获取列表
-您应该将标签值转换为字符串,如下例所示([str(key['appname'])]
)
导入时间
来自prometheus_client.core导入量表系列、注册表、计数器系列
从prometheus_客户端导入启动_http_服务器
导入请求
导入json
类CustomCollector(对象):
定义初始化(自):
通过
def收集(自身):
#response=requests.get('https://api.test.com/v1/data,auth=('abc@gg.com","xxrty")
d1={
“应用程序度量”:[
{
“appname”:18,
“值”:“0”
},
{
“appname”:12,
“值”:“0”
},
{
“appname”:123,
“值”:“0”
},
{
“appname”:134,
“值”:“0”
}
]
}
指标列表=d1[“应用指标”]
对于输入列表\u的\u度量:
g=GaugeMetricFamily(“devicevalue”,“帮助文本”,标签=['datalnddev']))
g、 添加度量([str(key['appname'])],key['value']))
产量g
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
启动http服务器(8003)
REGISTRY.register(CustomCollector())
尽管如此:
时间。睡眠(1)
通过这个例子,我得到了您想要的结果:
# HELP devicevalue Help text
# TYPE devicevalue gauge
devicevalue{datalnddev="18"} 0.0
# HELP devicevalue Help text
# TYPE devicevalue gauge
devicevalue{datalnddev="12"} 0.0
# HELP devicevalue Help text
# TYPE devicevalue gauge
devicevalue{datalnddev="123"} 0.0
# HELP devicevalue Help text
# TYPE devicevalue gauge
devicevalue{datalnddev="134"} 0.0
但是,这些结果将这些值两次转换为“
”帮助设备值帮助文本#类型设备值帮助文本{datalnddev=“18”}0.0#帮助设备值帮助文本#类型设备值量表设备值{datalnddev=“18”}0.0#帮助设备值帮助文本#类型设备值量表#帮助设备值帮助文本#类型设备值量表设备值{datalnddev=“12”}0.0#HELP devicevalue HELP text#键入devicevalue gauge devicevalue{datalnddev=“12”}0.0#HELP devicevalue HELP text#键入devicevalue gauge
不确定,您的意思是什么,可能您的API返回重复的值?在您提供的JSON示例中,我为每个“appname”获得一行。请运行代码,I provider,查看它是否在localhost:8003
上为您提供了所需的结果。如果是,请查找API响应中的问题