Saltar al contenido

Cómo impulsar métricas con Python y Prometheus Pushgateway

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *