
Pratiquement tous les éditeurs proposent des outils de monitoring inclus dans leurs produits. Là où ca devient plus compliqué, c’est lorsque l’on souhaite centraliser ces données dans une même interface. Heureusement des outils Open Sources tels que Grafana, InfluxDB, Graphite ou Telegraf existent et vont nous permettre d’atteindre ce but (moyennant un peu d’huile de coude quand même…). Je vous propose dans cet article de voir comment il est possible d’exporter les statistiques de performance d’un cluster VMware vSAN dans une base de données InfluxDB. Ces données pourront par la suite être mises sous forme de graphique dans Grafana.
L’agent de collecte Telegraf ne sachant pas nativement récupérer les statistiques d’un cluster vSAN, nous allons détailler plus particulièrement l’utilisation de l’utilitaire vsanmetrics qui permet d’extraire des statistiques d’utilisation et de performance et va ensuite les traduire dans un format que peut interpréter Telegraf.
Infrastructure de monitoring
Voyons comment vont cohabiter les différents éléments de l’infrastructure de monitoring. Telegraf va, toutes les 5 minutes, executer vsanmetrics pour collecter les données du cluster vSAN. Telegraf va ensuite stocker ces données dans une base InfluxDB. Grafana va venir chercher les données dans la base InfluxDB puis les presenter sous forme de graphiques aux utilisateurs.
Ca devrait ressembler à quelque chose comma ça:
Nous ne détaillerons pas comment installer l’ensemble des briques, vous retrouverez toutes les informations nécessaire dans mon précédent article Centraliser les métriques d’un serveur Windows grace à Telegraf, InfluxDB et Grafana. A la différence de ce qui est présenté dans l’article, nous partirons du principe que Telegraf est installé sur le même serveur que Grafana et InfluxDB.
Prérequis et remarques préalables à l’utilisation de vsanmetrics
- Cela parait évident mais cela ne coute rien de le rappeler, il vous faut disposer d’un Cluster VMware vSAN ou Dell EMC VxRail…
- Vsanmetrics va se connecter au vCenter via un compte utilisateur. l’identifiant et mot de passe du compte apparaissant en claire dans le fichier de configuration de Telegraf, je vous conseille fortement de créer un compte dédié au monitoring et n’ayant que des droits en lecture.
- Même si l’article a été rédigé alors que la version 0.2.0 de vsanmetrics était disponible, il est probable qu’une version plus récente soit téléchargeable au moment ou vous lirez ces lignes. Je mettrai à jour l’article si les nouvelles versions venait à changer la façon d’utiliser l’utilitaire.
- Python doit être installé sur votre serveur et les librairies vSphere et vSAN doivent êtres aussi disponibles. Vous pouvez vous referer à l’article Python, vSphere, vSAN et moi pour savoir comment procéder.
- Une liste des différentes métriques disponibles via l’API vSAN est disponible dans l’article Le service de performance vSAN
vsanmetrics dans le détail
vsanmetrics est un outil développé par votre serviteur en Python. Son but est d’interroger le vCenter via les API pour en extraire des statistiques d’utilisation et de performance vSAN. Une fois les données collectées, elles sont misent en forme au format InfluxDB line protocol pour pouvoir par la suite être envoyées par Telegraf dans la base de données InfluxDB.
L’utilitaire est téléchargable sur GitHub. Il fonctionne de la même manière quelque soit l’OS. Nous utiliserons pour les tests une distribution Ubuntu 17.10. Une fois téléchargé il faut rendre le script vsanmetrics.py
executable et accessible avec les commandes suivantes (libre à vous de les adapter suivant vos habitudes):
% chmod +x vsanmetrics.py
Validons que l’utilitaire est accessible avec la commande vsanmetrics -h
qui devrait afficher les parametres disponibles.
% ./vsanmetrics -h usage: vsanmetrics.py [-h] -s VCENTER [-o PORT] -u USER [-p PASSWORD] -c CLUSTERNAME [--performance] [--capacity] [--skipentitytypes SKIPENTITYTYPES] Export vSAN cluster performance and storage usage statistics to InfluxDB line protocol optional arguments: -h, --help show this help message and exit -s VCENTER, --vcenter VCENTER Remote vcenter to connect to -o PORT, --port PORT Port to connect on -u USER, --user USER User name to use when connecting to vcenter -p PASSWORD, --password PASSWORD Password to use when connecting to vcenter -c CLUSTERNAME, --cluster_name CLUSTERNAME Cluster Name --performance Output performance metrics --capacity Output storage usage metrics --skipentitytypes SKIPENTITYTYPES List of entity types to skip. Separated by a comma
Essayons maintenant de nous connecter à un cluster vSAN. Munissez-vous des identifiants d’un compte ayant à minima des droits de lecture et tapez la commande ci-dessous. Il vous faudra spécifier quels types de métriques vous souhaitez récupérer en utilisant les arguments --performance
et --capacity
:
./vsanmetrics.py -s vcenter.example.com -u [email protected] -p MyAwesomePassword -c VSAN-CLUSTER --capacity --performance
Si tout se passe bien, vous devriez voir des données apparaitre. Cela devrait ressembler à quelque chose comme ça:
capacity_global,scope=global,vcenter=vcenter.example.com,cluster=VSAN-CLUSTER totalCapacityB=7200999211008,freeCapacityB=1683354550260 1525422314084382976 capacity_summary,scope=summary,vcenter=vcenter.example.com,cluster=VSAN-CLUSTER temporaryOverheadB=0,physicalUsedB=2636212338688,primaryCapacityB=2688980877312,usedB=5380734189568,reservedCapacityB=3607749040540,overReservedB=2744521850880,provisionCapacityB=6986210377728,overheadB=2828663783436 1525422314084382976 capacity_vmswap,scope=vmswap,vcenter=vcenter.example.com,cluster=VSAN-CLUSTER temporaryOverheadB=0,physicalUsedB=8422162432,primaryCapacityB=177330978816,usedB=355240771584,reservedCapacityB=355089776640,overReservedB=346818609152,overheadB=177909792768 1525422314084382976 capacity_checksumOverhead,scope=checksumOverhead,vcenter=vcenter.example.com,cluster=VSAN-CLUSTER temporaryOverheadB=0,physicalUsedB=0,primaryCapacityB=0,usedB=8858370048,reservedCapacityB=0,overReservedB=0,overheadB=8858370048 1525422314084382976
Félicitation, tout fonctionne ! On peut passer à l’étape suivante.
Configuration d’InfluxDB
Nous allons devoir créer une base de données pour stocker les métriques puis configurer une durée de rétention pour éviter de saturer la base.
En etant connecté à votre serveur, lancez l’utilitaire ‘influx’
% influx Connected to http://localhost:8086 version 1.3.5 InfluxDB shell version: 1.3.5 >
Créez la base VSAN
> CREATE DATABASE VSAN
Configurez une durée de rétention de 12 semaines (environs 3 mois) pour les données stockées dans la base VSAN
> CREATE RETENTION POLICY "douze_semaines" ON "VSAN" DURATION 12w REPLICATION 1 DEFAULT
vsanmetrics et Telegraf
Rentrons maintenant un peu plus dans le vif du sujet. Nous allons configurer Telegraf pour qu’il execute vsanmetrics à interval régulier. Pour ce faire nous allons éditer le fichier de configuration de Telegraf (telegraf.conf), configurer le plugin par défaut [[outputs.influxdb]]
pour qu’il envoie les données dans la base InfluxDB et rajouter un plugin [[inputs.exec]]
. Le but de ce plugin est tout simplement d’executer le script et d’envoyer le resultat dans les plugin Output configurés (ici InfluxDB mais ça pourrait aussi être une base Graphite). Un exemple de fichier de configuration fonctionnel est disponible sur GitHub.
Editez le fichier telegraf.conf et modifiez ou rajoutez les lignes suivantes (à adapter suivant votre configuration):
############################################################################### # OUTPUTS # ############################################################################### # Configuration for influxdb server to send metrics to [[outputs.influxdb]] # The full HTTP or UDP endpoint URL for your InfluxDB instance. urls = ["http://127.0.0.1:8086"] # required # The target database for metrics (telegraf will create it if not exists) database = "VSAN" # required # Precision of writes, valid values are "ns", "us" (or "µs"), "ms", "s", "m", "h". # note: using second precision greatly helps InfluxDB compression precision = "s" ## Write timeout (for the InfluxDB client), formatted as a string. ## If not provided, will default to 5s. 0s means no timeout (not recommended). timeout = "5s" ############################################################################### # INPUT PLUGINS # ############################################################################### [[inputs.exec]] # Shell/commands array # Full command line to executable with parameters, or a glob pattern to run all matching files. commands = ["python /path/to/script/vsanmetrics.py -s vcenter.example.com -u [email protected] -p MyAwesomePassword -c VSAN-CLUSTER --performance --capacity"] # Timeout for each command to complete. timeout = "60s" # Data format to consume. # NOTE json only reads numerical measurements, strings and booleans are ignored. data_format = "influx" interval = "300s"
Relancez le service Telegraf:
% sudo systemctl restart telegraf.service
Attention, Telegraf doit pouvoir accéder au script avec le compte qui éxecute le service Telegraf. Il s’agit par défaut du compte root. De plus, si vous avez installé pyvmomi avec PIP, assurez vous de l’avoir fait pour le compte root avec la commande sudo -H pip install pyvmomi
.
InfluxDB
Maintenant que Telegraf est censé envoyer des données dans InfluxDB, vérifions que c’est bien le cas ! Toujours sur votre serveur, relancez l’utilitaire ‘influx’
% influx Connected to http://localhost:8086 version 1.3.5 InfluxDB shell version: 1.3.5 >
Connectez-vous à la base de données VSAN
que nous avons créer precedemment
> use VSAN Using database VSAN
Enfin assurez vous que des données sont bien présentes:
&> show MEASUREMENTS name: measurements name ---- cache-disk capacity-disk capacity_checksumOverhead capacity_dedupOverhead capacity_efficientcapacity capacity_fileSystemOverhead capacity_global capacity_namespace capacity_other capacity_statsdb capacity_summary capacity_vdisk capacity_vmswap cluster-domclient cluster-domcompmgr disk-group host-domclient host-domcompmgr virtual-disk virtual-machine vsan-host-net vsan-pnic-net vsan-vnic-net vscsi
Affaire à suivre…
Maintenant que les données sont présentes dans InfluxDB, elles sont donc accessibles par Grafana. La création de dashboards fera l’objet d’un autre article mais en attendant vous trouverez pleins de ressources disponibles sur internet. N’hésitez pas à m’envoyer une capture d’écran de vos créations, je les ajouterais dans l’article.