Solución:
Esto es lo que terminé haciendo: me tomó un tiempo hacerlo bien. Si bien lo ideal sería que hubiera usado el cliente Python de Prometheus diseñado específicamente para este propósito, parece que no admite múltiples etiquetas en algunos casos y la documentación es prácticamente inexistente, por lo que opté por una solución casera.
El siguiente código usa gevent y admite varias URL pushgateway (delimitadas por comas) (como “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 %sn" % (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)
Esto está documentado para el cliente Python: https://github.com/prometheus/client_python#exporting-to-a-pushgateway
Uno: Instale el cliente:
pip install prometheus_client
Dos: pegue lo siguiente en un intérprete de 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)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)