Die Überwachung Ihrer Anwendung und Infrastruktur ist in der heutigen dynamischen Umgebung von entscheidender Bedeutung. Prometheus ist ein leistungsstarkes Tool, das in den letzten Jahren bei einigen der weltweit kritischsten Infrastrukturunternehmen wie SoundCloud in Produktion war. Es ist ein Open-Source-Überwachungssystem und Zeitreihendaten. Das Hauptziel von Prometheus ist es, eine flexible Überwachungslösung bereitzustellen, die in der Lage ist, große Mengen an Zeitreihendaten schnell zu sammeln und zu verarbeiten. Obwohl Prometheus in Go geschrieben ist, kann es verwendet werden, um jede Art von Prozess über Remote-Client-Bibliotheken zu überwachen. In diesem Tutorial erfahren Sie, wie Sie Python-Skripte mit Prometheus überwachen.

Die Programmiersprache Python wird immer beliebter und wird in allen Branchen verwendet. Infolgedessen entwickeln unternehmungslustige Entwickler Tools, die sich darauf konzentrieren, bei der Überwachung von Python-Software wie Prometheus zu helfen. In diesem Tutorial sehen wir uns genauer an, was Prometheus macht und wie es Ihnen helfen kann, die Informationen zu sammeln und wie Sie Python-Skripte mit Prometheus überwachen.

Was ist Prometheus?

Prometheus ist ein Open-Source-Monitoring- und Alerting-Toolkit, das ursprünglich von SoundCloud entwickelt wurde. Es verwendet eine Zeitreihendatenbank zum Speichern von Metrikdaten, in der Sie Metriken auf allen Ihren Servern oder nur einer Teilmenge abfragen und Warnungen zu Metriken durchführen können, die Sie für wichtig halten. Es kann verwendet werden, um alles zu überwachen, von der Netzwerklatenz und Festplatten-E/A bis hin zur Anzahl aktiver Benutzer auf einer Site. Prometheus hat ein einfaches und intuitives Konfigurationsdateiformat und kann auf Tausende von Hosts und Metriken skaliert werden. Es ist einfach zu installieren und verfügt über viele Integrationen für Tools wie Grafana.

Was kann Prometheus überwachen?

Metriken mit Prometheus zu erhalten ist normalerweise ziemlich einfach. Wir verwenden ein paar Zeilen Code, um dies zu ermöglichen, egal ob es sich um eine Get-Anfrage oder eine Abfrage an die Datenbank oder den lokalen Cache usw. handelt, und Sie können sie einfach mit Ihrem vorhandenen Stack einrichten.

Prometheus unterstützt die folgenden 4 Arten von Metriken:

  1. Counter: Es ist ein Mittel zum Zählen von Zahlen. Es hilft Ihnen, den Überblick zu behalten, wenn sich die Dinge im Allgemeinen erhöhen oder nur auf 0 zurücksetzen.
  2. Gauge: Es handelt sich um eine numerische Metrik, die häufig verwendet wird, um Werte wie Leistungsmetriken zu verfolgen.
  3. Info: Es wird für statische Informationen wie eine Version des Antrags und/oder eine „Aufzählung“ verwendet, um den Status des Antrags anzuzeigen.
  4. Histogram: Die Verwendung von Histogrammen ist entscheidend für die Verfolgung und Analyse der Dauer, des Volumens und der Häufigkeit von Dingen wie Anfragen.

Aufbau eines einfachen Prometheus-Beobachters

Der Einfachheit halber verwenden wir in diesem Projekt nur die Messgeräte-Metrik.

Zuerst müssen Sie den Prometheus-Client speziell für Python installieren, das können Sie mit dem folgenden Befehl tun oder Sie finden dieses Paket auch auf PyPI.

pip install prometheus-client

Erstellen Sie dann eine .py-Datei, die Sie beliebig benennen und den folgenden Code darin einfügen können. Außerdem ist alles, was Sie über den Code wissen möchten, als Kommentare darin vordefiniert.

import prometheus_client as prom  #import 'prometheus_client', this is important as the python Prometheus library is called that  

#these two packages are for creating the extra metrics in the sample
from random import randrange
import time

#here we are defining the gauge, it has only one metric, which is, for just to generate a number
RANDOM_NUMBER_GAUGE = prom.Gauge('rendom_number_gauge', 'Random number between 1 - 100')

#this is the function to generate random numbers based on our Gauge and displays the whole thing on the page
def generate_random_numbers():
    while True:
        random_number = randrange(10)
        RANDOM_NUMBER_GAUGE.set(random_number)
        time.sleep(5)  #this sleep function defines, in how much time will our Gauge update the metrics


if __name__ == '__main__':  #this is the closing function
    prom.start_http_server(8000)  #and here are starting our server with the Prometheus client itself to post our results
    generate_random_numbers()

Führen Sie nach dem Erstellen der Datei den folgenden Befehl aus, um die Anwendung zu starten:

python3 main.py
#python3 <your_file_name>

Wenn Sie nach dem Ausführen keine Fehler erhalten, bedeutet dies, dass es erfolgreich gestartet wurde. Das mag seltsam klingen, aber so funktioniert es. Nun, wie Sie im Code sehen können, haben wir den Server so definiert, dass er auf Port 8000 startet. Gehen Sie mit diesem Link http://127.0.0.1:8000/ dorthin und Sie sollten ein Ergebnis wie dieses erhalten:

Wie Sie sehen, können diese Metriken nun von Prometheus verfolgt und verwendet werden. Alle Informationen sind mit einem Kommentar darüber versehen, sodass Sie leicht herausfinden können, was was ist. Ganz unten haben wir auch unseren Zufallszahlengenerator, der wie erwartet funktioniert:

Es gibt verschiedene Möglichkeiten, diese Informationen zu verwenden: Wenn Sie beispielsweise einen Dienst optimieren, können Sie die Anzeige verwenden, um zu sehen, wie sich die Latenz bei Änderungen ändert, was Sie darüber informiert, wie Sie weitere Anpassungen vornehmen können, um Probleme zu beheben.

Erstellen eines Prometheus-Website-Beobachters

Nachdem wir nun wissen, wie Prometheus grundsätzlich funktioniert, können wir auch einen Dienst, der Bestandteil unserer Prometheus-Anwendung wäre, mit einem Label versehen, um die Metriken zwischen Diensten leichter unterscheiden zu können. z.B. wenn dieselbe Metrik für mehrere verschiedene Dienste relevant ist. Wenn wir also die Metriken auf mehreren Websites überprüfen möchten, können wir dasselbe Messgerät verwenden und ein Label hinzufügen, das die Website kennzeichnet, von der aus wir gemessen haben.

Um einen solchen Watcher zu erstellen, erstellen Sie eine neue Datei und fügen Sie den folgenden Code ein. Der Inhalt wird auch in den Kommentaren erläutert.

import prometheus_client as prom
import requests
import time

#here we have defined the gauge, it also has only one metric, which is to show the ms load time of websites
RESPONSE_TIME_GAUGE = prom.Gauge('sample_external_url_response_ms', 'Url response time in ms', ["url"])
URL_LIST = ["https://github.com", "https://google.com"]  #here we have defined what sites we want our appliction to monitor 


#this function monitor’s how much time do the mentioned sites take to load
def get_response(url: str) -> dict:
    response = requests.get(url)
    response_time = response.elapsed.total_seconds()
    return response_time

#this function displays the results properly on the web page
def get_url_status():
    while True:
        for url_name in URL_LIST:
            response_time = get_response(url_name)
            RESPONSE_TIME_GAUGE.labels(url=url_name).set(response_time)
        time.sleep(5)  


if __name__ == '__main__':
    prom.start_http_server(8000)
    get_url_status()

Sie können es ähnlich wie bei der anderen Datei ausführen:

python3 main.py
#python3 <your_file_name>

Wenn es erfolgreich gestartet wurde, öffnen Sie erneut die Ergebnisseite über den Link http://127.0.0.1:8000/ und Sie sollten ein Ergebnis wie dieses erhalten:

Auch hier erhalten Sie alle üblichen Metriken sowie die Ladezeiten externer Websites, die Sie unten sehen können:

Wie Sie können, erhalten wir die Ergebnisse der Ladezeit auf den definierten Sites, was in vielen Situationen sehr nützlich sein kann, sei es in einer Produktions- oder Entwicklungsumgebung. Sie können den Link der Website ganz einfach durch einen beliebigen Link ersetzen, sei es auf einer öffentlichen Domain oder auf einem lokalen Host!

der Abschluss

Es ist wichtig zu verstehen, was in Ihrer Anwendung und Infrastruktur passiert. Überwachung ist der Schlüssel, um sicherzustellen, dass sich Ihr Unternehmen an Veränderungen in Märkten, Technologien und Ressourcen anpassen kann. Prometheus ist eine hervorragende Open-Source-Lösung, mit der Sie Zeitreihendaten auf verschiedene Weise sammeln und überwachen können. In diesem Tutorial haben wir nur die Grundlagen von Prometheus behandelt, es gibt jedoch eine Vielzahl verschiedener und leistungsstarker Überwachungslösungen, die Sie verwenden können. Wenn Sie mehr darüber erfahren möchten, sollten Sie sich unbedingt die Dokumentation ansehen.

Hier sind einige nützliche Tutorials, die Sie lesen können: