In mijn werk ervaar ik vaak obsesses over het gebrek aan informatie over de infrastructuur, en naarmate het aantal beheerde servers toeneemt, wordt dit een echte marteling. Zelfs toen ik in kleine organisaties adminstrator was, wilde ik altijd weten wat waar staat, waar alles is aangesloten, wie verantwoordelijk is voor welke hardware of service, en vooral ā veranderingen in dit alles documenteren. Wanneer je op een nieuwe plek komt en met een incident geconfronteerd wordt, kost het veel tijd om deze informatie te vinden. Hieronder zal ik beschrijven met wat voor situatie ik bij RuVDS te maken kreeg en hoe ik het probleem dat in de titel is genoemd oploste.
Achtergrond
Als enterprise admin had ik weinig ervaring in een datacenter, maar zag ik RackTables wel van een afstandje. Daarin werd de rack met alle servers, UPS'en, switches en alle verbindingen tussen hen duidelijk gepresenteerd. Bij RuVDS was er zo'n systeem niet; alleen Excel-/papierbestanden met informatie over servers, enkele componenten, racknummers, enz. Met zo'n aanpak is het erg moeilijk om veranderingen en kleine componenten bij te houden. Daarbij is de belangrijkste en vaak vervangbare verbruiksgoederen van servers ā de schijven. Het is heel belangrijk om actuele informatie te hebben over de toestand van de schijven en hun strategische reserve. Als een schijf uit de RAID-array valt en er geen snelle vervanging beschikbaar is, kan dat uiteindelijk leiden tot fatale gevolgen. Daarom hebben we echt een systeem nodig dat de locatie en toestand van de schijven bijhoudt, zodat we kunnen begrijpen wat er misschien ontbreekt en welke modellen we moeten aanschaffen.
GLPI kwam te hulp, een open-source product dat is gemaakt om de werking van IT-afdelingen te verbeteren en hen naar de idealen van ITIL te leiden. Het bevat behalve hardware-inventarisatie en rackmanagement ook een kennisbank, servicedesk, documentbeheer en nog veel meer. GLPI heeft veel plugins, waaronder FusionInventory en OCS Inventory, die het mogelijk maken om automatisch informatie over computers en andere apparaten te verzamelen door agenten te installeren en via SNMP. Meer over de installatie van GLPI en de plugins kun je in andere artikelen lezen, het beste ā . Je kunt het bij ons op de hosting installeren op een al voorbereide sjabloon .
Echter, na het uitrollen van de agent zullen we de computercomponenten in GLPI openen en dit zien:

Het probleem is dat geen van de plugins informatie over fysieke schijven in LSI RAID-arrays kan zien. Kijkend naar hoe dit probleem is opgelost voor monitoring in Zabbix met behulp van een PowerShell-script heb ik besloten een soortgelijk script te schrijven om informatie naar GLPI te verzenden.
Gegevens over de schijven in de array kunnen worden verkregen met behulp van tools van de fabrikant van de controller, in het geval van LSI is dat StorCLI. Hieruit kunnen gegevens in JSON-formaat worden verkregen, geparsed en naar de GLPI API worden doorgegeven. We zullen de schijven koppelen aan de computers die FusionInventory al heeft aangemaakt. Bij een herhaalde uitvoering zal het script de gegevens over de schijven bijwerken en nieuwe toevoegen. Het script Send-RAIDtoGLPI.ps1 bevindt zich . Vervolgens zal ik uitleggen hoe je het kunt gebruiken.
Wat heb je nodig
- versie 9.5.1 (hierop is getest)
- Plugin en een agent voor Windows
- Windows 2012 R2 (of hoger) als host-systeem, of een management-VM met de controller erin doorgegeven, PowerShell versie 4 of hoger
- GeĆÆnstalleerde MegaRAID-driver
- Module voor PowerShell ā
- Een account in GLPI met Admin-profiel voor autorisatie via de API, gegenereerde UserToken en AppToken
Een belangrijk punt. In GLPI zijn er om een of andere reden 2 verschillende entiteiten voor het schijfmodel, maar er is geen eigenschap 'opslagmediumtype'. Daarom heb ik besloten om de eigenschappen HDD en SSD op te nemen in de dropdownlijst 'Modellen van harde schijven' (front/devicemodel.php?itemtype=DeviceHardDriveModel). Voor het script is het noodzakelijk dat deze waarden in de GLPI-database aanwezig zijn, anders kan het geen gegevens over het schijfmodel opslaan. Daarom moet je eerst HDD en dan SSD in deze lege lijst invoeren, zodat de ID's van deze elementen in de database 1 en 2 worden. Als er andere zijn, vervang dan in deze regel van het script Send-RAIDtoGLPI.ps1 na HDD en SSD de respectievelijke ID's door 1 en 2:
deviceharddrivemodels_id = switch ($MediaType) { "HDD" { "1" }; "SSD" { "2" }; default { "" } }Als je hier geen zin in hebt of als je deze dropdownlijst anders gebruikt, kun je gewoon deze regel uit het script verwijderen.
Er moeten ook statussen voor de schijven worden toegevoegd in 'Statussen van elementen' (front/state.php). Ik heb de statussen 'MediaError' (er was ten minste ƩƩn fout bij het benaderen van de schijf) en 'OK' toegevoegd, de regel in het script waarin hun ID's worden doorgegeven, '2' voor 'OK' en '1' voor 'MediaError':
states_id = switch ($MediaError) { 0 { "2" }; { $_ -gt 0 } { "1" } }Deze statussen zijn nodig voor het gemak; als je deze eigenschappen niet nodig hebt, kun je ook deze regel geheel verwijderen.
Vergeet in het script niet om de variabelen aan te passen naar die van jou. $GlpiCreds moet de URL naar de GLPI API-server, UserToken en AppToken bevatten.
Wat er in het script staat
Door de uitgebreide JSON-parsing en de rijen met if-statements is het script moeilijk leesbaar, daarom beschrijf ik hier de logica.
Bij de eerste uitvoering op de host doorloopt het script alle controllers en zoekt het naar schijven in de GLPI-database op basis van serienummers; als het niets vindt, zoekt het naar het model. Als het ook het model niet vindt, wordt het model van de nieuwe schijf aan GLPI toegevoegd en wordt deze schijf in de database opgeslagen.
Bij elke nieuwe uitvoering zal het script proberen nieuwe schijven te detecteren, maar het kan ontbrekende schijven niet verwijderen, dus dat moet handmatig gebeuren.
Voorbeeld van implementatie
In de scriptrepository bevindt zich het script Deploy-Send-RAIDtoGLPI.ps1, dat een ZIP-archief met de benodigde bestanden van onze GLPI-server downloadt en deze op elke host uitpakt.
Na het kopiƫren van de bestanden zal het script de FusionInventory-agent installeren met een dagelijkse taakactivatie en eenzelfde taak voor ons script aanmaken. Na een succesvolle implementatie kunnen we eindelijk de schijven zien in de sectie 'Componenten' van de computer in GLPI.
Resultaat
Nu, door in GLPI naar het menu 'Instellingen' -> 'Componenten' -> 'Harde schijven' te gaan, kunnen we op de schijfmodellen klikken en kijken naar hun aantal om te begrijpen wat we moeten aanschaffen.

Bron: habr.com
