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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
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éé) :
1 2 3 4 5 |
/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 :
1 2 3 4 5 |
/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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
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” :
1 2 3 4 |
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 :
1 2 3 |
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 :
1 2 3 4 5 6 7 8 9 10 |
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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 :
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)