Как продвигать метрики с помощью Python и Prometheus Pushgateway

Я хочу отправить метрику с несколькими метками в Prometheus с помощью Pushgateway. В документации есть пример curl, но мне нужно, чтобы он был отправлен через Python. Кроме того, я хотел бы встроить в метрику несколько ярлыков.


person FuzzyAmi    schedule 06.12.2016    source источник


Ответы (3)


Вот что я в итоге сделал - потребовалось время, чтобы все исправить. Хотя в идеале я бы использовал клиент Python Prometheus, разработанный специально для этой цели, похоже, что в некоторых случаях он не поддерживает несколько меток, а документация практически отсутствует, поэтому я выбрал самодельное решение.

В приведенном ниже коде используется gevent и поддерживается несколько (разделенных запятыми) URL-адресов pushgateway (например, «pushgateway1.my.com:9092, pushgateway2.my.com:9092»).

import gevent
import requests

def _submit_wrapper(urls, job_name, metric_name, metric_value, dimensions):
    dim = ''
    headers = {'X-Requested-With': 'Python requests', 'Content-type': 'text/xml'}
    for key, value in dimensions.iteritems():
        dim += '/%s/%s' % (key, value)
    for url in urls:
        requests.post('http://%s/metrics/job/%s%s' % (url, job_name, dim),
                      data='%s %s\n' % (metric_name, metric_value), headers=headers)


def submit_metrics(job_name, metric_name, metric_value, dimensions={}):
    from ..app import config
    cfg = config.init()
    urls = cfg['PUSHGATEWAY_URLS'].split(',')
    gevent.spawn(_submit_wrapper, urls, job_name, metric_name, metric_value, dimensions)
person FuzzyAmi    schedule 06.12.2016
comment
приведенный выше код генерирует нетипизированную метрику. Чтобы сгенерировать типизированную метрику, вам необходимо добавить к полезной нагрузке # TYPE ‹имя метрики› counter \ n (для метрики счетчика). - person FuzzyAmi; 28.12.2016

Это задокументировано для клиента Python: https://github.com/prometheus/client_python#exporting-to-a-pushgateway

person brian-brazil    schedule 06.12.2016

Первый: установить клиент:

pip install prometheus_client

Два: вставьте в интерпретатор Python следующее:

from prometheus_client import CollectorRegistry, Gauge, push_to_gateway

registry = CollectorRegistry()
g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry)
g.set_to_current_time()
push_to_gateway('localhost:9091', job='batchA', registry=registry)
person samuel161    schedule 07.02.2020