Dans mon travail, je ressens souvent des obsessions sur le manque d'informations sur l'infrastructure, et avec l'augmentation du nombre de serveurs desservis, cela se transforme en véritable torture. Même lorsque j'administrais dans de petites organisations, j'ai toujours voulu savoir ce qui est où, où il est bloqué, laquelle des personnes est responsable de quel matériel ou service, et surtout, de corriger les changements pour tout le monde. Lorsque vous venez dans un nouvel endroit et que vous êtes confronté à une sorte d'incident, il faut beaucoup de temps pour trouver cette information. 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.
Contexte
En tant qu'administrateur d'entreprise, j'avais peu d'expérience dans le centre de données, mais j'ai vu RackTables du coin de l'œil. Il montrait clairement un rack avec tous les serveurs, onduleurs, commutateurs et toutes les connexions entre eux. RuVDS ne disposait pas d'un tel système, mais uniquement des 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 pour les petits composants. Mais le consommable le plus important et le plus fréquemment remplacé pour les serveurs est le disque. Il est très important de tenir à jour les informations sur la santé des variateurs et leur réserve stratégique. Si un disque tombe en panne de la matrice RAID et n'est pas remplacé rapidement, cela peut entraîner 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 comprendrece que nous pouvons ne pas suffire et quels modèles doivent être achetés.
À 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 d'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, y compris FusionInventory et OCS Inventory, qui vous permettent de collecter automatiquement des informations sur les ordinateurs et autres périphériques via l'installation d'agents et via SNMP. Vous pouvez en savoir plus sur l'installation de GLPI et des plugins dans d'autres articles, le meilleur de tous - la documentation officielle . Vous pouvez l'installer sur notre hébergement sur un modèle LAMP prêt à l'emploi .
Cependant, après le déploiement de l'agent, nous ouvrirons les composants informatiques dans GLPI et verrons ceci:
Le problème est qu'aucun des plugins ne peut voir les informations du disque physique dans les matrices RAID LSI. Après avoir vu comment ce problème a été résolu pour la surveillance dans Zabbix à l'aide du script PowerShell lsi-raid.ps1, j'ai décidé d'en écrire un similaire pour le transfert d'informations vers GLPI.
Les données sur les disques de la matrice 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 lierons les disques aux ordinateurs que FusionInventory a déjà créés. Lors d'une exécution répétée, le script mettra à jour les données sur les disques et en ajoutera de nouveaux. Le script Send-RAIDtoGLPI.ps1 lui - même se trouve ici sur GitHub . Ensuite, je vais vous montrer comment l'utiliser.
Ce qui est requis
- GLPI 9.5.1 ( )
- FusionInventory Windows
- Windows 2012 R2 ( ) , management-VM , PowerShell 4
- MegaRAID
- PowerShell — PSGLPI
- GLPI Admin API, UserToken AppToken
Un 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 disque dur" (front / devicemodel.php? Itemtype = DeviceHardDriveModel). Le script a besoin de 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 d'abord entrer le disque dur, puis le SSD dans cette liste vide, de sorte que les ID de ces éléments dans la base de données soient 1 et 2. S'il y en a d'autres, remplacez les ID correspondants dans cette ligne du script Send-RAIDtoGLPI.ps1 après HDD et SSD au lieu de 1 et 2 :
deviceharddrivemodels_id = switch ($MediaType) { "HDD" { "1" }; "SSD" { "2" }; default { "" } }
Si vous ne voulez pas vous en préoccuper, ou si vous utilisez cette liste déroulante différemment, vous pouvez simplement supprimer cette ligne du script.
Vous devez également ajouter les statuts des disques aux "Statuts des éléments" (/front/state.php). J'ai ajouté les statuts "MediaError" (il y avait au moins une erreur d'accès au disque) et "OK", une ligne dans le script où leurs identifiants sont passés, "2" pour "OK" et "1" pour "MediaError":
states_id = switch ($MediaError) { 0 { "2" }; { $_ -gt 0 } { "1" } }
Ces statuts sont nécessaires pour des raisons de commodité, si vous n'avez pas besoin de ces propriétés, vous pouvez également supprimer complètement cette ligne.
Dans le script lui-même, n'oubliez pas de spécifier les variables pour les vôtres. $ GlpiCreds doit contenir l'URL du serveur API GLPI, UserToken et AppToken.
Que contient le script
En raison de la lourdeur de l'analyse JSON et de la feuille de ifs, le script est difficile à lire, je vais donc décrire sa logique ici.
Au premier démarrage sur l'hôte, le script parcourt tous les contrôleurs et recherche les disques dans la base de données GLPI par numéros de série, s'il ne le trouve pas, il recherche un modèle. S'il ne trouve pas non plus de modèle, il ajoute le modèle du nouveau disque à GLPI et entre ce disque dans la base de données.
À chaque nouvelle passe, le script essaiera de trouver de nouveaux disques, mais il ne pourra pas supprimer les disques manquants, par conséquent, vous devrez le faire manuellement.
Exemple de déploiement
Le référentiel de scripts contient le script Deploy-Send-RAIDtoGLPI.ps1 qui téléchargera l'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 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
Maintenant, en allant sur GLPI dans le menu "Paramètres" -> "Composants" -> "Disques durs", nous pouvons cliquer sur les modèles de lecteurs et voir leur numéro afin de comprendre ce que nous devons acheter.