Das Push Gateway ermöglicht es, Metriken von kurzlebigen Jobs und Anwendungen zu sammeln, die ihre Metriken nicht direkt von Prometheus abrufen lassen können. Hier wird beschrieben, wie ein Push Gateway eingerichtet und konfiguriert wird, um Metriken effektiv zu erfassen und an Prometheus weiterzuleiten.
Laden Sie das Push Gateway von der offiziellen Prometheus-Downloadseite herunter: prometheus.io/download/#pushgateway
Entpacken Sie das Archiv und starten Sie das Push Gateway:
tar xvfz pushgateway-*.tar.gz
cd pushgateway-*
./pushgatewayDas Push Gateway ist auch als Docker-Image verfügbar. Sie können das Image von Docker Hub herunterladen und einen Container starten:
docker pull prom/pushgateway
docker run -d -p 9091:9091 --name pushgateway prom/pushgatewayErstellen Sie eine Kubernetes-Deployment-Datei für das Push
Gateway (pushgateway-deployment.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
name: pushgateway
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: pushgateway
template:
metadata:
labels:
app: pushgateway
spec:
containers:
- name: pushgateway
image: prom/pushgateway
ports:
- containerPort: 9091Erstellen Sie eine Service-Datei für das Push Gateway
(pushgateway-service.yaml):
apiVersion: v1
kind: Service
metadata:
name: pushgateway
namespace: monitoring
spec:
type: ClusterIP
ports:
- port: 9091
targetPort: 9091
selector:
app: pushgatewayAnwenden der YAML-Dateien:
kubectl apply -f pushgateway-deployment.yaml
kubectl apply -f pushgateway-service.yamlFügen Sie das Push Gateway als Ziel in der
prometheus.yml-Datei hinzu:
scrape_configs:
- job_name: 'pushgateway'
static_configs:
- targets: ['localhost:9091']Kurzlebige Jobs oder Anwendungen senden ihre Metriken an das Push Gateway mit einem HTTP-POST-Request:
echo "some_metric 42" | curl --data-binary @- http://localhost:9091/metrics/job/some_jobSie können Labels hinzufügen, um die Metriken weiter zu spezifizieren:
echo "some_metric 42" | curl --data-binary @- http://localhost:9091/metrics/job/some_job/instance/some_instanceStandardmäßig speichert das Push Gateway Metriken im Speicher. Um die Persistenz sicherzustellen, können Sie die Daten auf die Festplatte schreiben.
Starten Sie das Push Gateway mit dem Flag
--persistence.file:
./pushgateway --persistence.file=/path/to/persistencefileAchten Sie darauf, dass Metriken, die an das Push Gateway
gesendet werden, eine begrenzte Lebensdauer haben. Verwenden Sie das
Flag --expiration, um abgelaufene Metriken automatisch zu
löschen:
./pushgateway --persistence.file=/path/to/persistencefile --expiration=5mDurch die Implementierung eines Push Gateways können Sie sicherstellen, dass auch kurzlebige oder schwer erreichbare Jobs zuverlässig überwacht werden. Dies ergänzt die Pull-basierte Erfassung von Metriken in Prometheus und bietet eine flexible und skalierbare Lösung für unterschiedliche Überwachungsszenarien.
Die Wahl zwischen Push- und Pull-Modellen in Prometheus hängt stark von den spezifischen Anforderungen und der Architektur Ihrer Überwachungslösung ab. Hier sind einige Beispiele und Anwendungsfälle, die die Nutzung dieser Modelle illustrieren.
Beispiel: Ein Unternehmen betreibt mehrere Webserver, die kontinuierlich laufen und eine hohe Verfügbarkeit erfordern. Jeder Webserver stellt seine Metriken über einen HTTP-Endpunkt zur Verfügung.
Konfiguration:
scrape_configs:
- job_name: 'webservers'
static_configs:
- targets: ['webserver1:9090', 'webserver2:9090', 'webserver3:9090']Beispiel: Ein Kubernetes-Cluster, das verschiedene Microservices hostet, die dynamisch skaliert und bereitgestellt werden.
Konfiguration:
scrape_configs:
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__]
action: replace
target_label: __address__
regex: (.+):\d+
replacement: $1:8080Beispiel: Überwachung der Hardware-Ressourcen von physischen Servern mittels Node Exporter.
Konfiguration:
scrape_configs:
- job_name: 'node_exporters'
static_configs:
- targets: ['node1:9100', 'node2:9100', 'node3:9100']Beispiel: Ein Datenverarbeitungsjob, der einmal täglich läuft und die Ergebnisse in einer Datenbank speichert. Der Job läuft zu kurz, um von Prometheus gescraped zu werden.
Konfiguration:
echo "batch_job_duration_seconds 123" | curl --data-binary @- http://pushgateway:9091/metrics/job/batch_job/instance/job_instanceBeispiel: Ein sicherheitskritisches System, das keine eingehenden Verbindungen erlaubt, kann Metriken sicher an ein Push Gateway senden.
Konfiguration:
echo "secure_metric 42" | curl --data-binary @- https://pushgateway.example.com/metrics/job/secure_jobBeispiel: Verschiedene Anwendungen und Services, die unabhängig voneinander Metriken erzeugen und diese an ein zentrales Push Gateway senden.
Konfiguration:
echo "application_metric 5" | curl --data-binary @- http://pushgateway:9091/metrics/job/app1/instance/instance1
echo "application_metric 10" | curl --data-binary @- http://pushgateway:9091/metrics/job/app2/instance/instance2Beispiel: Eine Umgebung, in der sowohl langlaufende Dienste als auch kurzlebige Jobs überwacht werden. Prometheus verwendet das Pull-Modell für kontinuierlich laufende Dienste und das Push-Modell für kurzlebige Jobs.
Konfiguration:
scrape_configs:
- job_name: 'webservers'
static_configs:
- targets: ['webserver1:9090', 'webserver2:9090']
- job_name: 'node_exporters'
static_configs:
- targets: ['node1:9100', 'node2:9100']
- job_name: 'pushgateway'
static_configs:
- targets: ['pushgateway:9091']Beispiel: Ein verteiltes System, bei dem verschiedene geografisch verteilte Standorte ihre Metriken an ein zentrales Push Gateway senden, während lokale Prometheus-Instanzen die Infrastruktur vor Ort überwachen.
Konfiguration für das zentrale Push Gateway:
scrape_configs:
- job_name: 'global_pushgateway'
static_configs:
- targets: ['global-pushgateway:9091']Durch die Kombination und das richtige Verständnis der Push- und Pull-Modelle können Sie eine flexible und skalierbare Überwachungslösung implementieren, die den spezifischen Anforderungen Ihrer Umgebung gerecht wird.