La surveillance de votre application et de votre infrastructure est cruciale dans l’environnement dynamique d’aujourd’hui. Prometheus est un outil puissant qui est en production depuis quelques années dans certaines des sociétés d’infrastructure les plus critiques au monde comme SoundCloud. Il s’agit d’un système de surveillance open source et de données de séries chronologiques. L’objectif principal de Prometheus est de fournir une solution de surveillance flexible capable de collecter et de traiter rapidement de grandes quantités de données de séries chronologiques. Bien que Prometheus soit écrit en Go, il peut être utilisé pour surveiller tout type de processus via des bibliothèques clientes distantes. Dans ce tutoriel, nous allons voir comment surveiller les scripts Python à l’aide de Prometheus.

Le langage de programmation Python gagne en popularité et est utilisé dans tous les secteurs. En conséquence, les développeurs entreprenants créent des outils axés sur l’aide à la surveillance de tout logiciel Python – comme Prometheus. Dans ce didacticiel, nous examinerons plus en détail ce que fait Prometheus et comment il peut vous aider à collecter les informations ainsi que la façon de surveiller les scripts Python à l’aide de Prometheus.

Qu’est-ce que Prométhée ?

Prometheus est une boîte à outils de surveillance et d’alerte open-source créée à l’origine par SoundCloud. Il utilise une base de données de séries chronologiques pour stocker les données métriques, où vous pouvez interroger les métriques sur tous vos serveurs ou juste un sous-ensemble, et effectuer des alertes sur les métriques que vous jugez importantes. Il peut être utilisé pour tout surveiller, de la latence du réseau et des E/S de disque au nombre d’utilisateurs actifs sur un site. Prometheus a un format de fichier de configuration simple et intuitif et est capable de s’adapter à des milliers d’hôtes et de métriques. Il est facile à installer et possède de nombreuses intégrations pour des outils tels que Grafana.

Que peut surveiller Prometheus ?

Obtenir des métriques à l’aide de Prometheus est généralement assez facile. Nous utilisons quelques lignes de code pour rendre cela possible, qu’il s’agisse d’une requête get ou d’une requête vers la base de données ou le cache local, etc., et vous pouvez facilement les configurer avec votre pile existante.

Prometheus prend en charge les 4 types de métriques suivants :

  1. Compteur : C’est un moyen de compter les nombres. Il vous aide à garder une trace des choses d’augmenter ou simplement de réinitialiser à 0 en général.
  2. Jauge : Il s’agit d’une mesure numérique couramment utilisée pour suivre des valeurs telles que les mesures de performance.
  3. Info : il est utilisé pour des informations statiques telles qu’une version de l’application et/ou une « énumération » pour afficher l’état de l’application.
  4. Histogramme : L’utilisation d’histogrammes est essentielle pour suivre et analyser la durée, le volume et la fréquence de choses comme les demandes.

Construire un observateur Prometheus de base

Par souci de simplicité, nous n’utiliserons que la métrique de jauge dans ce projet.

Tout d’abord, vous devrez installer spécifiquement le client Prometheus pour Python, vous pouvez le faire avec la commande suivante ou vous pouvez également trouver ce package sur PyPI.

pip install prometheus-client

Ensuite, créez un fichier .py, vous pouvez le nommer comme vous voulez et y coller le code suivant. De plus, tout ce que vous voudriez savoir sur le code y est prédéfini sous forme de commentaires.

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()

Après avoir créé le fichier, exécutez la commande suivante pour démarrer l’application :

python3 main.py
#python3 <your_file_name>

Si vous n’obtenez aucune erreur après l’avoir exécuté, cela signifie qu’il a démarré avec succès. Cela peut sembler bizarre, mais c’est ainsi que cela fonctionne. Maintenant, comme vous pouvez le voir dans le code, nous avons défini le serveur pour qu’il démarre au port 8000. Allez-y en utilisant ce lien http://127.0.0.1:8000/ et vous devriez obtenir un résultat comme celui-ci :

Maintenant, comme vous pouvez le voir, ces métriques peuvent désormais être suivies et utilisées par Prometheus. Toutes les informations sont étiquetées avec un commentaire au-dessus, afin que vous puissiez facilement comprendre ce qui est quoi. Nous avons également notre générateur de nombres aléatoires tout en bas, qui fonctionne comme prévu :

Nous pouvons utiliser ces informations de différentes manières : par exemple, lors du réglage d’un service, vous pouvez utiliser la jauge pour voir comment la latence change au fur et à mesure que vous apportez des modifications, ce qui pourrait vous indiquer comment effectuer d’autres ajustements pour résoudre les problèmes.

Construire un observateur de site Web Prometheus

Maintenant que nous savons comment fonctionne fondamentalement Prometheus, nous pouvons également appliquer une étiquette à un service, qui serait un composant de notre application Prometheus, afin de faciliter la différenciation des métriques entre les services. par exemple. si la même métrique est pertinente pour plusieurs services différents. Avec cela, si nous voulons vérifier les métriques sur plusieurs sites Web, nous pouvons utiliser la même jauge et ajouter une étiquette indiquant le site à partir duquel nous avons mesuré.

Pour créer un tel observateur, créez un nouveau fichier et collez-y le code suivant. Son contenu est également expliqué dans les commentaires.

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()

Vous pouvez l’exécuter de la même manière que nous l’avons fait pour l’autre fichier :

python3 main.py
#python3 <your_file_name>

Encore une fois, s’il a démarré avec succès, ouvrez la page de résultats en utilisant le lien http://127.0.0.1:8000/ et vous devriez obtenir un résultat comme celui-ci :

Ici également, vous obtiendrez toutes les mesures habituelles, ainsi que les temps de chargement des sites Web externes que vous pouvez voir ci-dessous :

Comme vous le pouvez, nous obtenons les résultats du temps de chargement sur les sites définis, ce qui pourrait être très utile dans de nombreuses situations, que ce soit dans un environnement de production ou de développement. Vous pouvez facilement remplacer le lien du site Web par ce que vous voulez, que ce soit sur un domaine public ou sur un hébergeur local !

Conclusion

Il est important de comprendre ce qui se passe dans votre application et votre infrastructure. La surveillance est la clé pour s’assurer que votre entreprise peut s’adapter aux changements des marchés, de la technologie et des ressources. Prometheus est une excellente solution open source qui vous permet de collecter et de surveiller des données de séries chronologiques de plusieurs manières. Dans ce didacticiel, nous n’avons couvert que les bases de Prometheus, mais il propose une pléthore de solutions de surveillance différentes et puissantes que vous pouvez utiliser. Si vous voulez en savoir plus à ce sujet, vous devez absolument consulter leur documentation.

Voici quelques tutoriels utiles que vous pouvez lire :