La création et le déploiement d'applications distribuées hautement évolutives dans un environnement de développement logiciel en constante évolution ne sont que la moitié du chemin. L'autre moitié consiste à surveiller la santé des applications et les instances tout en enregistrant des métriques précises.
Vous voudrez peut-être voir combien de ressources sont consommées, combien de fichiers sont accédés par un processus spécial, etc. Ces métriques fournissent des informations précieuses sur l'exécution et la gestion de la pile technologique. Cela vous donne le pouvoir de comprendre les performances finales de votre conception et vous aide finalement à l'optimiser.
La plupart des outils pour faire le travail sont déjà là, mais aujourd'hui, nous parlerons davantage de StatsD. Nous vous montrerons comment déployer votre propre client PythonStatsD, comment l'utiliser pour surveiller votre application Python et comment enregistrer les métriques enregistrées finales dans votre base de données. Après cela, si vous souhaitez afficher les métriques StatsD sur le tableau de bord Grafana avec Prometheus ou Graphite, [MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Configuring%20Python%20Python%20Python Obtenez un essai gratuit sur Book Demo dans% 20Client). Mais avant cela, commençons par StatsD!
StatsD est un projet node.js qui collecte et écoute les statistiques et les mesures de performances du système. Ces statistiques sont envoyées sur le réseau et peuvent collecter différents types de données métriques. Le principal avantage de l'utilisation de StatsD est qu'il peut être facilement intégré à d'autres outils tels que Grafana, Graphite et InfluxDB.
Mais ... qu'est-ce que cela signifie d'être "poussé" quand une métrique entre en jeu?
Il existe deux principaux modèles d'exécution pour les rapports métriques. Dans le modèle pull, le système de surveillance «supprime» l'application sur un point de terminaison HTTP particulier. Dans le modèle push utilisé par StatsD, l'application envoie la métrique au système de surveillance.
Vous pouvez vérifier votre installation Python en exécutant la commande suivante sur un système Linux, Windows ou macOS.
$ python --version
S'il n'est pas installé, consultez ces instructions d'installation de votre système (https://www.makeuseof.com/tag/install-pip-for-python/).
pip install StatsD, flask, Flask-StatsD, virtualenv, Flask-SQLAlchemy
Pip installera automatiquement les dernières versions de ces packages.
Commencez par implémenter le minuteur de base.
import statsd
timer = statsd.Timer('Statsd_Tutorial_Application')
timer.start()
# we can do just about anything over here
timer.stop('TutorialTimer')
De même, pour les compteurs de base:
import statsd
counter = statsd.Counter('Statsd_Tutorial_Application')
# again do anything random over here
counter += 1
Dans ce didacticiel, vous allez concevoir une application de liste de tâches de base dans Flask et enregistrer des métriques d'opération.
Le référentiel complet du didacticiel peut être dérivé de Github.
Étape 1: Importez les dépendances-5-12:
from flask import Flask, request
from flask import render_template
from flask import redirect
from flask_sqlalchemy import SQLAlchemy
import time
import statsd
Étape 2: Lancez l'application Flask, le client Statsd et DB-14th line: 23rd line:
c = statsd.StatsClient('localhost',8125)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
Créez une classe de tâches et définissez-la dans les lignes de modèle de base de données 26-35:
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.Text)
done = db.Column(db.Boolean, default=False)
def __init__(self, content):
self.content = content
self.done = False
db.create_all()
Maintenant, ajoutez une tâche-Lignes 42-57:
@app.route('/task', methods=['POST'])
def add_task():
start=time.time()
content = request.form['content']
if not content:
dur = (time.time() - start) *1000
c.timing("errortime",dur)
c.incr("errorcount")
return 'Error'
task = Task(content)
db.session.add(task)
db.session.commit()
dur = (time.time() - start) *1000
c.timing("tasktime",dur)
c.incr("taskcount")
Ce code ajoute le contenu de la tâche reçue du formulaire à la requête POST. Cependant, il est plus important de discuter ici du rapport métrique qui est ajouté.
Supprimer les lignes de tâches 60-65:
@app.route('/delete/<int:task_id>')
def delete_task(task_id):
task = Task.query.get(task_id)
db.session.delete(task)
db.session.commit()
c.incr("deletecount")
Le code ci-dessus effectue une suppression de tâche du DB en ajoutant un nombre de suppressions au compteur de base pour les incréments.
L'enregistrement de ces métriques à l'aide de StatsD est utile pour les débutants. Cependant, dans des environnements de production plus de niveau industriel, ces métriques doivent être traitées par des services qui facilitent le stockage et le traitement des graphiques. C'est là que le graphite entre en jeu.
Graphite est conçu comme un outil de surveillance utilisé pour suivre les performances des sites Web, des applications / autres services et des serveurs de réseau. Le graphite a créé une sensation dans le monde de la technologie, déclenchant une nouvelle génération d'outils de surveillance, ce qui facilite beaucoup le partage et la visualisation, ainsi que le stockage et la récupération de données de séries chronologiques.
Le graphite effectue essentiellement deux opérations.
--Enregistrer des données de séries chronologiques numériques —— Rendre le graphique de ces données à la demande
Le graphite n'est pas un agent de collecte et ne doit pas être traité comme un agent de collecte. Au contraire, il fournit un chemin plus simple pour capturer des mesures dans une base de données chronologique. Pour tester l'envoi d'une métrique depuis un serveur ou une machine locale vers une instance de graphite déjà en cours d'exécution, exécutez la commande en une ligne suivante:
`$ echo "foo.bar 1 `date +%s`" | nc localhost 2003`
Une fois installé, enregistrez simplement les métriques dans StatsD et Graphite récupérera toutes les données enregistrées. Eh bien, Graphite semble être un gros problème, mais il existe encore certaines solutions de secours Graphite que les développeurs veulent résoudre. C'est là que MetricFire entre en jeu.
Cependant, si vous souhaitez toujours des services auto-hébergés et auto-gérés et que vous souhaitez un contrôle total sur tout, l'utilisation de StatsD et de docker est un moyen facile de lancer du graphite.
StatsD peut être déployé dans votre environnement préféré en utilisant votre architecture préférée et d'autres services / microservices. Assurez-vous que toutes les applications côté client qui envoient des métriques au serveur StatsD sont accessibles au serveur StatsD. De cette façon, StatsD ne s'en plaindra pas.
Just in: AWS Cloudwatch prend également en charge les métriques StatsD au cas où vous utiliseriez le cloud AWS pour héberger votre infrastructure (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch) -Agent-custom-metrics-statsd.html) est maintenant disponible.
En ce qui concerne la visualisation des métriques que nous avons accumulées, Grafana est son outil de visualisation de facto.
Si vous voulez l'essayer par vous-même, inscrivez-vous pour une démo (https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Configuring%20Python%20StatsD%20Client) et nous Peut parler des meilleures solutions de surveillance graphite et Prometheus pour vous. N'hésitez pas à faire une réservation.
StatsD API
Le client Python StatsD est également livré avec une API que vous pouvez déclencher via HTTP Request si vous souhaitez l'intégrer.
Recommended Posts