Inventaire RAID LSI dans GLPI

Inventaire RAID LSI dans GLPI
Dans mon travail, je suis souvent obsédé par le manque d'informations sur l'infrastructure, et avec l'augmentation du nombre de serveurs desservis, cela se transforme en une véritable torture. Même lorsque j'étais administrateur dans de petites organisations, j'ai toujours voulu savoir ce qui se trouvait où, où c'était branché, quelles personnes étaient responsables de quel élément matériel ou service, et surtout, enregistrer les changements dans tout cela. Lorsque vous arrivez dans un nouvel endroit et que vous rencontrez un incident, vous passez beaucoup de temps à rechercher ces informations. Ensuite, je vais vous dire à quoi j'ai dû faire face dans RuVDS et comment j'ai résolu le problème indiqué dans le titre.

Préhistoire

En tant qu'administrateur d'entreprise, j'avais peu d'expérience de travail dans un centre de données, mais j'ai aperçu RackTables. Il montrait clairement le rack avec tous les serveurs, UPS, commutateurs et toutes les connexions entre eux. RuVDS ne disposait pas d'un tel système, mais uniquement de fichiers Excel/papier contenant des informations sur les serveurs, certains de leurs composants, les numéros de rack, etc. Avec cette approche, il est très difficile de suivre les changements dans les petites composantes. Mais les consommables les plus importants et les plus fréquemment remplacés pour les serveurs sont les disques. Il est très important de maintenir à jour les informations sur l'état des disques et leur réserve stratégique. Si un disque d'une matrice RAID tombe en panne et n'est pas remplacé rapidement, cela peut finalement avoir des conséquences fatales. Par conséquent, nous avons vraiment besoin d'un système qui suit l'emplacement des disques et leur état afin de comprendre ce qui pourrait nous manquer et quels modèles nous devons acheter.

À la rescousse est venu GLPI, un produit open source conçu pour améliorer les performances des services informatiques et les amener aux idéaux ITIL. En plus de l'inventaire des équipements et de la gestion des racks, il dispose d'une base de connaissances, d'un service desk, d'une gestion documentaire et bien plus encore. GLPI dispose de nombreux plugins, notamment FusionInventory et OCS Inventory, qui vous permettent de collecter automatiquement des informations sur les ordinateurs et autres appareils via l'installation d'agents et SNMP. Vous pouvez en savoir plus sur l'installation de GLPI et des plugins dans d'autres articles, et le meilleur de tous - documents officiels. Vous pouvez l'installer sur notre hébergement sur un modèle prêt à l'emploi LAMP.

Cependant, après avoir déployé l'agent, nous ouvrirons les composants informatiques dans GLPI et verrons ceci :

Inventaire RAID LSI dans GLPI
Le problème est qu'aucun des plugins ne peut voir les informations sur les disques physiques dans les matrices RAID LSI. Après avoir vu comment ce problème est résolu pour la surveillance dans Zabbix à l'aide d'un script PowerShell lsi-raid.ps1 J'ai décidé d'en écrire un similaire pour transférer des informations vers GLPI.
Les données sur les disques de la baie peuvent être obtenues à l'aide des utilitaires du fabricant du contrôleur ; dans le cas de LSI, il s'agit de StorCLI. À partir de là, vous pouvez obtenir des données au format JSON, les analyser et les transmettre à l'API GLPI. Nous relierons les disques aux ordinateurs que FusionInventory a déjà créés. Une fois exécuté à nouveau, le script mettra à jour les données sur les disques et en ajoutera de nouvelles. Le script lui-même Send-RAIDtoGLPI.ps1 est ici sur GitHub. Ensuite, je vais vous expliquer comment l'utiliser.

Ce qui sera requis

  1. GLPI version 9.5.1 (testée sur celle-ci)
  2. Plugin FusionInventaire et agent pour Windows
  3. Windows 2012 R2 (et supérieur) en tant que système hôte ou machine virtuelle de gestion avec un contrôleur inséré, PowerShell version 4 ou supérieure
  4. Pilote MegaRAID installé
  5. Module pour PowerShell - PSGLPI
  6. Compte dans GLPI avec profil Admin pour autorisation via API générée par UserToken et AppToken

Point important. Pour une raison quelconque, GLPI a 2 entités différentes pour le modèle de disque, mais il n'y a pas de propriété « type de média ». Par conséquent, pour enregistrer les propriétés du disque dur et du SSD, j'ai décidé d'utiliser la liste déroulante « Modèles de disques durs » (front/devicemodel.php?itemtype=DeviceHardDriveModel). Le script doit avoir ces valeurs dans la base de données GLPI, sinon il ne pourra pas écrire de données sur le modèle de disque. Par conséquent, vous devez ajouter d'abord le disque dur, puis le SSD à cette liste vide, afin que les identifiants de ces éléments dans la base de données soient 1 et 2. S'il y en a d'autres, remplacez dans cette ligne le script Send-RAIDtoGLPI.ps1 après HDD et SSD au lieu de 1 et 2 leurs ID correspondants :

deviceharddrivemodels_id = switch ($MediaType) { "HDD" { "1" }; "SSD" { "2" }; default { "" } }

Si vous ne voulez pas vous embêter avec cela ou si vous utilisez cette liste déroulante différemment, vous pouvez simplement supprimer cette ligne du script.

Vous devez également ajouter des statuts pour les disques dans « Element Statuses » (/front/state.php). J'ai ajouté les statuts « MediaError » (il y a eu au moins une erreur d'accès au disque) et « OK », une ligne dans le script où leurs identifiants sont transmis, « 2 » pour « OK » et « 1 » pour « MediaError » :

states_id = switch ($MediaError) { 0 { "2" }; { $_ -gt 0 } { "1" } }

Ces statuts sont nécessaires pour plus de commodité ; si vous n'avez pas besoin de ces propriétés, vous pouvez également supprimer entièrement cette ligne.

Dans le script lui-même, n'oubliez pas de pointer les variables vers les vôtres. $GlpiCreds doit contenir l'URL du serveur API GLPI, UserToken et AppToken.

Qu'y a-t-il dans le script

En raison de la lourdeur de l'analyse JSON et des ifs vides, le script est difficile à lire, je vais donc décrire sa logique ici.

Au premier lancement sur l'hôte, le script parcourt tous les contrôleurs et recherche les disques dans la base de données GLPI par numéro de série ; s'il ne le trouve pas, il recherche le modèle. S'il ne trouve pas le modèle, il ajoute le modèle du nouveau disque à GLPI et introduit ce disque dans la base de données.

À chaque nouveau passage, le script tentera de détecter de nouveaux disques, mais il ne sait pas comment supprimer ceux qui manquent, vous devrez donc le faire manuellement.

Exemple de déploiement

Le référentiel de scripts contient le script Deploy-Send-RAIDtoGLPI.ps1, qui téléchargera une archive ZIP avec les fichiers nécessaires depuis notre serveur GLPI et les déploiera sur chaque hôte.

Après avoir copié les fichiers, le script installera l'agent FusionInventory pour qu'il s'exécute en tant que tâche quotidienne et créera la même tâche pour notre script. Après une implémentation réussie, nous pourrons enfin voir les disques dans la section Composants de l'ordinateur dans GLPI.

Résultat

Désormais, en allant sur GLPI dans le menu « Paramètres » -> « Composants » -> « Disques durs », nous pouvons cliquer sur les modèles de disques et voir leur quantité pour comprendre ce que nous devons acheter.

Inventaire RAID LSI dans GLPI
Inventaire RAID LSI dans GLPI

Source: habr.com