Présentation de 4 façons de surveiller les applications Python à l'aide de Prometheus

image.png

introduction

Bien que Prometheus ait été conçu à l'origine pour des applications multithreads mono-processus plutôt que multi-processus, il est maintenant populaire pour la surveillance applications Python. Devient un outil pour.

Prometheus a été développé dans l'environnement Soundcloud et a été inspiré par Google's Borgmon. Dans l'environnement d'origine, Borgmon s'appuie sur la méthode simple de Service Discovery. Vous pouvez facilement trouver tous les travaux en cours d'exécution dans votre cluster.

Prometheus hérite de ces hypothèses, en supposant qu'une cible est un seul processus multithread. La bibliothèque cliente Prometheus est basée sur l'hypothèse que les métriques proviennent de différentes bibliothèques et sous-systèmes de plusieurs threads d'exécution s'exécutant dans un espace d'adressage partagé.

Pour commencer, accédez à MetricFire [Essai gratuit]( Veuillez vous inscrire sur 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%20with%). Dans cet essai, vous pouvez commencer à utiliser Prometheus sur votre plate-forme tout de suite et mettre en pratique ce que vous avez appris de cet article.

Problèmes d'intégration de Prometheus dans les applications Python WSGI

Lorsque j'exécute une application Python sur le serveur d'applications WSGI, je commence à avoir des problèmes. Dans les applications WSGI, les demandes sont affectées à de nombreux travailleurs différents plutôt qu'à un seul processus. Chacun de ces travailleurs devient une application multi-processus en étant déployé à l'aide de plusieurs processus.

Lorsque ce type d'application est exporté vers Prometheus, Prometheus obtient plusieurs travailleurs différents qui répondent aux demandes de scrape. Chaque ouvrier répond avec des valeurs connues, donc Prometheus peut gratter la contre-mesure et la renvoyer comme 100, immédiatement après qu'elle est retournée comme 200. Chaque travailleur exporte ses propres valeurs, de sorte que la contre-mesure mesure des informations aléatoires plutôt que l'ensemble du travail.

Il existe quatre solutions pour gérer ces problèmes:

1. Additionner tous les nœuds de calcul

Avec des étiquettes uniques pour chaque métrique, vous pouvez toutes les interroger en même temps et interroger efficacement l'ensemble du travail. Par exemple, si vous étiquetez chaque travailleur comme nom_travailleur, vous pouvez écrire une requête comme celle-ci:

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

Cela regroupe tous les nœuds de travail pour un travail à la fois. Cependant, le problème avec cela est que le nombre de métriques dont vous disposez montera en flèche.

2. Mode multi-processus

Cette méthode est recommandée par nous chez MetricFire. Cette méthode utilise le client Prometheus Python (https://github.com/prometheus/client_python), qui gère les applications multi-processus sur le serveur d'applications gunicorn et surveille votre propre application avec Prometheus.

Pour plus d'informations sur l'utilisation d'un client Python avec MetricFire pour surveiller vos propres services, consultez l'article Surveillance des applications Web Python avec Prometheus (https://qiita.com/MetricFire/items/57b95f6de1f608ef7c44). regarde s'il te plait. Cet article décrit chaque étape de l'utilisation de Prometheus pour surveiller une application Web Python.

3. Client Django Prometheus

Cette méthode spécifie chaque travailleur comme une cible complètement distincte. Le client Django Prometheus configure chaque worker pour écouter les requêtes de scrape Prometheus via son propre port.

4. Exportateur StatsD

Cette méthode rejette l'idée que Prometheus doit frotter directement l'application. Au lieu de cela, configurez Prometheus pour exporter les métriques de votre application vers une instance StatsD exécutée localement et obtenir une instance StatsD en votre nom. Cela vous donne plus de contrôle sur ce que chaque compteur compte.

Résumé

Prometheus ne peut pas surveiller nativement les applications multi-processus, mais ces quatre solutions sont de bonnes solutions de contournement. Cela permet à Prometheus d'être le principal outil de surveillance de toute l'entreprise pour les ressources informatiques et APM.

Pour plus d'informations sur l'utilisation de Prometheus pour surveiller les applications Python, consultez l'article Exportateur basé sur Python (https://www.metricfire.com/blog/first-contact-with-prometheus) et Kubernetes. Voir la série sur le développement et le déploiement d'API Python à l'aide de (https://www.metricfire.com/blog/develop-and-deploy-a-python-api-with-kubernetes-and-docker).

Pour essayer Prometheus et mettre en pratique ce que vous avez appris de cet article, [MetricFire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=How%20to%20monitor%20Python% 20Applications% 20with% 20Prometheus) [Essai gratuit](https://www.hostedgraphite.com/accounts/signup-metricfire/?signup=japan&utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=How%20to%20 avec 20Python%20 Vérifiez% 20 Prometheus). Vous pouvez utiliser Prometheus directement sur notre plateforme pour commencer à surveiller les métriques sans configuration. Veuillez également nous contacter directement en Réserver une démo .. Nous sommes toujours heureux de vous entendre sur les besoins de surveillance de votre entreprise.

Rendez-vous dans un autre article!

Recommended Posts

Présentation de 4 façons de surveiller les applications Python à l'aide de Prometheus
Introduction de Python 2.7 à CentOS 6.6
Publier sur Twitter en utilisant Python
Commencez à Selenium en utilisant python
Comment installer Python à l'aide d'Anaconda
Surveillez les applications Web Python avec Prometheus
6 façons d'enchaîner des objets en Python
5 façons de créer un chatbot Python
Migrer les applications Django exécutées sur Python 2.7 vers Python 3.5
De Python à l'utilisation de MeCab (et CaboCha)
Introduction à la simulation d'événements discrets à l'aide de Python # 1
Connectez-vous à Slack à l'aide de requêtes en Python
Essayez d'utiliser Excel en utilisant Python (Xlwings)
Vider les tables BigQuery dans GCS à l'aide de Python
Les débutants en Python publient des applications Web à l'aide de l'apprentissage automatique [Partie 2] Introduction à Python explosif !!
Introduction à la simulation d'événements discrets à l'aide de Python # 2
[Python] Compréhension de liste Différentes façons de créer une liste
3 façons d'analyser les chaînes de temps avec python [Note]
Méthode #Monte Carlo pour trouver le rapport de circonférence en utilisant Python
Procédure pour utiliser l'API WEB de TeamGant (en utilisant python)
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
[Version améliorée] Script pour surveiller le CPU avec Python
Convertir STL en maillage Voxel à l'aide de Python VTK
Mis à jour vers Python 2.7.9
Commencez à utiliser Python
Scraping à l'aide de Python
"Backport" vers python 2
Comment configurer un environnement Python à l'aide de pyenv
(Python) Essayez de développer une application Web en utilisant Django
Comment soumettre automatiquement des formulaires Microsoft à l'aide de python (version Mac)
Notification PUSH de Python vers Android à l'aide de l'API de Google
Erreur due à un conflit entre pythons lors de l'utilisation de gurobi
Un moyen facile de gratter avec Python en utilisant Google Colab
Méthodes MessagePack-Call Python (ou Python vers Ruby) à partir de Ruby à l'aide de RPC
Comment créer un package Python à l'aide de VS Code
Écrire des données dans KINTONE à l'aide du module de requêtes Python
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
Copier les fichiers S3 de Python vers GCS à l'aide de GSUtil
Comment récupérer plusieurs tableaux à l'aide de slice en python.
[Introduction à Python] Comment arrêter la boucle en utilisant break?
Essayez d'extraire des mots à haute fréquence en utilisant NLTK (python)
Sortie sur "LED 7 segments" en utilisant python avec Raspberry Pi 3!
Comment exécuter une commande à l'aide d'un sous-processus en Python
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Requête de Python vers Amazon Athena (à l'aide du profil nommé)
J'ai essayé d'accéder aux feuilles de calcul Google en utilisant Python
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-