Prometheus-Metriken mit Pushgateway pushen

Trotzdem hat nur das Pushgateway eine blaue Flamme im Favicon







Vorwort



In diesem Hinweis geht es im Allgemeinen um Pushgateway- Pushing . Ich werde Sie jedoch warnen und sofort zugeben, dass der Text ein Beispiel enthält - ein Anti-Muster für Pushgateway-Pushing, da die Verwendung von Pushgateway empfohlen wird, wenn der Dienst nicht ständig funktioniert (oder für einen Dienst / eine gestartete Aufgabe im Allgemeinen) es gibt keine Schnittstelle), was bedeutet, dass Prometheus besser dran ist, ständig an geschlossene Türen zu klopfen und keine unnötigen Arbeiten zu erledigen.







Einführung



So pushgateway ist ein Service , wo Sie Metriken fallen kann , wenn die Standard prometheus Pull - Modell nicht anwendbar ist (im Vorwort, ich allgemein beschrieben , wie eine solche Situation entstehen , und das Aussehen kann). Nachdem die Metriken in das Pushgateway eingegeben wurden, holt prometheus sie bereits von dort ab. Dies impliziert verschiedene Einschränkungen im Zusammenhang mit Pushing-Metriken, z. B. das Fehlen der Up-Metrik, da sie von prometheus selbst für die abgefragte Instanz generiert wird und in diesem Fall nur das Pushgateway ist.







ps Wenn wir jedoch über die Up-Metrik sprechen, wird sie nicht benötigt, wenn Sie Pushgateway auf praktische Weise verwenden.







Prometheus für die Pushgateway-Umfrage vorbereiten



Nehmen wir an, wir haben eine Komposition wie diese mit Prometheus und 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.









Ich habe mich entschlossen, eine Notiz zu schreiben, da ich in meiner Arbeit auf eine ähnliche gestoßen bin. Ich werde sofort sagen, dass die Methode aus dem Beispiel nicht in die Produktion gehen wird, wie die Verwendung von Pushgateway ohne Service Discovery, um sie zu testen.








All Articles