Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prometheus python导出器用于json值_Python_Python 3.x_Prometheus_Prometheus Node Exporter - Fatal编程技术网

Prometheus python导出器用于json值

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

我有一个获取和格式化json响应的场景,然后我想使用Prometheus python客户端将从
响应
获得的数据转换为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响应中的问题