U ovom članku malo ćemo razgovarati o nadzoru IBM Storwize SAN-a i drugih SAN-ova koji podržavaju CIM/WBEM protokole. Potreba za takim nadzorom ostaje izvan rasprave, smatrat ćemo to aksiomom. Kao sustav nadzora koristit ćemo Zabbix.
U posljednjim verzijama Zabbixa, tvrtka je počela posvećivati mnogo više pažnje predlošcima — pojavili su se predlošci za nadzor usluga, DBMS-a, Servers hardware (IMM/iBMC) putem IPMI-a. Nadzor SAN-a još uvijek ostaje izvan unaprijed pripremljenih predložaka, stoga je za integraciju informacija o statusu i performansama komponenti SAN-a u Zabbix potrebno koristiti prilagođene predloške. Jedan od takvih predložaka predlažem vašoj pažnji.
Prvo malo teorije.
Za pristup statusu i statistici SAN-a IBM Storwize možete koristiti:
- CIM/WBEM protokole;
- (podržava se u IBM Storwize počevši od verzije softvera 8.1.3);
- SNMP Trap-ove (ograničen skup trap-ova, nema statistike);
- Povezivanje putem SSH uz daljinsko .
Zainteresirani mogu detaljnije upoznati različite metode nadzora u odgovarajućim odjeljcima dokumentacije dobavljača, kao i u dokumentu .
Koristit ćemo CIM/WBEM protokole koji omogućuju dobivanje parametara rada SAN-a bez značajnih promjena u softveru za različite SAN-ove. CIM/WBEM protokoli rade u skladu s . Storage Management Initiative – Specifikacija se temelji na otvorenim standardima i , definiranim .
WBEM radi preko HTTP protokola. Kroz WBEM se može raditi ne samo s SAN-om, već i s HBA, prekidačima i trakastim bibliotekama.
Prema i , osnovna komponenta implementacije SMI je WBEM server koji obrađuje CIM-XML zahtjeve od WBEM klijenata (u našem slučaju — od skripti za nadzor):

CIM je objektno-orijentirani model temeljen na Unified Modeling Language (UML).
Upravljani elementi definiraju se kao CIM klase koje imaju svojstva i metode za predstavljanje upravljanih podataka i funkcija.
Prema , za pristup SCSI uređaju putem CIM/WBEM može se koristiti PyWBEM — open source biblioteka, napisana na Pythonu, koja omogućuje programerima i sistemskim administratorima implementaciju CIM protokola za pristup CIM-objektima i izvođenje raznih operacija s WBEM-serverom koji radi prema SMI-S ili drugim CIM-specifikacijama.
Za povezivanje s WBEM-serverom koristimo konstruktor klase :
conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
namespace, no_verification=True)
To je virtualna veza, s obzirom na to da CIM-XML/WBEM radi preko HTTP-a, stvarna veza se događa u trenutku pozivanja metoda za instancu klase WBEMConnection. U skladu s IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (Primjer C-8, str. 412), kao CIM namespace za SCSI uređaj IBM Storwize koristit ćemo «root/ibm».
Napomena: za prikupljanje statistike o protokolu CIM-XML/WBEM, potrebno je uključiti korisnika u odgovarajuću sigurnosnu grupu. U suprotnom, pri izvršavanju WBEM-zahtjeva, izlaz atributa instance klase će biti prazan..
Za pristup statistici SCSI uređaja korisnik koji poziva konstruktor , mora imati prava barem RestrictedAdmin (dostupno za code_level > 7.8.0) ili Administrator (ne preporučujem zbog sigurnosnih razloga).
Povezujemo se s SCSI uređajem putem SSH i provjeravamo 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
Dodajemo korisnika zabbix u potrebnu grupu:
> chuser -usergrp 5 zabbix
Osim toga, u skladu s IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (str. 415) potrebno je uključiti prikupljanje statistike na SCSI uređaju. Dakle, za prikupljanje statistike svake minute:
> startstats -interval 1
Provjeravamo:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
Kako bismo dobili sve postojeće klase SCSI uređaja, potrebno je koristiti metodu EnumerateClassNames().
Primjer:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
Za dobivanje vrijednosti parametara SCSI uređaja namijenjena je metoda klasa WBEMConnection, koja vraća popis instanci .
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, poput IBMTSSVC_StorageVolume, potpuni upit svih instanci može biti prilično spor. Može generirati velike količine podataka koje treba pripremiti za pohranu, prenijeti putem mreže i obraditi skriptom. U tom slučaju postoji metoda , koja omogućava dobivanje samo onih svojstava instance klase koja nas zanimaju. Ova metoda podrazumijeva korištenje jezika upita sličnog SQL-u — ili CIM Query Language (DMTF:CQL) ili WBEM Query Language (WQL) za upit CIM objekata pohrane:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
Kako bismo odredili koje klase trebamo za dobivanje parametara objekata pohrane, čitamo dokumentaciju, na primjer .
Dakle, za dobivanje parametara (ne brojčanika performansi) fizičkih diskova (Disk Drives) anketirat ćemo klasu IBMTSSVC_DiskDrive, za dobivanje parametara volumena — klasu IBMTSSVC_StorageVolume, za dobivanje parametara nizova — klasu IBMTSSVC_Array, za dobivanje parametara MDisks — klasu IBMTSSVC_BackendVolume itd.
O performansama se može pročitati (konkretno — ) i IBM System Storage SAN Volume Controller i Storwize V7000 najbolji postupci i smjernice za performanse (Primjer C-11, str. 415).
Za dobivanje statistike pohrane za volumene, potrebno je kao vrijednost parametra ClassName navesti IBMTSSVC_StorageVolumeStatistics. Potrebna svojstva klase IBMTSSVC_StorageVolumeStatistics za prikupljanje statistike mogu se pogledati u .
Također, za analizu performansi mogu se koristiti klase IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
Za upis podataka u sustav praćenja koristit ćemo mehanizam , implementiran u python modulu . Strukturu klasa pohrane i njihovih svojstava smjestit ćemo u rječnik u JSON formatu.
Učitavamo predložak na Zabbix server, osiguravamo da postoji pristup STH-u s poslužitelja za nadzor putem WEB protokola (TCP/5989), postavljamo konfiguracijske datoteke, skripte za otkrivanje i nadzor na poslužitelju za nadzor. Zatim dodajemo pokretanje skripti u planer zadataka. Na kraju: otkrivamo objekte STH-a (matrice, fizički i virtualni diskovi, kućišta i još mnogo toga), prenesemo ih u Zabbix otkrića, očitavamo status njihovih parametara, očitavamo statistiku performansi (performanse brojača), sve to šaljemo u odgovarajuće Zabbix stavke našeg predloška.
Predložak Zabbix, python skripte, struktura klasa STH-a i njihovih svojstava, kao i primjeri konfiguracijskih datoteka su dostupni .
Izvor: habr.com
