VPlex est un composant strategique et particulièrement critique d’une infrastructure de production. Il est à l’interface entre les serveurs qui produisent de l’I/O et les baies de stockage qui servent ces I/O. Il est donc très important de pouvoir superviser au mieux les équipements qui le constituent.
Il existe plusieurs solutions pour assurer la supervision de VPlex via un produit tiers (en dehors de la console de supervision intégrée, donc). Parmi ces solutions, on peut citer deux méthode classiques : les traps SNMP et le polling actif via l’utilisation d’un jeu d’API publiques sur les services web des consoles de service.
Je vais vous présenter rapidement la deuxième solution, celle que nous avons choisi pour notre institution. Nous utilisons Nagios pour tous les indicateurs techniques de nos infrastructures et c’est par ce biais que nous avons mis en place des pollings réguliers pour interroger notre VPlex Metro.
Le principe d’utilisation de ces APIs est simple, car basé directement sur un échange HTTP sur l’un des deux service console. Il s’agit donc de construire une requête spécifique envoyée via un HTTP-GET et, en retour, obtenir et interpréter le résultat de cette commande. Pour exécuter cette requête, il suffit d’utiliser un outil comme WGET ou CURL.
Voici la requête permettant de récupérer la liste des FANs (ventilateurs intégrés aux appliances) pour un engine donné (un cluster) :
1 |
curl -s -k -H Username:supervision -H Password:MOTDEPASSE "https://cluster1.fqdn.com/vplex/engines/engine-1-1/fans" |
Cette requête peut être décomposée ainsi :
- -s -k : deux options spécifiques à curl, évitant l’affichage de la barre de progression et permettant d’accepter les certificats autosignés/invalides
- -H Username:supervision -H Password:MOTDEPASSE : rajoute de deux entêtes complémentaires à la requête HTTP-GET pour s’authentifier sur le VPlex
- https://krakenhn/vplex/engines/engine-1-1/fans : la requête proprement dite
Pour ceux qui connaissent déjà un peu l’environnement CLI de VPlex, vous noterez que la chaîne suivant le FQDN du cluster VPlex interrogé (ici cluster1.fqdn.com) est en grande partie identique au contexte à l’intérieur duquel on souhaite opérer l’interrogation.
Voici ce qui est retourné par l’exécution de la commande :
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 |
{ "response": { "message": null, "exception": null, "context": [ { "headers": null, "name": "fans", "children": [ { "type": "fan", "name": "fan-psa0-exhaust" }, { "type": "fan", "name": "fan-psa0-intake" }, { "type": "fan", "name": "fan-psa1-exhaust" }, { "type": "fan", "name": "fan-psa1-intake" } ], "parent": "/engines/engine-1-1", "attributes": [ { "value": "fans", "name": "name" } ], "type": "fans" } ], "custom-data": null } } |
Comme vous pouvez le noter, ce retour est formatté en JSON ( Wikipedia, site officiel ). Malgré sa syntaxe un peu particulière, cela reste relativement simple à comprendre. Ici, le VPlex nous a renvoyé, comme prévu, la liste des FANs présents dans l’engine 1-1, tel que demandé dans la chaîne HTTP. Si l’on veut récupérer le statut de chaque FAN, il suffit de renvoyer une requête plus précise en indiquant le nom spécifique du FAN à interroger :
1 |
curl -s -k -H Username:supervision -H Password:MOTDEPASSE "https://cluster1.fqdn.com/vplex/engines/engine-1-1/fans/fan-psa0-exhaust" |
On obtient en retour le résultat suivant :
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 |
{ "response": { "message": null, "exception": null, "context": [ { "headers": null, "name": "fan-psa0-exhaust", "children": [ ], "parent": "/engines/engine-1-1/fans", "attributes": [ { "value": "fan-psa0-exhaust", "name": "name" }, { "value": "online", "name": "operational-status" }, { "value": "false", "name": "speed-threshold-exceeded" } ], "type": "fan" } ], "custom-data": null } |
Les paramètres du FAN son listés et leur statut est remonté via les champs “value”. Ici, par exemple, le statut “operational-status” est “online”, en mode nomminal, donc.
D’une manière générale, l’ensemble des contextes du VPlex peut ainsi être interrogé et, une fois mis en forme, remonté dans une console de supervision. Le principe est simple, son exploitation aussi, pour peu que l’on ait un peu de temps pour construire les scripts de mise en forme adéquats, évidemment.
Il existe également des règles d’écriture des URLs d’interrogation qui permettent de récupérer en une seule fois toute une série de paramètres ou d’états. Ainsi la requête suivante récupère l’ensemble des états “operational-status” d’une branche contextuelle, ici les FANs :
1 |
curl -s -k -H Username:supervision -H Password:MOTDEPASSE "https://cluster1.fqdn.com/vplex/engines/engine-1-1/fans/*?operational-status" |
Vous notez qu’on indique derrière le “?” , en fin de chaine HTTP, le type de paramètre à interroger pour tous les contextes situés sous …/fans/ . Le retour de cette commande est de ce type :
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 56 57 |
{ "response": { "message": null, "exception": null, "context": [ { "headers": null, "name": "fan-psa0-exhaust", "parent": "/engines/engine-1-1/fans", "attributes": [ { "value": "online", "name": "operational-status" } ], "type": "fan" }, { "headers": null, "name": "fan-psa0-intake", "parent": "/engines/engine-1-1/fans", "attributes": [ { "value": "online", "name": "operational-status" } ], "type": "fan" }, { "headers": null, "name": "fan-psa1-exhaust", "parent": "/engines/engine-1-1/fans", "attributes": [ { "value": "online", "name": "operational-status" } ], "type": "fan" }, { "headers": null, "name": "fan-psa1-intake", "parent": "/engines/engine-1-1/fans", "attributes": [ { "value": "online", "name": "operational-status" } ], "type": "fan" } ], "custom-data": null } } |
Encore une fois, un résultat sans ambiguïté et relativement lisible.
Pour les besoins de supervision de notre infrastructure, nous avons donc construit en interne une série de scripts shell permettant d’interroger les éléments du VPlex et de retourner leur résultat sous une forme compatible avec Nagios. Voici la liste de tous les composants que nous supervisons actuellement avec succès via cette méthode :
- L’état général hardware des engines : alimentations, fans, modules de management, état général des cartes mères
- L’état des communications entre les clusters et le witness VPlex
- L’état général des communications entre les directeurs (état des liaisons WanCom principalement)
- L’état des distributed devices (état du mirroir, état de fonctionnement local)
- L’état des devices locaux (état des mirroirs locaux, si existants, état de fonctionnement)
L’ensemble de ces indicateurs permettent d’assurer une supervision opérationnelle relativement exhaustive, sans trop se disperser dans des interrogations moins critiques.
Ces scripts shell de type BourneShell/BASH sont disponibles dans la section téléchargement. D’autre part, EMC fournit dans le CLI Guide de VPlex tout le détail de cette méthode d’interrogation, avec des exemples et des cas pratiques (EMC VPlex CLI Guide P/N 300-012-311, chapitre VPLEX Element Manager API).
Sachez enfin qu’il est également possible de modifier la configuration du VPlex par ces API (à la manière de naviseccli pour les environnements Clariion/VNX). Ceci étant, à mon sens, leur utilisation ne doit être réservée qu’à des opérations très particulières, notamment lors du provisionning initial, pour de l’automatisation, par exemple.
Bonjour,
Je travaille pour BULL et suis spécialisé dans la supervision Open Source au travers de Nagios.
Je suis très intéressé par votre travail autour de la supervision de VPLEX.
Serait-il possible de me faire parvenir vos plugins à cette adresse svp ou bien de m’envoyer un lien de téléchargement.
J’ai actuellement un client voulant superviser son architecture VPLEX de manière active.
Merci d’avance,
Bien cordialement,
AP.
Bonjour,
Je vais devoir intégrer un grand nombre de volumes venant de baies EMC dans un Vplex.
Je vais devoir donc faire les claim, créer les extent, devices, virtual volumes distributed volumes et les storage view.
Avez vous des exemples de commandes Curl pour faire ces actions?
Merci d’avance pour votre aide
Bonjour Pascal,
Malheureusement, je n’ai pas eu l’occasion d’utiliser les api web pour faire du paramétrage. Par contre, nous avons utilisé des scripts shell pour “construire” les commandes à passer pour provisionner un volume générique en fournissant juste son ID VPlex et son nom final. Du coup, il est assez simple de produire des scripts de paramétrage en masse à partir de ces sources.
Super ton blog Cédric. Je n’hésiterai pas à te backlink si besoin dans mes articles.
Pour répondre à Pascal, oui, c’est possible.
Il faut juste faire attention à bien mettre l’option –appc pour claim un LUN avec de la data déjà existante (pour une première encapsulation par exemple, ce qui semble être ton cas).
Tu vas donc avoir besoin de :
storage-volume claim
extent create
local-device create
virtual-volume create
Si tu as un compte sur le support.emc.com, tu peux chercher la documentation VPLEX Element Manager API Guide couplée avec VPLEX Command Reference Guide.
Si jamais tu avais des problèmes pour scripter ça, n’hésites pas à me contacter thomas.asnar@gmail.com ou sur mon blog.thomas-asnar.eu. Je t’aiderai.
Mais globalement, tu reprends les informations de Cédric, et au lieu de faire de l’affichage, tu vas faire des request en post, avec une commande et des arguments.
curl -s -k -H Username:supervision -H Password:MOTDEPASSE “https://cluster1.fqdn.com/vplex/lacommande+restedecommadesiespace -X POST -d “{\”args\”:\”-f $tesvariables\”}”
Effectivement, je confirme les informations de Thomas (merci pour compliment !). Depuis ma réponse, nous avons intégré des commandes POST dans certains de nos scripts pour piloter le VPlex. Une autre alternative moins orienté “one line to rule them all”, c’est de créer un petit fichier de paramêtres à passer dans le post, puis de l’envoyer via un curl -X POST -d @tonfichier -sk “URL” . Je donne un exemple dans mon billet sur l’interface RESTful d’XtremIO, qui est bâtie exactement sur le même modèle que celle de VPlex (logique, ceci dit ;) ).
Bonjour,
Je suis extrêmement intéressé par vos scripts BourneShell/BASH pour monitorer VPLEX. En effet, là où je travaille, on bascule petit à petit sur VPLEX et les MIBS VPLEX servent essentiellement au tuning supervision. Moi je souhaiterais plus les scripts pour vérifier l’état du VPLEX. Or, je cherche sur le site web et je ne trouve pas la section ‘téléchargement’… :(
Pouvez-vous m’envoyer le lien, s’il vous plaît?
Bonjour Gilbert,
Toutes mes excuses, je viens de rajouter la section downloads qui avait disparue depuis une maj récente. Vous la trouverez via le menu en haut de ce blog, ou directement ici.
Bonjour,
Encore merci pour ces scripts et votre réactivité! :-)