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 .
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.