Configuration du client Python StatsD

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!

Qu'est-ce que 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.

Avantages de StatsD

  1. Excellent temps de démarrage
  2. Le traitement du centile est effectué par le serveur, fournissant une vue agrégée de plusieurs instances à la fois (pour le même service).
  3. La surcharge côté client est relativement faible.
  4. Nous utilisons UDP pour envoyer toutes les données afin d'éviter les problèmes de connectivité.
  5. Simple, efficace et facile à mettre en œuvre lors de la création d'applications de courte durée.
  6. Les métriques sont envoyées au serveur uniquement à l'arrivée, ce qui entraîne une faible utilisation de la mémoire.

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.

Prérequis et installation

  1. Tout d'abord, vous devez avoir Python 3.6 ou version ultérieure et pip installés sur votre système.

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/).

  1. StatsD, Flask, Flask-StatsD seront nécessaires et les métriques liées au flask seront collectées automatiquement. En plus de cela, vous aurez besoin d'un virtualenv. Il s'agit d'un outil pour créer un environnement Python isolé et SQLALCHEMY est un exemple de base de données.
pip install StatsD, flask, Flask-StatsD, virtualenv, Flask-SQLAlchemy

Pip installera automatiquement les dernières versions de ces packages.

Jouons avec le package StatsD

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

Surveillance avec Flask

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()
  1. Créez un ID de variable pour la colonne DB qui contient l'entier comme clé primaire.
  2. Créez une colonne de contenu de texte.
  3. Créez une colonne booléenne avec une valeur par défaut de false pour indiquer si la tâche a été terminée / résolue.
  4. Démarrez les colonnes de contenu et d'achèvement.
  5. Renvoyez la base de données dans un format imprimable.
  6. Créez et démarrez un nouveau DB.

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é.

  1. La minuterie de base démarre dès que la fonction démarre.
  2. S'il y a une erreur dans le contenu, l'erreur sera incrémentée au compteur de base. De même, l'heure de l'erreur est enregistrée. Finalement, une erreur sera renvoyée.
  3. Lorsque le DB ajoute une tâche, la durée totale de l'exécution de la fonction est calculée et l'incrémenteur est mis à jour. La période totale sera également mise à jour.

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.

Envoi de métriques de pyStatsD à MetricFire

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.

Présentation du graphite:

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.

Pourquoi MetricFire:

  1. Fournit du graphite en tant que service
  2. Ajout d'un agent intégré pour combler le vide dans la version actuelle de Graphite
  3. Autoriser les comptes d'équipe à résoudre les problèmes précédents avec la collaboration
  4. Autorisations personnalisées du tableau de bord détaillé
  5. Excellente intégration avec d'autres services tels que AWS, Heroku
  6. Le fonctionnement via API améliore le développement
  7. Sauvegarde horaire du tableau de bord et des données utilisateur
  8. Évoluez facilement et rapidement selon les besoins
  9. Solide expérience en matière de surveillance du graphite
  10. Assistance 24/7 d'ingénieurs expérimentés
  11. Facile à utiliser avec le modèle plug and play

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.

Déploiement

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.

référence

Recommended Posts

Configuration du client Python StatsD
Utiliser le client LiquidTap Python ③
Utiliser le client LiquidTap Python ②
Utiliser le client LiquidTap Python ①
Essayez d'utiliser Kubernetes Client -Python-
Client IRC simple avec python
Python
[google-oauth] [python] Bibliothèque cliente des API Google pour Python
Un client HTTP simple implémenté en Python
Client API Slack simple réalisé avec Python
Ecrire un client TCP avec Python Twisted
Manipuler des tables BigQuery à partir d'un client Python
"Première recherche élastique" commençant par un client python
J'ai créé un fichier de configuration avec Python