Préface
Cette note est généralement de pushgateway pousser , mais je vous préviens et admettre tout de suite que le texte contient un exemple - un anti-modèle de pushgateway pousser, car l'utilisation de pushgateway est recommandé dans le cas où le service ne fonctionne pas en permanence (ou pour un service / tâche a commencé en général il n'y a pas d'interface), ce qui signifie qu'il vaut mieux que prométhée ne frappe pas constamment à huis clos et ne fasse pas de travail inutile.
introduction
Ainsi, pushgateway est un service où vous pouvez supprimer des métriques lorsque le modèle de tirage prometheus standard n'est pas applicable (dans la préface, j'ai généralement décrit comment une telle situation peut survenir et se présenter). Une fois que les métriques sont entrées dans la pushgateway, prometheus les récupère déjà à partir de là, ce qui implique plusieurs restrictions liées à la poussée des métriques, par exemple, l'absence de la métrique up, puisqu'elle est générée par prometheus lui-même pour l'instance interrogée, et dans ce cas, il ne s'agit que de la pushgateway.
ps Bien que, si nous parlons de la métrique up, cela n'est pas nécessaire si vous utilisez pushgateway de manière optimale.
Préparation de Prometheus pour l'enquête pushgateway
Disons que nous avons une composition comme celle-ci avec prometheus et pushgateway:
# ....( - ..) prometheus: restart: always image: bitnami/prometheus:latest links: - pushgateway volumes: - ./.prom.yml:/opt/bitnami/prometheus/conf/prometheus.yml pushgateway: restart: always image: bitnami/pushgateway:latest ports: - 9091:9091
prom.yml - , pushgateway:
global: null scrape_interval: 5s scrape_timeout: 2s evaluation_interval: 15s scrape_configs: - job_name: pushgateway honor_labels: true static_configs: - targets: - 'pushgateway:9091'
, honor_lables, , , , "X" pushgateway, "X", honor_lables=false "X" pushgateway "exported_X" , pushgateway, true ( , ).
p.s. pushgateway — - , , basic_auth.
, , , , , - , service_discovery ( , , ).
, , Faust ( swarm, ), consul prometheus, docker compose scale.
, , , , :
ports: - "9100-9200:6066"
prometheus .
async def push_metrics():
def auth_handler(url, method, timeout, headers, data):
return basic_auth_handler(url, method, timeout, headers, data, PUSHGATEWAY_USERNAME, PUSHGATEWAY_PASSWORD)
push_to_gateway(PUSHGATEWAY_URI, job=f"{WORKERS_APP_NAME}-{ENV}", registry=registry_metrics, handler=auth_handler)
@app.timer(interval=PUSH_METRICS_INTERVAL)
async def push_metrics_cron():
await push_metrics()
— job name ( — prometheus'), handler registry . , pushgateway - , , prometheus.
J'ai décidé d'écrire une note, car j'en ai rencontré une similaire dans mon travail, je dirai immédiatement que la méthode de l'exemple ne sera pas mise en production, cependant, car utiliser pushgateway en l'absence de découverte de service, pour le tester peut se détacher.