Vo svojej práci často zažívam obsesie týkajúce sa nedostatku informácií o infraštruktúre, a pri zvyšovaní množstva spravovaných serverov sa to mení na skutočnú mučivú skúsenosť. Ešte aj keď som administrátoroval v malých organizáciách, vždy som chcel vedieť, čo kde je, kam je pripojené, kto z ľudí zodpovedá za ktoré zariadenie alebo službu, a čo je najdôležitejšie – zaznamenávať v tom všetkom zmeny. Keď prídete na nové miesto a stretnete sa s nejakým incidentom, veľa času sa stráca práve na hľadanie týchto informácií. Ďalej sa podelím o to, s čím som sa stretol v RuVDS a ako som vyriešil problém, ktorý som naznačil v názve.
Pozadie
Ako enterprise administrátor som mal málo skúseností s prácou v dátovom centre, ale z okrajového pohľadu som videl RackTables. V ňom bola prehľadne prezentovaná skriňa so všetkými servermi, UPS, prepínačmi a všetkými spojeniami medzi nimi. V RuVDS takýto systém neexistoval, iba Excel/papierové súbory s informáciami o serveroch, ich niektorých komponentoch, číslach skriniek a podobne. Pri takomto prístupe je veľmi ťažké sledovať zmeny a drobné komponenty. A predsa najdôležitejším a často meneným spotrebným materiálom serverov sú disky. Je veľmi dôležité udržiavať aktuálne informácie o stave diskov a ich strategickej zásobe. Ak disk vypadne z RAID poľa a nebude rýchla náhrada, môže to v konečnom dôsledku viesť k fatálnym následkom. Preto potrebujeme systém, ktorý sleduje umiestnenie diskov a ich stav, aby sme pochopili, čo nám môže chýbať a aké modely je potrebné zakúpiť.
Na pomoc prišiel GLPI, produkt s otvoreným zdrojovým kódom, navrhnutý na zlepšenie práce IT oddelení a ich privedenie k ideálom ITIL. Obsahuje okrem inventarizácie zariadení a manažmentu skriniek aj databázu znalostí, servisný stôl, správu dokumentov a mnoho ďalšieho. GLPI má množstvo pluginov, vrátane FusionInventory a OCS Inventory, ktoré umožňujú automaticky zbierať informácie o počítačoch a iných zariadeniach prostredníctvom inštalácie agentov a cez SNMP. Podrobnejšie informácie o inštalácii GLPI a pluginov nájdete v iných článkoch, najlepšie – . Môžete ho nainštalovať u nás na hostingu na už pripravenú šablónu .
Avšak po nasadení agenta otvoríme komponenty počítača v GLPI a uvidíme toto:

Problém je v tom, že žiadny z pluginov nemôže získať informácie o fyzických diskoch v RAID poliach LSI. Vidieť, ako bol tento problém vyriešený pre monitoring v Zabbix pomocou PowerShell skriptu rozhodol som sa napísať podobný pre prenos informácií do GLPI.
Údaje o diskoch v poli je možné získať pomocou utilít od výrobcu ovládača, v prípade LSI je to StorCLI. Z nej môžeme získať údaje vo formáte JSON, spracovať ich a preniesť do API GLPI. Disky budeme prepojiť s počítačmi, ktoré už vytvoril FusionInventory. Pri opakovanom spustení skriptu sa údaje o diskoch aktualizujú a pridajú nové. Samotný skript Send-RAIDtoGLPI.ps1 sa nachádza . Ďalej vám poviem, ako ho využiť.
Čo bude potrebné
- verzia 9.5.1 (na tejto som testoval)
- Plug-in a agent pod Windows
- Windows 2012 R2 (a vyššie) ako hostiteľský systém alebo management-VM s pripojeným ovládačom, PowerShell verzie 4 alebo vyššej
- Nainštalovaný ovládač MegaRAID
- Modul pre PowerShell —
- Účet v GLPI s Admin profilom pre autorizáciu cez API, vygenerované UserToken a AppToken
Dôležitý bod. V GLPI sú z nejakého dôvodu 2 rôzne entity pre model disku, ale chýba vlastnosť „typ nosiča“. Preto som pre zápis vlastností HDD a SSD rozhodol použiť rozbaľovaciu ponuku „Modely pevných diskov“ (front/devicemodel.php?itemtype=DeviceHardDriveModel). Pre skript je potrebné, aby sa tieto hodnoty nachádzali v databáze GLPI, inak nebude môcť zapisovať údaje o modeli disku. Preto je potrebné najprv do tohto prázdneho zoznamu pridať HDD, potom SSD, aby ID týchto prvkov v databáze vyšli 1 a 2. Ak budú iné, nahraďte v tomto riadku skriptu Send-RAIDtoGLPI.ps1 po HDD a SSD namiesto 1 a 2 príslušnými ID:
deviceharddrivemodels_id = switch ($MediaType) { "HDD" { "1" }; "SSD" { "2" }; default { "" } }Ak sa s týmto nechcete zaoberať alebo máte tento rozbaľovací zoznam použitý inak, môžete jednoducho odstrániť túto časť skriptu.
Tiež je potrebné pridať stavy pre disky v „Stavoch prvkov“ (/front/state.php). Pridal som stavy „MediaError“ (ak bola aspoň jedna chyba pri prístupe k disku) a „OK“, riadok v skripte, kde sú prenášané ich ID, „2“ pre „OK“ a „1“ pre „MediaError“:
states_id = switch ($MediaError) { 0 { "2" }; { $_ -gt 0 } { "1" } }Tieto stavy sú potrebné pre pohodlnosť, ak tieto vlastnosti nepotrebujete, môžete tiež celý tento riadok skriptu odstrániť.
V samotnom skripte nezabudnite uviesť premenné na vaše. $GlpiCreds musí obsahovať URL na server API GLPI, UserToken a AppToken.
Čo je v skripte
Kvôli objemnému JSON-parsovaniu a dlhým if-om je skript ťažšie čitateľný, preto opíšem jeho logiku tu.
Pri prvom spustení na hoste skript prechádza všetkými kontrolérmi a hľadá disky v databáze GLPI podľa sériových čísel, ak ich nenájde, hľadá model. Ak nenájde ani model, pridá model nového disku do GLPI a zapíše tento disk do databázy.
Pri každom novom spustení sa skript pokúša objaviť nové disky, ale odstrániť chýbajúce disky nevie, takže to budete musieť urobiť manuálne.
Príklad nasadenia
V repozitári skriptu je skript Deploy-Send-RAIDtoGLPI.ps1, ktorý stiahne ZIP-archív s potrebnými súbormi z nášho servera GLPI a rozbalí ich na každom hoste.
Po skopírovaní súborov skript nainštaluje agenta FusionInventory s nastavením na spúšťanie ako dennú úlohu a vytvorí takú istú úlohu pre náš skript. Po úspešnom nasadení konečne uvidíme disky v sekcii „Komponenty“ počítača v GLPI.
Výsledok
Teraz, keď sa prihlásime do GLPI v menu „Nastavenia“ -> „Komponenty“ -> „Pevné disky“, môžeme kliknúť na modely diskov a sledovať ich počet, aby sme pochopili, čo potrebujeme zakúpiť.

Zdroj: habr.com
