Чтение Prometheus metri c с использованием python - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь прочитать метрики Прометея (значения процессора и памяти) POD в кубернетах. У меня установлен Prometheus, и все работает, используя локальный хост 'http://localhost: 9090 / . Я использовал следующий код, чтобы прочитать процессор и память модуля, но у меня есть ошибка results = response. json () ['data'] ['result'], объект JSON не может быть декодирован. Кто-нибудь может помочь, пожалуйста?

import datetime
import time
import requests  

PROMETHEUS = 'http://localhost:9090/'

end_of_month = datetime.datetime.today().replace(day=1).date()

last_day = end_of_month - datetime.timedelta(days=1)
duration = '[' + str(last_day.day) + 'd]'

response = requests.get(PROMETHEUS + '/metrics',
  params={
    'query': 'sum by (job)(increase(process_cpu_seconds_total' + duration + '))',
    'time': time.mktime(end_of_month.timetuple())})
results = response.json()['data']['result']

print('{:%B %Y}:'.format(last_day))
for result in results:
  print(' {metric}: {value[1]}'.format(**result))

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Выполнение запроса GET на <prom-server-ip>:9090/metrics возвращает метрики Prometheus (не в формате JSON) самого сервера Prometheus.

Поскольку вы пытаетесь выполнить запрос, вам необходимо использовать конечные точки HTTP API, такие как /api/v1/query или /api/v1/query_range вместо использования /metrics.

$ curl 'http://localhost:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z'
{
   "status" : "success",
   "data" : {
      "resultType" : "vector",
      "result" : [
         {
            "metric" : {
               "__name__" : "up",
               "job" : "prometheus",
               "instance" : "localhost:9090"
            },
            "value": [ 1435781451.781, "1" ]
         },
         {
            "metric" : {
               "__name__" : "up",
               "job" : "node",
               "instance" : "localhost:9100"
            },
            "value" : [ 1435781451.781, "0" ]
         }
      ]
   }
}

Для получения более подробной информации посетите Официальные документы Prometheus .

0 голосов
/ 06 февраля 2020

Код выглядит верно, однако запрос в вашей команде ответа неверен. истинный формат:

response =requests.get(PROMETHEUS + '/api/v1/query', params={'query': 'container_cpu_user_seconds_total'}) 

вы можете изменить «container_cpu_user_seconds_total» на любой запрос, который вы хотите прочитать. .. удачи

...