Pousser les métriques Prometheus avec pushgateway

Tout de même, seul le pushgateway a une flamme bleue dans le favicon







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 .







. . , — , push_to_gateway .







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.








All Articles