Идея вашего кода прекрасна, однако есть небольшие ошибки. - в ваших json данных есть один элемент с ключом appnamet
(с дополнительным t
в конце). - когда вы перебираете свои данные, вы забыли получить список по ключу "app_metri c" - вы должны преобразовать значения меток в строку, как в примере ниже ([str(key['appname'])]
)
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 = {
"app_metric": [
{
"appname": 18,
"value": "0"
},
{
"appname": 12,
"value": "0"
},
{
"appname": 123,
"value": "0"
},
{
"appname": 134,
"value": "0"
}
]
}
list_of_metrics = d1["app_metric"]
for key in list_of_metrics:
g = GaugeMetricFamily("devicevalue", 'Help text', labels=['datalnddev'])
g.add_metric([str(key['appname'])], key['value'])
yield g
if __name__ == '__main__':
start_http_server(8003)
REGISTRY.register(CustomCollector())
while True:
time.sleep(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