2016-12-06 5 views

ответ

0

Вот что я в итоге сделал - потребовалось время, чтобы поправиться. Хотя в идеале я бы использовал клиент 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) 
+0

код выше генерирует нетипизированную метрику. Чтобы создать типизированную метрику, вам необходимо добавить полезную нагрузку с помощью «# TYPE counter \ n» (для счетчика). – FuzzyAmi