InfluxDB

vSAN

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:

vsanmetrics schema logique

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

Logo 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

Logo 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

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…

Grafana vsanmetrics dashboard

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.

Erwan Quelin

Rédigé par

Erwan Quelin

Erwan Quélin est depuis 7 ans Ingénieur Systèmes chez Cheops Technology. Ses interventions sont multiples et auprès de clients très diversifiés dans la région Ouest. Spécialisé dans la virtualisation autour des produits VMware et dans le stockage autour des gammes VNX, Unity et VPLEX de Dell EMC, Erwan est certifié VMware Certified Professional – Datacenter virtualization 4, 5 et 6 ainsi que EMC Implementation Engineer – VNX et Unity et vient d’intégrer les programmes VMware vExpert et Dell EMC Elect pour l’année 2017.

Lorsqu’il lui reste un peu de temps libre, Erwan développe des projets open sources ayant pour sujet principal l’automatisation d’infrastructures.