Я хочу отправить метрику с несколькими метками в Prometheus с помощью Pushgateway. В документации есть пример curl, но мне нужно, чтобы он был отправлен через Python. Кроме того, я хотел бы встроить в метрику несколько ярлыков.
Как продвигать метрики с помощью Python и Prometheus Pushgateway
Ответы (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
приведенный выше код генерирует нетипизированную метрику. Чтобы сгенерировать типизированную метрику, вам необходимо добавить к полезной нагрузке # 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