Monitoraggio dei sistemi di storage IBM Storwize utilizzando Zabbix

In questo articolo parleremo un po' del monitoraggio dei sistemi di storage IBM Storwize e di altri sistemi di storage che supportano i protocolli CIM/WBEM. La necessità di tale monitoraggio viene lasciata fuori dall’equazione; lo considereremo un assioma. Utilizzeremo Zabbix come sistema di monitoraggio.

Nelle ultime versioni di Zabbix, l'azienda ha iniziato a prestare molta più attenzione ai modelli: hanno cominciato ad apparire modelli per servizi di monitoraggio, DBMS, hardware di server (IMM/iBMC) tramite IPMI. Il monitoraggio del sistema di archiviazione è ancora fuori dai modelli predefiniti, quindi per integrare le informazioni sullo stato e sulle prestazioni dei componenti di archiviazione in Zabbix, è necessario utilizzare modelli personalizzati. Porto alla tua attenzione uno di questi modelli.

In primo luogo, un po 'di teoria.

Per accedere allo stato e alle statistiche dei sistemi di storage IBM Storwize, è possibile utilizzare:

  1. protocolli CIM/WBEM;
  2. API RESTful (supportato in IBM Storwize a partire dalla versione software 8.1.3);
  3. Trappole SNMP (set limitato di trap, nessuna statistica);
  4. Connettersi tramite SSH e poi da remoto adatto per piacevoli scripting bash.

Chi è interessato può saperne di più sui vari metodi di monitoraggio nelle sezioni pertinenti della documentazione del fornitore, nonché nel documento Script IBM Spectrum Virtualize.

Utilizzeremo i protocolli CIM/WBEM, che ci consentono di ottenere parametri operativi del sistema di storage senza modifiche significative del software per diversi sistemi di storage. I protocolli CIM/WBEM operano in conformità con Specifica dell'iniziativa di gestione dello storage (SMI-S). Iniziativa di gestione dello storage: le specifiche si basano su standard aperti CIM (Modello Informativo Comune) и WBEM (gestione aziendale basata sul Web), determinato Task Force di gestione distribuita.

WBEM viene eseguito sul protocollo HTTP. Attraverso WBEM puoi lavorare non solo con i sistemi di storage, ma anche con HBA, switch e librerie di nastri.

Secondo Architettura SMI и Determinare l'infrastruttura, il componente principale dell'implementazione SMI è il server WBEM, che elabora le richieste CIM-XML dai client WBEM (nel nostro caso, dagli script di monitoraggio):

Monitoraggio dei sistemi di storage IBM Storwize utilizzando Zabbix

CIM è un modello orientato agli oggetti basato su Unified Modeling Language (UML).
Gli elementi gestiti sono definiti come classi CIM che dispongono di proprietà e metodi per rappresentare dati e funzionalità gestiti.

Secondo www.snia.org/pywbem, per accedere ai sistemi di storage tramite CIM/WBEM, è possibile utilizzare PyWBEM, una libreria open source scritta in Python, che fornisce agli sviluppatori e agli amministratori di sistema un'implementazione del protocollo CIM per accedere agli oggetti CIM ed eseguire varie operazioni con un server WBEM che opera in conformità con SMI-S o altre specifiche CIM.

Per connetterci al server WBEM utilizziamo il costruttore di classi Connessione WBEM:

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

Si tratta di una connessione virtuale, poiché CIM-XML/WBEM viene eseguito su HTTP, la connessione reale avviene quando i metodi vengono richiamati su un'istanza della classe WBEMConnection. In conformità con IBM System Storage SAN Volume Controller e Storwize V7000 Best Practices and Performance Guideline (Esempio C-8, pagina 412), utilizzeremo "root/ibm" come spazio dei nomi CIM per il sistema di storage IBM Storwize.

Tieni presente che per raccogliere statistiche tramite il protocollo CIM-XML/WBEM, devi includere l'utente nel gruppo di sicurezza appropriato. Altrimenti, durante l'esecuzione delle query WBEM, l'output degli attributi dell'istanza della classe sarà vuoto.

Per accedere alle statistiche di archiviazione, l'utente con cui viene chiamato il costruttore Connessione WBEM(), deve avere almeno i diritti RestrictedAdmin (disponibile per code_level > 7.8.0) o Amministratore (non consigliato per motivi di sicurezza).

Ci colleghiamo al sistema di storage tramite SSH e guardiamo i numeri del gruppo:

> 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    

Aggiungi l'utente zabbix al gruppo desiderato:

> chuser -usergrp 5 zabbix

Inoltre, in conformità con IBM System Storage SAN Volume Controller e Storwize V7000 Best Practices and Performance Guideline (p. 415), è necessario abilitare la raccolta di statistiche sul sistema di storage. Quindi, per raccogliere statistiche ogni minuto:

> startstats -interval 1 

Controlliamo:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Per ottenere tutte le classi di archiviazione esistenti, è necessario utilizzare il metodo EnumerateClassNames().

Esempio:

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

Il metodo viene utilizzato per ottenere i valori dei parametri del sistema di accumulo Enumera istanze() classe WBEMConnection, restituendo un elenco di istanze Istanza CIM().

Esempio:

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

Per alcune classi che contengono un numero elevato di istanze, come IBMTSSVC_StorageVolume, una query completa di tutte le istanze può essere piuttosto lenta. Può generare grandi volumi di dati che devono essere preparati dal sistema di archiviazione, trasmessi in rete ed elaborati dallo script. Esiste un metodo per un caso del genere ExecQuery(), che ci permette di ottenere solo le proprietà di un'istanza di classe che ci interessano. Questo metodo prevede l'utilizzo di un linguaggio di query simile a SQL, CIM Query Language (DMTF:CQL) o WBEM Query Language (WQL), per interrogare gli oggetti di archiviazione CIM:

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

Per determinare di quali classi abbiamo bisogno per ottenere i parametri degli oggetti di archiviazione, leggi la documentazione, ad esempio Come i concetti di sistema si associano ai concetti CIM.

Pertanto, per ottenere parametri (non contatori delle prestazioni) dei dischi fisici (unità disco) eseguiremo il polling della classe IBMTSSVC_DiskDrive, per ottenere i parametri dei volumi - Classe IBMTSSVC_StorageVolume, per ottenere i parametri dell'array - Classe IBMTSSVC_Array, per ottenere i parametri di MDisks - Classe IBMTSSVC_BackendVolume, ecc.

Per le prestazioni puoi leggere Diagrammi funzionali dell'agente Common Information Model (nello specifico - Blocca il sottoprofilo delle prestazioni del server) e IBM System Storage SAN Volume Controller e Storwize V7000 Best Practices e Linee guida sulle prestazioni (Esempio C-11, pagina 415).

Per ottenere le statistiche di archiviazione per i volumi, è necessario specificare IBMTSSVC_StorageVolumeStatistics come valore del parametro ClassName. È possibile visualizzare le proprietà della classe IBMTSSVC_StorageVolumeStatistics necessarie per la raccolta delle statistiche Statistiche dei nodi.

Inoltre, per l'analisi delle prestazioni è possibile utilizzare le classi IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Per registrare i dati nel sistema di monitoraggio utilizzeremo il meccanismo trappole zabbix, implementato in Python in un modulo py-zabbix. Inseriremo la struttura delle classi dei sistemi di storage e le loro proprietà in un dizionario in formato JSON.

Carichiamo il modello sul server Zabbix, ci assicuriamo che il server di monitoraggio abbia accesso al sistema di archiviazione tramite il protocollo WEB (TCP/5989) e inseriamo file di configurazione, script di rilevamento e monitoraggio sul server di monitoraggio. Successivamente, aggiungi l'avvio dello script allo scheduler. Di conseguenza: scopriamo oggetti di archiviazione (array, dischi fisici e virtuali, contenitori e molto altro), li trasferiamo alle scoperte Zabbix, leggiamo lo stato dei loro parametri, leggiamo le statistiche sulle prestazioni (contatori delle prestazioni), trasferiamo tutto questo allo Zabbix corrispondente Elementi del nostro modello.

È possibile utilizzare il modello Zabbix, gli script Python, la struttura delle classi di archiviazione e le loro proprietà, nonché esempi di file di configurazione trova qui.

Fonte: habr.com

Aggiungi un commento