Nadgledanje IBM Storwize skladištenja pomoću Zabbixa
U ovom članku ćemo malo govoriti o nadgledanju IBM Storwize sistema za skladištenje i drugih sistema skladištenja koji podržavaju CIM/WBEM protokole. Potreba za takvim praćenjem je izostavljena iz jednačine, ovo ćemo smatrati aksiomom. Koristićemo Zabbix kao sistem za praćenje.
U najnovijim verzijama Zabbix-a, kompanija je počela da obraća mnogo više pažnje na šablone - počeli su da se pojavljuju šabloni za usluge praćenja, DBMS, hardver servera (IMM/iBMC) preko IPMI-ja. Nadgledanje sistema za skladištenje je još uvek izvan šablona, tako da da biste integrisali informacije o statusu i performansama komponenti skladištenja u Zabbix, morate da koristite prilagođene šablone. Predstavljam vam jedan od ovih šablona.
Prvo, malo teorije.
Da biste pristupili statusu i statistici IBM Storwize sistema skladištenja, možete koristiti:
CIM/WBEM protokoli;
RESTful API (podržano u IBM Storwize počevši od softverske verzije 8.1.3);
SNMP zamke (ograničen skup zamki, bez statistike);
Zainteresovani mogu saznati više o različitim metodama praćenja u relevantnim dijelovima dokumentacije dobavljača, kao iu dokumentu IBM Spectrum Virtualize skriptiranje.
WBEM radi na vrhu HTTP protokola. Preko WBEM-a možete raditi ne samo sa sistemima za skladištenje podataka, već i sa HBA-ovima, prekidačima i bibliotekama traka.
Prema SMI Architecture и Odredite infrastrukturu, glavna komponenta SMI implementacije je WBEM server, koji obrađuje CIM-XML zahtjeve od WBEM klijenata (u našem slučaju iz skripti za praćenje):
CIM je objektno orijentirani model baziran na Unified Modeling Language (UML).
Upravljani elementi su definirani kao CIM klase koje imaju svojstva i metode za predstavljanje upravljanih podataka i funkcionalnosti.
Prema www.snia.org/pywbem, za pristup sistemima za skladištenje putem CIM/WBEM-a, možete koristiti PyWBEM – biblioteku otvorenog koda napisanu na Python-u, koja programerima i sistem administratorima pruža implementaciju CIM protokola za pristup CIM objektima i izvođenje različitih operacija sa WBEM serverom koji radi u u skladu sa SMI-S ili drugim CIM specifikacijama.
Za povezivanje sa WBEM serverom koristimo konstruktor klase WBEMConnection:
Ovo je virtuelna veza, pošto CIM-XML/WBEM radi na HTTP-u, prava veza se javlja kada se pozovu metode na instanci klase WBEMConnection. U skladu s IBM System Storage SAN kontrolerom volumena i Storwize V7000 najboljim praksama i smjernicama za performanse (Primjer C-8, stranica 412), koristit ćemo “root/ibm” kao CIM prostor imena za IBM Storwize sistem pohrane.
Imajte na umu da za prikupljanje statistike putem CIM-XML/WBEM protokola morate uključiti korisnika u odgovarajuću sigurnosnu grupu. U suprotnom, prilikom izvršavanja WBEM upita, izlaz atributa instance klase će biti prazan.
Za pristup statistici pohrane, korisnik pod kojim je pozvan konstruktor WBEMConnection(), mora imati najmanje RestrictedAdmin (dostupno za code_level > 7.8.0) ili administratorska prava (ne preporučuje se iz sigurnosnih razloga).
Povezujemo se sa sistemom za skladištenje preko SSH-a i gledamo brojeve grupa:
> lsusergrp
id name role remote
0 SecurityAdmin SecurityAdmin no
1 Administrator Administrator no
2 CopyOperator CopyOperator no
3 Service Service no
4 Monitor Monitor no
5 RestrictedAdmin RestrictedAdmin no
Dodajte zabbix korisnika u željenu grupu:
> chuser -usergrp 5 zabbix
Dodatno, u skladu s IBM System Storage SAN Volume Controller i Storwize V7000 najboljim praksama i smjernicama za performanse (p. 415), morate omogućiti prikupljanje statistike na sistemu za pohranu. Dakle, za prikupljanje statistike svake minute:
> startstats -interval 1
Provjeravamo:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
Da biste dobili sve postojeće klase skladištenja, morate koristiti metodu EnumerateClassNames().
Primjer:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
Metoda se koristi za dobivanje vrijednosti parametara sistema za skladištenje podataka EnumerateInstances() class WBEMConnection, vraćajući listu instanci CIMInstance().
Primjer:
instances = conn.EnumerateInstances(classname,
namespace=nd_parameters['name_space'])
for instance in instances:
for prop_name, prop_value in instance.items():
print(' %s: %r' % (prop_name, prop_value))
Za neke klase koje sadrže veliki broj instanci, kao što je IBMTSSVC_StorageVolume, potpuni upit svih instanci može biti prilično spor. Može generirati velike količine podataka koje mora pripremiti sistem za pohranu, prenijeti preko mreže i obraditi skriptom. Za takav slučaj postoji metoda ExecQuery(), što nam omogućava da dobijemo samo svojstva instance klase koja nas zanimaju. Ova metoda uključuje korištenje jezika upita sličnog SQL-u, bilo CIM jezika upita (DMTF:CQL) ili WBEM jezika upita (WQL), za upit CIM objekata za pohranu:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
Dakle, da bismo dobili parametre (ne brojače performansi) fizičkih diskova (Disk Drives) mi ćemo anketirati klasu IBMTSSVC_DiskDrive, da dobijemo parametre volumena - Class IBMTSSVC_StorageVolume, da dobijemo parametre niza - Class IBMTSSVC_Array, da dobijemo MDisks parametre - Class IBMVTSSVC_Back itd.
Za dobivanje statistike memorije za Volume, morate specificirati IBMTSSVC_StorageVolumeStatistics kao vrijednost parametra ClassName. Svojstva klase IBMTSSVC_StorageVolumeStatistics potrebne za prikupljanje statistike mogu se vidjeti u Statistika čvora.
Također, za analizu performansi možete koristiti klase IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
Za snimanje podataka u sistem praćenja koristićemo mehanizam zabbix traps, implementiran u Python-u u modulu py-zabbix. Strukturu klasa sistema za skladištenje i njihova svojstva postavićemo u rečnik u JSON formatu.
Šablon učitavamo na Zabbix server, uvjeravamo se da server za nadzor ima pristup sistemu za pohranu preko WEB protokola (TCP/5989) i postavljamo konfiguracijske datoteke, skripte za detekciju i praćenje na server za praćenje. Zatim dodajte pokretanje skripte u planer. Kao rezultat: otkrivamo objekte za pohranu (nizovi, fizičke i virtualne diskove, kućišta i još mnogo toga), prenosimo ih u Zabbix otkrića, čitamo status njihovih parametara, čitamo statistiku performansi (brojače performansi), prenosimo sve to u odgovarajući Zabbix Stavke našeg šablona.
Zabbix predložak, python skripte, strukturu klasa skladištenja i njihova svojstva, kao i primjere konfiguracijskih datoteka, možete pronađite ovdje.