2016-12-06 5 views

答えて

0

私がやったことはここにあります。理想的には、私はこの目的のために特別に設計されたPrometheus pythonクライアントを使用していましたが、複数のラベルをサポートしていない場合があり、ドキュメントは事実上存在しないため、自家製のソリューションを使いました。

以下のコードはgeventを使用し、複数の(カンマ区切りの)pushgateway URL(「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

関連する問題