Einführung in 4 Möglichkeiten zur Überwachung von Python-Anwendungen mit Prometheus

image.png

Einführung

Obwohl Prometheus ursprünglich für Single-Thread-Anwendungen mit einem Prozess und nicht für Multiprozess-Anwendungen entwickelt wurde, ist es jetzt für die Überwachung von [Python-Anwendungen] beliebt (https://www.courseduck.com/programming/python/). Wird ein Werkzeug für.

Prometheus wurde in der Soundcloud-Umgebung entwickelt und von Googles Borgmon inspiriert. In der ursprünglichen Umgebung basiert Borgmon auf der einfachen Methode von Service Discovery. Sie können leicht alle Jobs finden, die in Ihrem Cluster ausgeführt werden.

Prometheus erbt diese Annahmen unter der Annahme, dass ein Ziel ein einzelner Multithread-Prozess ist. Die Prometheus-Clientbibliothek basiert auf der Annahme, dass die Metriken aus verschiedenen Bibliotheken und Subsystemen mehrerer Ausführungsthreads stammen, die in einem gemeinsam genutzten Adressraum ausgeführt werden.

Um zu beginnen, gehen Sie zu MetricFire [Kostenlose Testversion] Bitte melden Sie sich unter https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=How%20to%20monitor%20Python%20Applications%20 an. In dieser Testversion können Sie Prometheus sofort auf Ihrer Plattform verwenden und das, was Sie aus diesem Artikel gelernt haben, in die Praxis umsetzen.

Probleme bei der Integration von Prometheus in Python WSGI-Anwendungen

Wenn ich eine Python-App auf dem WSGI-Anwendungsserver ausführe, treten Probleme auf. In WSGI-Anwendungen werden Anforderungen vielen verschiedenen Mitarbeitern und nicht einem einzelnen Prozess zugewiesen. Jeder dieser Mitarbeiter wird zu einer Multiprozessanwendung, indem er mithilfe mehrerer Prozesse bereitgestellt wird.

Wenn diese Art von Anwendung nach Prometheus exportiert wird, erhält Prometheus mehrere verschiedene Mitarbeiter, die auf Kratzanfragen reagieren. Jeder Arbeiter antwortet mit bekannten Werten, so dass Prometheus die Gegenmetrik abkratzen und als 100 zurückgeben kann, unmittelbar nachdem sie als 200 zurückgegeben wurde. Jeder Mitarbeiter exportiert seine eigenen Werte, sodass die Gegenmetrik eher zufällige Informationen als den gesamten Job misst.

Es gibt vier Lösungen, um diese Probleme zu lösen:

1. Summieren Sie alle Worker-Knoten

Mit eindeutigen Beschriftungen für jede Metrik können Sie alle gleichzeitig abfragen und den gesamten Job effizient abfragen. Wenn Sie beispielsweise jeden Worker als Worker_Name kennzeichnen, können Sie eine Abfrage wie folgt schreiben:

sum by (instance, http_status) (sum without (worker_name) (rate(request_count[5m])))

Dadurch werden alle Arbeitsknoten für einen Job gleichzeitig zusammengefasst. Das Problem dabei ist jedoch, dass die Anzahl Ihrer Metriken in die Höhe schnellen wird.

2. Multiprozessmodus

Diese Methode wird von uns bei MetricFire empfohlen. Diese Methode verwendet den Prometheus Python-Client (https://github.com/prometheus/client_python), der Multiprozess-Apps auf dem Gunicorn-Anwendungsserver verarbeitet und Ihre eigene Anwendung mit Prometheus überwacht.

Weitere Informationen zur Verwendung eines Python-Clients mit MetricFire zur Überwachung Ihrer eigenen Dienste finden Sie im Artikel Überwachen von Python-Webanwendungen mit Prometheus (https://qiita.com/MetricFire/items/57b95f6de1f608ef7c44). schauen Sie bitte. Dieser Artikel beschreibt jeden Schritt der Verwendung von Prometheus zur Überwachung einer Python-Webanwendung.

3. Django Prometheus Client

Diese Methode gibt jeden Mitarbeiter als vollständig separates Ziel an. Der Django Prometheus-Client konfiguriert jeden Mitarbeiter so, dass er über seinen eigenen Port auf Prometheus-Scrape-Anforderungen wartet.

4. StatsD Exporteur

Diese Methode lehnt die Vorstellung ab, dass Prometheus die Anwendung direkt reiben muss. Konfigurieren Sie Prometheus stattdessen so, dass Metriken aus Ihrer App in eine lokal ausgeführte StatsD-Instanz exportiert werden und eine StatsD-Instanz in Ihrem Namen abgerufen wird. Dies gibt Ihnen mehr Kontrolle darüber, was jeder Zähler zählt.

Zusammenfassung

Prometheus kann Multiprozessanwendungen nicht nativ überwachen, aber diese vier Lösungen sind gute Problemumgehungen. Dadurch kann Prometheus das primäre Überwachungstool für das gesamte Unternehmen sowohl für IT-Ressourcen als auch für APM sein.

Weitere Informationen zur Verwendung von Prometheus zur Überwachung von Python-Apps finden Sie im Artikel über Python-basierte Exporteure (https://www.metricfire.com/blog/first-contact-with-prometheus) und Kubernetes. Weitere Informationen finden Sie in der Reihe zum Entwickeln und Bereitstellen von Python-APIs mithilfe von (https://www.metricfire.com/blog/develop-and-deploy-a-python-api-with-kubernetes-and-docker).

Um Prometheus auszuprobieren und das, was Sie aus diesem Artikel gelernt haben, in die Praxis umzusetzen, [MetricFire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=How%20to%20monitor%20Python% 20Anwendungen% 20mit% 20Prometheus) Kostenlose Testversion Überprüfen Sie% 20 Prometheus). Sie können Prometheus direkt auf unserer Plattform verwenden, um die Überwachung von Metriken ohne Einrichtung zu starten. Bitte kontaktieren Sie uns auch direkt über Buchung einer Demo .. Wir freuen uns immer, von Ihnen über die Überwachungsanforderungen Ihres Unternehmens zu hören.

Wir sehen uns in einem anderen Artikel!

Recommended Posts

Einführung in 4 Möglichkeiten zur Überwachung von Python-Anwendungen mit Prometheus
Einführung von Python 2.7 in CentOS 6.6
Mit Python auf Twitter posten
Starten Sie mit Python zu Selen
So installieren Sie Python mit Anaconda
Überwachen Sie Python-Webanwendungen mit Prometheus
6 Möglichkeiten zum Stringen von Objekten in Python
5 Möglichkeiten zum Erstellen eines Python-Chatbots
Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
Von Python bis zur Verwendung von MeCab (und CaboCha)
Einführung in die diskrete Ereignissimulation mit Python # 1
Melden Sie sich mit Anforderungen in Python bei Slack an
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
Speichern Sie BigQuery-Tabellen mithilfe von Python in GCS
Python-Anfänger veröffentlichen Web-Apps mit maschinellem Lernen [Teil 2] Einführung in explosives Python !!
Einführung in die diskrete Ereignissimulation mit Python # 2
[Python] Listenverständnis Verschiedene Möglichkeiten zum Erstellen einer Liste
3 Möglichkeiten, Zeitzeichenfolgen mit Python zu analysieren [Hinweis]
#Monte Carlo-Methode zum Ermitteln des Umfangsverhältnisses mit Python
Vorgehensweise zur Verwendung der WEG-API von TeamGant (mit Python)
Ich möchte mit Python eine E-Mail von Google Mail senden.
[Verbesserte Version] Skript zur Überwachung der CPU mit Python
Konvertieren Sie STL mit Python VTK in ein Voxel-Netz
Auf Python 2.7.9 aktualisiert
Starten Sie Python
Scraping mit Python
"Backport" zu Python 2
So richten Sie eine Python-Umgebung mit pyenv ein
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
So senden Sie Microsoft Forms automatisch mit Python (Mac-Version)
PUSH-Benachrichtigung von Python an Android mithilfe der Google-API
Fehler aufgrund eines Konflikts zwischen Pythons bei der Verwendung von Gurobi
Einfache Möglichkeit, mit Google Colab mit Python zu kratzen
MessagePack-Aufruf von Ruby to Python-Methoden (oder Python to Ruby-Methoden) mithilfe von RPC
So erstellen Sie ein Python-Paket mit VS Code
Schreiben Sie Daten mit dem Python-Anforderungsmodul in KINTONE
Beenden bei Verwendung von Python in Terminal (Mac)
Kopieren Sie S3-Dateien mit GSUtil von Python nach GCS
So rufen Sie mehrere Arrays mit Slice in Python ab.
[Einführung in Python] Wie stoppe ich die Schleife mit break?
Versuchen Sie, hochfrequente Wörter mit NLTK (Python) zu extrahieren.
Ausgabe auf "7 Segment LED" mit Python mit Raspberry Pi 3!
So führen Sie einen Befehl mit einem Unterprozess in Python aus
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen
Wovon ich süchtig war, als ich Python Tornado benutzte
Abfrage von Python an Amazon Athena (unter Verwendung des benannten Profils)
Ich habe versucht, mit Python auf Google Spread Sheets zuzugreifen
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-