[PYTHON] Visualisez les ressources du serveur à l'aide d'InfluxDB et Grafana

Je faisais une application qui était pénible pour munin et je faisais quelque chose avec du tissu, mais cela est devenu douloureux pour la partie dessin de graphique, et à la suite de diverses enquêtes, la combinaison d'InfluxDB et de Grafana semblait bonne, alors j'ai bien visualisé les ressources. Le contenu que j'ai essayé.

Aperçu

Il existe un serveur de surveillance et un groupe de serveurs surveillés, et InfluxDB, Grafana et Fabric sont installés sur le serveur de surveillance. Le serveur de surveillance utilise Fabric pour établir une connexion ssh avec chaque serveur et acquérir des métriques. Les métriques acquises sont enregistrées dans InfluxDB et visualisées dans Grafana. Se sentir comme ça.

Versions

J'ai utilisé CentOS comme système d'exploitation, mais il semble que l'installation et le démarrage d'InfluxDB et Grafana soient différents. InfluxDB = 0.8.8(stable) Grafana = 2.0.1 Fabric = 1.10.1 influxdb-python = 2.2.0

Install & Launch

Puisque l'installation officielle est correcte, exécutez-la simplement.

InfluxDB

Par défaut, les ports 8083, 8086, 8090, 8099 sont utilisés, alors ouvrez-les si nécessaire. Augmentez le nombre maximum de descripteurs de fichiers avec ʻulimit -n 65536`.

wget http://s3.amazonaws.com/influxdb/influxdb-latest-1.x86_64.rpm
sudo rpm -ivh influxdb-latest-1.x86_64.rpm
sudo service influxdb start

Grafana

Par défaut, le port 3000 est utilisé, alors ouvrez-le si nécessaire.

wget install https://grafanarel.s3.amazonaws.com/builds/grafana-2.0.2-1.x86_64.rpm
sudo rpm -ivh grafana-2.0.2-1.x86_64.rpm
sudo service grafana-server start

Fabric

Utilisé pour obtenir des métriques de chaque serveur. Si vous pouvez obtenir les numéros de chaque serveur et les enregistrer dans InfluxDB, vous n'avez pas besoin d'être Fabric. À l'heure actuelle, je me demande si un outil appelé Diamond semble bon. Fabric est installé à partir du système d'empaquetage Python. (Cela ne fonctionne que si c'est Python 2.x)

sudo pip install Fabric

influxdb-python

Ceci est également installé avec pip. Vous n'avez pas besoin d'utiliser Fabric.

sudo pip install influxdb

Setting

InfluxDB et Grafana peuvent accéder à l'interface Web. Veuillez faire différentes choses pour chaque utilisateur.

InfluxDB

Créez une base de données pour stocker les métriques.

Lorsque vous accédez à http: // localhost: 8083 /, il vous sera demandé de vous connecter, donc connectez-vous avec ʻuser = root, password = root`. screenshot 2015-05-10 22.00.21.png

Lorsque vous vous connectez, une liste de bases de données s'affiche. Créez une nouvelle base de données appelée «dimensions» qui stocke les valeurs mesurées obtenues à partir de chaque serveur. screenshot 2015-05-10 22.20.41.png

Connexion entre Grafana et InfluxDB

Si vous accédez à http: // localhost: 3000 /, il vous sera également demandé de vous connecter. Par défaut, vous pouvez vous connecter avec ʻuser = admin, password = admin`. screenshot 2015-05-10 22.36.18.png

Tableau de bord vide. Cliquez sur la marque Grafana en haut à gauche pour ouvrir le menu. Cliquez sur Sources de données dans le menu pour ouvrir l'écran de configuration du backend Grafana. screenshot 2015-05-10 22.27.55.png

Après avoir cliqué sur Sources de données, cliquez sur Ajouter nouveau au centre de l'écran et définissez InfluxDB 0.8.x comme backend. Notez que le port url est le port api, spécifiez donc 8086 au lieu du navigateur 8083. Le nom est approprié. La base de données définit les dimensions créées précédemment dans InfluxDB. Enfin, cliquez sur Ajouter pour terminer. 993856d7-2af3-aeff-d05c-f6ac3a2df1f0.png

Ceci termine la connexion entre Grafana et InfluxDB.

Fabric

Obtenez des métriques de chaque serveur et enregistrez-les dans InfluxDB. Pour plus de détails sur son utilisation, veuillez le consulter sur d'autres pages.

fabfile.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from fabric.api import env, run
from influxdb.influxdb08 import InfluxDBClient
import re

env.hosts = ["server01.hoge.jp"]
env.key_filename  = ["~/.ssh/server01_rsa"]
env.user = "myuser"
client = InfluxDBClient('localhost', 8086, 'root', 'root', 'dimensions')

def loadaverage():
    match = re.search(r"load averages?:\s+(\d+\.\d+),\s+(\d+\.\d+),\s+(\d+\.\d+)", run("uptime"))
    min1  = float(match.group(1))
    min5  = float(match.group(2))
    min15 = float(match.group(3))
    client.write_points([
        {
            "name": "loadaverage_1min",
            "columns": ["value"],
            "points": [[min1]]
        },
        {
            "name": "loadaverage_5min",
            "columns": ["value"],
            "points": [[min5]]
        },
        {
            "name": "loadaverage_15min",
            "columns": ["value"],
            "points": [[min15]]
        }
    ])

Préparez un fabfile comme celui-ci et exécutez-le toutes les minutes avec crontab. */1 * * * * fab loadaverage

Après quelques minutes, je lance une requête avec list series à partir de l'interface Web de la base de données Influx DB dimensions DB et lorsque 3 séries sont renvoyées, tout va bien. À propos, la série est comme une table dans RDB. screenshot 2015-05-11 0.25.31.png

Visualisez avec Grafana

Sélectionnez Nouveau dans le menu du tableau de bord. e455de07-5be3-037a-a27b-65307479189a.png

Vous serez redirigé vers un nouveau tableau de bord, alors ouvrez le menu dans la zone verte et créez un nouveau graphique. da410db2-31c3-86c4-2bd8-fd258e1d231c.png

Cliquez sur le titre du graphique (là où il n'y a pas de titre (cliquez ici)) et utilisez Modifier pour ouvrir l'écran de paramétrage du graphique. Si vous entrez load average_1min en série, un graphique apparaîtra (!). Réglez le groupe par heure sur «1 m». Appuyez ensuite sur Ajouter une requête pour ajouter la requête et ajoutez les paramètres load average_5min et load average_15min de la même manière. Il est encore mieux de bien définir les titres d'alias et de graphes. En passant, si le nom de la série est séparé par des points, chaque champ séparé par des points avec un alias est affecté à \ $ 0, \ $ 1 ..., donc des variables peuvent être utilisées. Dans ce domaine, j'estime qu'il est plus facile à régler que la fourche kibana d'origine (le réglage se reflète également en temps réel). 7c5f7bca-ddc8-9e8b-be39-7c82099bd106.png

Vous pouvez définir le temps maximum à afficher sur le graphique et le temps de mise à jour en temps réel à partir de l'affichage de l'heure en haut à droite. Enfin, cliquez sur Enregistrer pour terminer le tableau de bord.

Après cela, on a l'impression de bouillir ou de cuire au four. screenshot 2015-05-12 0.05.50.png

Résumé

La gestion des séries chronologiques et la représentation graphique des données métriques, qui étaient difficiles à créer personnellement, étaient très faciles avec InfluxDB et Grafana. J'attends avec impatience la version 1.0 d'InfluxDB, mais il semble qu'il n'y ait pas beaucoup de compatibilité entre 0.8 et 0.9, donc ce sera douloureux. Grafana est un clone de kibana, c'est donc formidable de pouvoir créer un tableau de bord avec une opérabilité encore meilleure tout en gardant une apparence cool. De plus, même s'il était assez pénible de devoir inclure la recherche élastique même si je voulais juste la visualiser avec Kibana, Grafana est sobre que je puisse choisir le type de back-end. Étant donné que Fabric et Diamond ne se font pas concurrence, il semble préférable d'utiliser Diamond pour la moyenne de charge et les mesures générales, et Fabric pour les mesures plus orientées vers les applications. En plus de l'affichage graphique que j'ai écrit cette fois, le tableau de bord a également une seule statistique, vous pouvez donc faire des choses comme simplement afficher l'état actuel. Il semble que vous puissiez ajouter une annotation et faire quelque chose comme ça dans le graphique.

Recommended Posts

Visualisez les ressources du serveur à l'aide d'InfluxDB et Grafana
Serveur HTTP et client HTTP utilisant Socket (+ navigateur Web) --Python3
Visualisez l'activité des plantes depuis l'espace à l'aide de données satellites et de Python