Présentation des « monitors » VPlex

English sum-up :
A technical overview of the integrated monitoring system inside VPlex, the « monitors » section

Si vous administrez une plateforme VPlex, vous avez certainement eu la volonté de superviser ces équipements, d’une manière ou d’une autre. J’en ai parlé à plusieurs reprise sur ce blog, en présentant les solutions que nous avions adopté pour arriver à nos fins en matière de supervision et capacity planning. Malgré tout, et comme je suis d’une curiosité insatiable en la matière, je me suis récemment plongé dans le système des « monitors » de VPlex. Vous trouverez ici une première approche de ces outils ainsi que quelques petites « découvertes » qui ne sont pas forcément écrites dans la doc officielle ;)

VPlex utilise deux concepts complémentaires pour générer des statistiques. Les moniteurs, au sens strict, définissent la liste des indicateurs à superviser ; les « sink » (évier en Français, traduction pas très heureuse pour le coup …) sont en fait des cibles vers lesquelles les moniteurs vont envoyer les informations récoltées. Vous avez accès à 2 sinks : console et file. Le sink « console » va imprimer l’ensemble des indicateurs directement sur le terminal sur laquelle vous êtes connecté ; le sink « file », plus intéressant à mon sens, permet de rediriger les stats vers des fichiers, soit en mode tabulaire soit, mieux, en mode csv.

De base, chaque VPlex a un certain nombre de moniteurs activés, qu’on appelle aussi les « perpetual monitors ». Ils permettent d’une part de disposer d’une base d’analyse et de diagnostic direct en cas de problème de performance ou lors d’un incident de production et d’autre part, de fournir les statistiques remontées par la console web. Ces moniteurs sont facilement identifiables car ils portent la mention « PERPETUAL » dans leur nom. De plus, ils sont impossibles à modifier ou à supprimer (tant mieux ;) ) car utilisés par le support EMC.

Pour pouvoir consulter la liste des moniteurs déclarés dans un cluster, vous pouvez utiliser la commande suivante :

VPlexcli:/monitoring/directors> ll /monitoring/directors/director-*/monitors/

/monitoring/directors/director-1-1-A/monitors:
Name                                        Ownership  Collecting  Period  Average  Idle  Bucket  Bucket  Bucket  Bucket
------------------------------------------  ---------  Data        ------  Period   For   Min     Max     Width   Count
------------------------------------------  ---------  ----------  ------  -------  ----  ------  ------  ------  ------
DEFAULT_director-1-1-A_diskReportMonitor    false      true        30s     30s      9s    -       -       -       64
DEFAULT_director-1-1-A_portReportMonitor    false      true        30s     30s      9s    -       -       -       64
DEFAULT_director-1-1-A_volumeReportMonitor  false      true        30s     30s      16s   -       -       -       64
director-1-1-A_chu_stats_cluster1           true       true        1min    60s      35s   -       -       -       64
director-1-1-A_chu_stats_director           true       true        1min    60s      35s   -       -       -       64

/monitoring/directors/director-1-1-B/monitors:
Name                                                     Ownership  Collecting  Period  Average  Idle  Bucket  Bucket  Bucket  Bucket
-------------------------------------------------------  ---------  Data        ------  Period   For   Min     Max     Width   Count
-------------------------------------------------------  ---------  ----------  ------  -------  ----  ------  ------  ------  ------
DEFAULT_director-1-1-B_PERPETUAL_vplex_sys_perf_mon_v17  false      false       5s      -        4s    -       -       -       64
DEFAULT_director-1-1-B_diskReportMonitor                 false      true        30s     30s      9s    -       -       -       64
DEFAULT_director-1-1-B_portReportMonitor                 false      true        30s     30s      9s    -       -       -       64
DEFAULT_director-1-1-B_volumeReportMonitor               false      true        30s     30s      16s   -       -       -       64
director-1-1-B_chu_stats_director                        true       true        1min    60s      35s   -       -       -       64

/monitoring/directors/director-2-1-A/monitors:
Name                                             Ownership  Collecting  Period  Average  Idle  Bucket  Bucket  Bucket  Bucket
-----------------------------------------------  ---------  Data        ------  Period   For   Min     Max     Width   Count
-----------------------------------------------  ---------  ----------  ------  -------  ----  ------  ------  ------  ------
DEFAULT_director-2-1-A_diskReportMonitor         false      true        30s     30s      25s   -       -       -       64
DEFAULT_director-2-1-A_portReportMonitor         false      true        30s     30s      25s   -       -       -       64
DEFAULT_director-2-1-A_volumeReportMonitor       false      true        30s     -        17s   -       -       -       64
director-2-1-A_PERPETUAL_vplex_sys_perf_mon_v17  true       true        5s      5s       4s    -       -       -       64
director-2-1-A_chu_stats_cluster2                true       true        1min    60s      35s   -       -       -       64
director-2-1-A_chu_stats_director                true       true        1min    60s      35s   -       -       -       64

/monitoring/directors/director-2-1-B/monitors:
Name                                        Ownership  Collecting  Period  Average  Idle  Bucket  Bucket  Bucket  Bucket
------------------------------------------  ---------  Data        ------  Period   For   Min     Max     Width   Count
------------------------------------------  ---------  ----------  ------  -------  ----  ------  ------  ------  ------
DEFAULT_director-2-1-B_diskReportMonitor    false      true        30s     30s      25s   -       -       -       64
DEFAULT_director-2-1-B_portReportMonitor    false      true        30s     30s      25s   -       -       -       64
DEFAULT_director-2-1-B_volumeReportMonitor  false      true        30s     -        17s   -       -       -       64
director-2-1-B_chu_stats_director           true       true        1min    60s      35s   -       -       -       64

A Noter, chose très curieuse (et un peu déstabilisante au départ) : selon que vous êtes connecté à la console du cluster 1 ou 2, l’affichage ne sera pas le même ! En effet, contrairement à quasiment l’ensemble des autres commandes CLI de VPlex qui agissent sur l’ensemble de votre configuration, la création des moniteurs va être liée à la control-station sur laquelle vous vous trouvez.

Cela se traduit par un affichage différent desdits moniteurs en fonction de la console. Exemple, voici l’affichage du moniteur « chu_stats_director » du directeur 2-1-B sur la console de l’engine 2 (là ou le moniteur a été créé) :

/monitoring/directors/director-2-1-B/monitors:
Name                                        Ownership  Collecting  Period  Average  Idle  Bucket  Bucket  Bucket  Bucket
------------------------------------------  ---------  Data        ------  Period   For   Min     Max     Width   Count
------------------------------------------  ---------  ----------  ------  -------  ----  ------  ------  ------  ------
director-2-1-B_chu_stats_director           true       true        1min    60s      35s   -       -       -       64

… et voici l’affichage sur la console de l’engine 1 :

/monitoring/directors/director-2-1-B/monitors:
Name                                       Ownership  Collecting  Period  Average  Idle  Bucket  Bucket  Bucket  Bucket
-----------------------------------------  ---------  Data        ------  Period   For   Min     Max     Width   Count
-----------------------------------------  ---------  ----------  ------  -------  ----  ------  ------  ------  ------
DEFAULT_director-2-1-B_chu_stats_director  false      false       5s      -        22s   -       -       -       64

Vous notez que d’un coté, Ownership et Collecting sont à « true » alors que de l’autre, ils sont à « false ». D’autre part, le nom est également différent avec un préfixe « DEFAULT_ » sur la console où le moniteur n’a PAS été créé.

En gros, ce qu’il faut retenir de tout cela, c’est que lorsque vous créez des moniteurs et que vous y ajoutez des « sink », la collection et l’output seront exécutés par la console sur laquelle vous êtes connecté au départ.

Concernant la liste des indicateurs utilisables, il existe une commande très pratique vous permettant de « faire votre marché » pour construire vos propres moniteurs, c’est « monitor stat-list ». Voici quelques exemples d’informations issues de celle-ci :

VPlexcli:/> monitor stat-list
be-prt, cache, cg, com-cluster-io, director, directory, fc-com-port, fe-director, fe-lu, fe-prt, ip-com-port, ramf, rp-spl-node, rp-spl-vol, storage-volume, virtual-volume, wrt-pacing

VPlexcli:/> monitor stat-list director
Name                       Target    Type     Units
-------------------------  --------  -------  --------
director.async-write       n/a       counter  KB/s
director.be-aborts         n/a       counter  counts/s
director.be-busies         n/a       counter  counts/s
director.be-ops            n/a       counter  counts/s
director.be-ops-read       n/a       counter  counts/s
director.be-ops-write      n/a       counter  counts/s
director.be-ops-ws         n/a       counter  counts/s
director.be-qfulls         n/a       counter  counts/s
director.be-read           n/a       counter  KB/s
director.be-resets         n/a       counter  counts/s
director.be-timeouts       n/a       counter  counts/s
director.be-unitattns      n/a       counter  counts/s
director.be-write          n/a       counter  KB/s
director.be-ws             n/a       counter  KB/s
director.busy              n/a       reading  %
director.com-bytes-active  director  reading  counts
director.com-bytes-queued  director  reading  counts
director.com-ops-active    director  reading  counts
director.com-ops-queued    director  reading  counts
director.dr1-rbld-recv     n/a       counter  KB/s
director.dr1-rbld-sent     n/a       counter  KB/s
director.fe-ops            n/a       counter  counts/s
director.fe-ops-act        n/a       reading  counts
director.fe-ops-q          n/a       reading  counts
director.fe-ops-read       n/a       counter  counts/s
director.fe-ops-write      n/a       counter  counts/s
director.fe-read           n/a       counter  KB/s
director.fe-write          n/a       counter  KB/s
director.heap-used         n/a       reading  %
director.per-cpu-busy      n/a       reading  %
director.tcp-recv          n/a       counter  KB/s
director.tcp-send          n/a       counter  KB/s
director.udt-conn-drop     n/a       counter  counts/s
director.udt-pckt-retrans  n/a       counter  counts/s
director.udt-recv-bytes    n/a       counter  KB/s
director.udt-recv-drops    n/a       counter  counts/s
director.udt-recv-pckts    n/a       counter  counts/s
director.udt-send-bytes    n/a       counter  KB/s
director.udt-send-drops    n/a       counter  counts/s
director.udt-send-pckts    n/a       counter  counts/s


VPlexcli:/> monitor stat-list com-cluster-io
Name                     Target   Type     Units
-----------------------  -------  -------  ------
com-cluster-io.avg-lat   cluster  reading  us
com-cluster-io.max-lat   cluster  reading  us
com-cluster-io.min-lat   cluster  reading  us
com-cluster-io.send-ops  cluster  reading  counts

Certains indicateurs, commme com-cluster-io.avg-lat, ont une « target ». Cela veux dire que lors de la création du moniteur, vous devrez indiquer non seulement l’indicateur à superviser mais aussi sur quelle cible il porte. Pour notre exemple la cible est de type « cluster » : dans un VPlex Metro, vous disposez habituellement de deux clusters, il faut donc indiquez quel cluster doit être interrogé pour renvoyer les résultats attendus. Voici un exemple de création d’un moniteur portant sur les indicateurs com-cluster-io dont la target est « cluster-2 » :

VPlexcli:/monitoring/directors> monitor create -p 60s -d director-1-1-A -t /clusters/cluster-1 -n chu_stats_cluster1 -s com-cluster-io.*
Successfully created 1 monitor(s) out of 1.

VPlexcli:/monitoring/directors>

Pour les détails de la commande, je vous renvoie au CLI guide, qui explique en détail tout cela, mais vous pouvez notez malgré tout qu’un moniteur doit disposer au moins d’un nom, d’une période de polling et d’un directeur de référence (le directeur où les mesures sont faites).

Une fois le moniteur créé, il est juste défini, mais non actif. Il nous reste à définir un « sink » pour le lancer :

VPlexcli:/monitoring/directors> monitor add-file-sink -m director-1-1-A_chu_stats_cluster1 -f director-1-1-A_chu_stats_cluster1.log

VPlexcli:/monitoring/directors>

Normalement, si tout se passe bien, en consultant la liste des moniteur du directeur 1-1-A (celui que vous avez indiqué comme référence), vous obtenez désormais une liste de ce type :

VPlexcli:/monitoring/directors> ll director-1-1-A/monitors/

/monitoring/directors/director-1-1-A/monitors:
Name                                        Ownership  Collecting  Period  Average  Idle  Bucket  Bucket  Bucket  Bucket
------------------------------------------  ---------  Data        ------  Period   For   Min     Max     Width   Count
------------------------------------------  ---------  ----------  ------  -------  ----  ------  ------  ------  ------
director-1-1-A_diskReportMonitor            true       true        30s     30s      11s   -       -       -       64
director-1-1-A_portReportMonitor            true       true        30s     30s      11s   -       -       -       64
director-1-1-A_volumeReportMonitor          true       true        30s     30s      18s   -       -       -       64
director-1-1-A_chu_stats_cluster1           true       true        1min    1min     7s    -       -       -       64

Le moniteur « director-1-1-A_chu_stats_cluster1 » est actif, modulo 1 minute. Vous devriez récupérer en retour un fichier « director-1-1-A_chu_stats_cluster1.log » dans le répertoire /var/log/VPlex/cli de la control station courante contenant les données récoltées :

service@krakenhn:/var/log/VPlex/cli> ll -l director-1-1-A_chu_stats_cluster1.log
-rw-r--r-- 1 service users 2259 2014-12-04 14:35 director-1-1-A_chu_stats_cluster1.log
service@krakenhn:/var/log/VPlex/cli> cat director-1-1-A_chu_stats_cluster1.log
Time,com-cluster-io.avg-lat cluster-1 (us),com-cluster-io.max-lat cluster-1 (us),com-cluster-io.min-lat cluster-1 (us),com-cluster-io.send-ops cluster-1 (counts)
2014-12-04 13:38:16,160, 3306,1,5571
2014-12-04 13:39:16,167,9082,1,7647
2014-12-04 13:40:16,161,3662,1,6740
2014-12-04 13:41:16,145,2287,1,3387
2014-12-04 13:42:16,146,1215,1,1810
(...)
2014-12-04 14:31:16,204,7757,1,17834
2014-12-04 14:32:16,242,2846,1,9779
2014-12-04 14:33:16,203,7427,1,7506
2014-12-04 14:34:16,169,8651,1,6484
2014-12-04 14:35:16,139,5261,1,5500

Charge à vous ensuite, de récupérer ces fichiers (via SFTP) et construire vos graphs. Ca peut donner des choses comme cela :
graph

J’espère que cette petite introduction vous aura permis de dégrossir un peu le principe des moniteurs, leurs spécificités et leur exploitation. A votre disposition pour échanger à ce sujet.

Sources :
CLI Guide VPlex 5.2 (via https://support.emc.com)
Admin Guide VPlex 5.2 (via https://support.emc.com)