Das Erstellen eines Prometheus-Exporters kann kompliziert sein, muss es aber nicht sein. In diesem Artikel lernen Sie die Grundlagen von Prometheus kennen und stellen Ihnen zwei schrittweise Anleitungen vor, die Ihnen zeigen, wie Sie einen auf Python basierenden Exporter implementieren. Das erste Handbuch handelt von einem Exporteur eines Drittanbieters, der Metriken zu der Anwendung veröffentlicht, die Sie eigenständig überwachen möchten. Die zweite betrifft Exporteure, die eingebettete Anwendungsmetriken verfügbar machen.
Prometheus ist das primäre Überwachungstool für Zeitreihenmetriken, das seit seiner Einführung im Jahr 2012 seine eigenen Konzepte angewendet hat. Insbesondere umfasst der Datenerfassungs-Pull-Ansatz von Prometheus neben Exporteuren und flexiblen Visualisierungen Graphite und InfluxDB. Es fällt auch im Vergleich zu anderen gängigen Überwachungstools wie / products / influxdb-summary /) auf.
Der Datenerfassungs-Pull-Ansatz besteht aus der Serverkomponente (Prometheus-Server), die regelmäßig Metriken von der Client-Komponente abruft. Dieser Zug wird in der Prometheus-Welt allgemein als "Schrott" bezeichnet. Durch das Scraping ist die Client-Komponente nur dafür verantwortlich, sie für die Generierung und das Scraping von Metriken verfügbar zu machen.
Graphique, InfluxDB und viele andere Tools verwenden einen Push-Typ-Ansatz, bei dem die Client-Komponente eine Metrik generiert und an die Server-Komponente weiterleitet. Daher entscheidet der Client, wann die Daten übertragen werden sollen, unabhängig davon, ob der Server sie benötigt oder bereit ist, sie zu erfassen.
Der Pull-Ansatz von Prometheus ist innovativ. Indem wir das Scraping vom Server und nicht vom Client anfordern, erfassen wir Metriken nur, wenn der Server aktiv ist und die Daten bereit sind. Bei diesem Ansatz muss jede Clientkomponente eine bestimmte Funktion aktivieren, die als Prometheus-Exporter bezeichnet wird.
Der Exporteur ist ein wesentlicher Bestandteil der Prometheus-Überwachungsumgebung. Jedes Programm, das als Prometheus-Client fungiert, hat einen Exporteur im Zentrum. Der Exporter besteht aus Softwarefunktionen, die Metrikdaten generieren, und einem HTTP-Server, der die generierte Metrik verfügbar macht, die über einen bestimmten Endpunkt verfügbar ist. Metriken werden in einem bestimmten Format veröffentlicht, das der Prometheus-Server lesen und erfassen kann (Scrap). Später in diesem Artikel werden wir darüber sprechen, wie Metriken erstellt werden, welche Formate sie haben und wie sie für das Scraping verfügbar gemacht werden.
Sobald die Metriken vom Prometheus-Server abgerufen und gespeichert wurden, müssen Sie sie visualisieren. Es gibt jedoch viele Möglichkeiten, dies zu tun. Am einfachsten ist es, den Prometheus Expression Browser (https://prometheus.io/docs/visualization/browser/) zu verwenden. Da der Ausdrucksbrowser jedoch nur über grundlegende Visualisierungsfunktionen verfügt, wird er hauptsächlich zum Debuggen verwendet (Überprüfung der Verfügbarkeit oder des letzten Werts einer bestimmten Metrik). Für eine bessere und erweiterte Visualisierung wählen Benutzer häufig andere Tools wie Grafana [https://grafana.com/]. Darüber hinaus fragt der Benutzer in einigen Kontexten die Prometheus-API direkt ab, um die Metriken zu erhalten, die visualisiert werden müssen. Möglicherweise müssen Sie ein maßgeschneidertes Visualisierungssystem verwenden.
Die folgende Abbildung zeigt die grundlegende Architektur einer Prometheus-Umgebung mit einer Serverkomponente, zwei Clientkomponenten und einem externen Visualisierungssystem.
Aus Anwendungssicht gibt es zwei Situationen, in denen Sie den Prometheus-Exporter implementieren können: Exportieren integrierter Anwendungsmetriken und Exportieren von Metriken aus eigenständigen Tools oder Tools von Drittanbietern.
Dies ist normalerweise der Fall, wenn das System oder die Anwendung Schlüsselmetriken nativ verfügbar macht. Das interessanteste Beispiel ist, wenn die Anwendung von Grund auf neu erstellt wird. Dies liegt daran, dass alle Anforderungen, die für die Funktion als Prometheus-Client erforderlich sind, untersucht und durch Design integriert werden können. Möglicherweise müssen Sie den Exporter in Ihre vorhandene Anwendung integrieren. Dies erfordert die Aktualisierung des Codes (und sogar des Designs), um die Funktionen hinzuzufügen, die für die Funktion als Prometheus-Client erforderlich sind. Die Integration in eine vorhandene Anwendung kann riskant sein, da sie bei sorgfältiger Ausführung zu einer Regression der Kernfunktionalität der Anwendung führen kann. Wenn Sie dies tun müssen, führen Sie gründliche Tests durch, um Regressionen in Ihrer Anwendung zu vermeiden (z. B. Fehler oder Leistungsaufwand aufgrund von Code- oder Designänderungen).
Die erforderlichen Metriken können extern erfasst oder berechnet werden. Ein Beispiel hierfür ist, wenn eine Anwendung eine API oder ein Protokoll bereitstellt, von dem Metrikdaten abgerufen werden können. Sie können diese Daten unverändert verwenden, müssen jedoch möglicherweise mehr tun, um die Metrik zu generieren (dieser MySQL-Exporter ist ein Beispiel).
Wenn Sie während des gesamten Aggregationsprozesses Metriken mit einem dedizierten System berechnen müssen, benötigen Sie möglicherweise auch einen externen Exporteur. Stellen Sie sich als Beispiel einen Kubernetes-Cluster vor, der eine Metrik benötigt, die die CPU-Ressourcen anzeigt, die von einer Reihe von Pods verwendet werden, die nach Label gruppiert sind. Solche Exporteure können sich auf die Kubernetes-API verlassen und wie folgt arbeiten:
Rufen Sie die aktuelle CPU-Auslastung und die einzelnen Pod-Labels ab
Summieren Sie die Verwendung basierend auf dem Pod-Etikett
Stellen Sie die Ergebnisse zum Schaben zur Verfügung
Dieser Abschnitt enthält schrittweise Anweisungen zum Implementieren des Prometheus-Exporters mit Python. Hier sind zwei Beispiele, die die folgenden Metriktypen abdecken:
--Counter: Stellt eine Metrik dar, deren Wert sich nur mit der Zeit erhöhen kann. Dieser Wert wird beim Neustart auf Null zurückgesetzt. Solche Metriken können verwendet werden, um die Betriebszeit eines Systems (die seit dem letzten Neustart dieses Systems verstrichene Zeit) zu exportieren.
Betrachten Sie zwei Szenarien. Stellen Sie sich im ersten Szenario einen eigenständigen Exporter vor, der die CPU- und Speicherauslastung Ihres Systems offenlegt. Das zweite Szenario ist eine Flask-Webanwendung, die die Antwort auf Anforderungen und die Verfügbarkeit verfügbar macht.
Dieses Szenario zeigt einen dedizierten Python-Exporter, der regelmäßig die CPU- und Speichernutzung des Systems erfasst und veröffentlicht.
Für dieses Programm müssen Sie die Prometheus-Clientbibliothek für Python installieren.
$ pip install prometheus_client
Sie müssen auch die leistungsstarke Bibliothek psutil installieren, um den Systemressourcenverbrauch zu extrahieren.
$ pip install psutil
Der endgültige Exportercode sieht folgendermaßen aus (siehe Quellenübersicht):
Sie können den Code herunterladen und in einer Datei speichern.
$ curl -o prometheus_exporter_cpu_memory_usage.py \
-s -L https://git.io/Jesvq
Sie können den Exporter mit dem folgenden Befehl starten:
$ python ./prometheus_exporter_cpu_memory_usage.py
Lokaler Browser http://127.0.0.1:9999 Sie können die über veröffentlichten Metriken überprüfen. Unter den anderen integrierten Metriken, die von der Prometheus-Bibliothek aktiviert werden, müssen die folgenden Metriken vom Exporteur bereitgestellt werden (Werte können je nach Computerlast variieren):
Es ist einfach. Dies liegt an der Magie der Prometheus-Clientbibliothek, die offiziell in Golang, Java, Python und Ruby verfügbar ist. Sie verstecken die Kesselplatte und erleichtern die Umsetzung des Exporteurs. Die Grundlagen unseres Exporteurs können im folgenden Eintrag zusammengefasst werden.
Dieses Szenario zeigt einen Prometheus-Exporter für die Flask-Webanwendung. Im Gegensatz zu Standalone verfügt der Flask-Webanwendungsexporteur über eine WSGI-Versandanwendung, die als Gateway fungiert und Anforderungen an Flask- und Prometheus-Clients weiterleitet. Dies liegt daran, dass der von Flask aktivierte HTTP-Server nicht konsistent als Prometheus-Client verwendet werden kann. Außerdem verarbeitet der von der Prometheus-Clientbibliothek aktivierte HTTP-Server keine Flask-Anforderungen.
WSGI Um die Integration in Wrapper-Anwendungen zu ermöglichen, verfügt Prometheus über spezielle Bibliotheksmethoden zum Erstellen von WSGI-Anwendungen, die Metriken bereitstellen (https://wsgi.readthedocs.io/en/latest/). make_wsgi_app) wird bereitgestellt.
Das folgende Beispiel (Source Essentials)- Eine Flask-Hallo-Welt-Anwendung, die geringfügig geändert wurde, um Anforderungen mit einer zufälligen Antwortzeit zu verarbeiten- Zeigt einen Prometheus-Exporter, der mit Flask-Anwendungen funktioniert. (Siehe die Hallo-Methode in Zeile 18). Auf Flash-Anwendungen kann über den Stammkontext (/ endpoint) zugegriffen werden, der Prometheus-Exporter wird jedoch über den Endpunkt /metrics aktiviert (siehe Zeile 23, in der die WSGI-Versandanwendung erstellt wird). Für den Prometheus-Exporteur werden zwei Metriken veröffentlicht.
--Service Uptime: Dies ist der Zähler (Zeile 8), der die Zeit anzeigt, die seit dem letzten Start der Anwendung vergangen ist. Der Zähler wird jede Sekunde von einem dedizierten Thread aktualisiert (Zeile 33).
Installieren Sie zusätzliche Abhängigkeiten, damit das Programm funktioniert.
$ pip install uwsgi
Verwenden Sie dann WGSI, um das Programm zu starten.
$ curl -o prometheus_exporter_flask.py \
-s -L https://git.io/Jesvh
Starten Sie dann den Dienst als WSGI-Anwendung.
$ uwsgi --http 127.0.0.1:9999 \
--wsgi-file prometheus_exporter_flask.py \
--callable app_dispatch
--wsgi-file muss auf eine Python-Programmdatei verweisen, aber der Wert der Option -callable muss mit dem Namen der im Programm deklarierten WSGI-Anwendung übereinstimmen (Zeile 23).
Auch hier können Sie die über Ihren lokalen Browser veröffentlichten Metriken anzeigen: http://127.0.0.1:9999/metrics Unter den anderen integrierten Metriken, die von der Prometheus-Bibliothek veröffentlicht werden, müssen Sie die folgende vom Exporteur veröffentlichte Metrik finden (Werte können je nach Computerlast variieren):
Die verschiedenen Exporteure können jetzt vom Prometheus-Server abgekratzt werden. Erfahren Sie hier mehr darüber.
In diesem Artikel habe ich zuerst die Grundkonzepte des Prometheus-Exporters erklärt und dann zwei dokumentierte Implementierungsbeispiele mit Python erklärt. Diese Beispiele nutzen die Best Practices von Prometheus und können als Ausgangspunkt für den Aufbau eigener Exporteure verwendet werden, um die Anforderungen Ihrer speziellen Anwendung zu erfüllen. Wir haben nicht wirklich über die Integration in den Prometheus-Server oder über Visualisierungen gesprochen, die Tools wie Grafana verarbeiten können. Wenn Sie an diesen Themen interessiert sind, überprüfen Sie dies bitte hier (https://qiita.com/MetricFire/items/cc9fe9741288048f4588).
Wenn Sie Prometheus ausprobieren möchten, sich aber keine Gedanken über Setup- und Wartungsarbeiten machen oder Zeit verbringen möchten, MetricFire = Japan & utm_content = First% 20Contact% 20with% 20Prometheus% 20Exporters) Gehosteter Prometheus [Kostenlose Testversion](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=ciita= = Erste% 20Kontakt% 20mit% 20Prometheus% 20Exporteure) Bitte probieren Sie es aus. Buchen Sie eine Demo (https://calendly.com/metricfire-chatwithus/chat?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=First%20Contact%20with%20Prometheus%20Exporters), um sich direkt über die Prometheus-Überwachungslösung zu erkundigen. Du kannst auch.
Wir sehen uns in einem anderen Artikel!