Как интегрировать JSON API в Prometheus?
Имеется API к сервису, посылаются GET запросы, и необходимо вытащить из JSON ответа необходимую информацию в Prometheus, а далее в Grafana.
{'status': True, 'signings': '105', 'company': {'name': 'ООО "Company"', 'inn': '0000000000', 'kpp': None}}
Необходимо вытащить из Json signings вывести в Grafana, чтобы данные хранились в течение 7 дней.
Ответы (2 шт):
Постараюсь решить вашу задачу. Возьмем библиотеку requests для отправки GET запроса к API и получения ответа в формате JSON.
import requests
response = requests.get(API_URL)
data = response.json()
Применим метод json() для преобразования ответа в формате JSON в словарь Python.
signings = data['signings']
Применим библиотеку prometheus_client для создания метрики gauge и установки значения signings.
from prometheus_client import Gauge
signings_metric = Gauge('signings', 'Number of signins')
signings_metric.set(signings)
В конце нужно запустить сервер Prometheus, чтобы собирать метрики, и настроить интеграцию с Grafana для отображения данных в виде графиков. Обязательно настройте время хранения данных 7 дней.
from prometheus_client import start_http_server, Gauge
import time
import requests
import warnings
warnings.filterwarnings("ignore")
orgs = {
'company1': 'api1',
'company2': 'api2',
'company3': 'api3',
'company4': 'api4'
}
stats_podpislon = Gauge('podpislon', 'Podpislon statistics', ['org', 'type'])
def get_stats():
for org in orgs.values():
url = 'https://podpislon.ru/integration/get-info'
headers = {
'Accept': '*/*',
'x-api-key': org
}
req = requests.get(url, headers=headers, verify=False)
data = req.json()
name = data['company']['name']
stats_podpislon.labels(name, 'signings').set(data['signings'])
if org == 'api4':
time.sleep(10)
if __name__ == '__main__':
# Start up the server to expose the metrics.
start_http_server(8000)
# Generate some requests.
while True:
get_stats()
time.sleep(1)