Monitorizarea sistemelor de stocare IBM Storwize cu ajutorul Zabbix

În acest articol, vom discuta puțin despre monitorizarea sistemelor de stocare IBM Storwize și alte sisteme de stocare care suportă protocoalele CIM/WBEM. Necesitatea unei astfel de monitorizări este lăsată deoparte, vom considera că este o axiomă. Ca sistem de monitorizare, vom folosi Zabbix.

În versiunile recente ale Zabbix, compania a început să acorde mult mai multă atenție șabloanelor — au apărut șabloane pentru monitorizarea serviciilor, SGBD-urilor, hardware-ului serverelor (IMM/iBMC) prin IPMI. Monitorizarea sistemelor de stocare rămâne în continuare în afara șabloanelor standard, așa că, pentru a integra în Zabbix informații despre starea și performanța componentelor sistemului de stocare, este necesar să folosiți șabloane personalizate. Un astfel de șablon îl propun spre atenția dumneavoastră.

Mai întâi, puțină teorie.

Pentru acces la starea și statistica sistemului de stocare IBM Storwize, se pot utiliza:

  1. Protocoalele CIM/WBEM;
  2. RESTful API (în IBM Storwize este suportat începând cu versiunea software 8.1.3);
  3. SNMP Traps (set limitat de trap-uri, fără statistici);
  4. Conectare prin SSH urmată de acces remote potrivit pentru scripting bash mai lent.

Cei interesați pot să se familiarizeze în detaliu cu diversele metode de monitorizare în secțiunile corespunzătoare din documentația furnizorului, precum și în documentul IBM Spectrum Virtualize scripting.

Vom folosi protocoalele CIM/WBEM, care permit obținerea parametrilor de funcționare a sistemelor de stocare fără modificări semnificative ale software-ului pentru diferite sisteme de stocare. Protocoalele CIM/WBEM funcționează conform Storage Management Initiative Specification (SMI-S). Storage Management Initiative – Specification se bazează pe standarde deschise CIM (Common Information Model) și WBEM (Web-Based Enterprise Management), definite de Distributed Management Task Force.

WBEM funcționează pe protocolul HTTP. Prin WBEM, se poate lucra nu doar cu sistemele de stocare, ci și cu HBA, switch-uri și biblioteci de benzi.

Conform Arhitectura SMI și Determine Infrastructure, componenta principală a implementării SMI fiind serverul WBEM, care procesează cererile CIM-XML de la clienții WBEM (în cazul nostru - de la scripturile de monitorizare):

Monitorizarea sistemelor de stocare IBM Storwize cu ajutorul Zabbix

CIM este un model orientat pe obiect, bazat pe Unified Modeling Language (UML).
Elementele gestionate sunt definite sub formă de clase CIM, care au proprietăți și metode pentru a reprezenta datele și funcțiile gestionate.

Conform www.snia.org/pywbem, pentru accesul la stocarea SCSI prin CIM/WBEM, se poate folosi PyWBEM — o bibliotecă open source, scrisă în Python, care oferă dezvoltatorilor și administratorilor de sistem implementarea protocolului CIM pentru accesarea obiectelor CIM și efectuarea diferitelor operațiuni cu serverul WBEM, care funcționează conform SMI-S sau altor specificații CIM.

Pentru a vă conecta la serverul WBEM, folosiți constructorul de clasă WBEMConnection:

conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
            namespace, no_verification=True)

Aceasta este o conexiune virtuală, deoarece CIM-XML/WBEM funcționează deasupra HTTP, conexiunea reală având loc în momentul apelării metodelor pentru instanța clasei WBEMConnection. Conform IBM System Storage SAN Volume Controller și Storwize V7000 Best Practices and Performance Guidelines (Exemplul C-8, p. 412), vom folosi "root/ibm" ca namespace CIM pentru stocarea IBM Storwize.

Rețineți că pentru a colecta statisticile prin protocolul CIM-XML/WBEM, utilizatorul trebuie să fie inclus în grupul de securitate corespunzător. Altfel, la executarea cererilor WBEM, ieșirea atributelor instanței clasei va fi goală..

Pentru a accesa statisticile stocării, utilizatorul sub care se efectuează apelul constructorului WBEMConnection(), trebuie să aibă privilegii de cel puțin RestrictedAdmin (disponibil pentru code_level > 7.8.0) sau Administrator (nu recomand din motive de securitate).

Ne conectăm la stocare prin SSH și verificăm numerele grupurilor:

> 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    

Adăugăm utilizatorul zabbix în grupul necesar:

> chuser -usergrp 5 zabbix

De asemenea, conform IBM System Storage SAN Volume Controller și Storwize V7000 Best Practices și Performance Guidelines (p. 415), trebuie să activăm colectarea statisticilor pe stocare. Astfel, pentru a colecta statistici la fiecare minut:

> startstats -interval 1 

Verificăm:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Pentru a obține toate clasele existente ale stocării, trebuie folosită metoda EnumerateClassNames().

Exemplu:

classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
     print (classname)

Pentru a obține valorile parametrilor stocării, este destinată metoda EnumerateInstances() a clasei WBEMConnection, care returnează o listă de instanțe CIMInstance().

Exemplu:

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))

Pentru unele clase care conțin un număr mare de instanțe, cum ar fi IBMTSSVC_StorageVolume, interogarea completă a tuturor instanțelor poate fi destul de lentă. Aceasta poate genera volume mari de date care trebuie pregătite de sistemul de stocare, transmise prin rețea și procesate de un script. În astfel de cazuri, există o metodă ExecQuery(), care permite obținerea doar a proprietăților de interes ale instanței de clasă. Această metodă presupune utilizarea unui limbaj de interogare similar cu SQL — fie CIM Query Language (DMTF:CQL), fie WBEM Query Language (WQL), pentru interogarea obiectelor CIM ale sistemului de stocare:

request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)

Pentru a determina ce clase sunt necesare pentru a obține parametrii obiectelor de stocare, citim documentația, de exemplu Cum se corelează conceptele sistemului cu conceptele CIM.

Astfel, pentru a obține parametrii (nu contoare de performanță) pentru discurile fizice (Disk Drives), vom interoga Clasa IBMTSSVC_DiskDrive, pentru parametrii Volumes — Clasa IBMTSSVC_StorageVolume, pentru parametrii aranjamentelor — Clasa IBMTSSVC_Array, pentru parametrii MDisks — Clasa IBMTSSVC_BackendVolume etc.

Pentru informații despre performanță, se poate citi Diagrame funcționale ale agentului Common Information Model (în special — Subprofil de performanță al serverului de blocuri) și Cele mai bune practici și orientări de performanță pentru IBM System Storage SAN Volume Controller și Storwize V7000 (Exemplu C-11, pag. 415).

Pentru a obține statistici ale sistemului de stocare pentru Volumes, este necesar să specificăm IBMTSSVC_StorageVolumeStatistics ca valoare pentru parametrul ClassName. Proprietățile necesare pentru colectarea statisticii din clasa IBMTSSVC_StorageVolumeStatistics pot fi consultate în Statisticile nodului.

De asemenea, pentru analiza performanței se pot utiliza clasele IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Pentru a scrie date în sistemul de monitorizare, vom utiliza mecanismul traps zabbix, implementat în python în modulul py-zabbix. Structura claselor de stocare și a proprietăților lor va fi organizată într-un dicționar în format JSON.

Încărcăm șablonul pe serverul Zabbix, ne asigurăm că serverul de monitorizare are acces la stocarea prin protocolul WEB (TCP/5989), plasăm fișierele de configurare, scripturile de descoperire și monitorizare pe serverul de monitorizare. Apoi adăugăm în planificator lansarea scripturilor. În final: descoperim obiectele de stocare (benzi, discuri fizice și virtuale, unități și multe altele), le transferăm în Zabbix discoveries, citim statusul parametrilor lor, citim statisticile de performanță, le transferăm în elementele Zabbix corespunzătoare ale șablonului nostru.

Șablonul Zabbix, scripturile python, structura claselor de stocare și a proprietăților acestora, precum și exemplele de fișiere de configurare pot fi găsite aici.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster