Monitoraggio dello storage IBM Storwize con Zabbix

In questo articolo parleremo un po' del monitoraggio dello storage IBM Storwize e di altri storage che supportano i protocolli CIM/WBEM. La necessità di tale monitoraggio è considerata un'assioma, quindi non ne discuteremo ulteriormente. Utilizzeremo Zabbix come sistema di monitoraggio.

Nelle ultime versioni di Zabbix, l'azienda ha iniziato a prestare maggiore attenzione ai modelli — sono stati creati modelli per il monitoraggio dei servizi, dei DBMS, dell'hardware dei server (IMM/iBMC) tramite IPMI. Il monitoraggio dello storage rimane tuttavia al di fuori dei modelli predefiniti, pertanto per integrare Zabbix con le informazioni sullo stato e le prestazioni dei componenti dello storage è necessario utilizzare modelli personalizzati. Uno di questi modelli viene presentato alla vostra attenzione.

Iniziamo con un po' di teoria.

Per accedere allo stato e alle statistiche dello storage IBM Storwize, è possibile utilizzare:

  1. Protocolli CIM/WBEM;
  2. RESTful API (supportato in IBM Storwize a partire dalla versione software 8.1.3);
  3. SNMP Traps (set di trap limitato, senza statistiche);
  4. Connessione SSH con successiva operazione remota adatta per script bash poco impegnativi.

Chi è interessato può approfondire i vari metodi di monitoraggio nelle sezioni pertinenti della documentazione del fornitore, nonché nel documento IBM Spectrum Virtualize scripting.

Utilizzeremo i protocolli CIM/WBEM, che consentono di ottenere i parametri di funzionamento dello storage senza modifiche significative del software per vari storage. I protocolli CIM/WBEM operano secondo Storage Management Initiative Specification (SMI-S). La Storage Management Initiative - Specification si basa su standard aperti CIM (Common Information Model) e WBEM (Web-Based Enterprise Management), definiti da Distributed Management Task Force.

WBEM opera sopra il protocollo HTTP. Tramite WBEM è possibile interagire non solo con lo storage, ma anche con HBA, switch e librerie di nastri.

Secondo SMI Architecture e Determine Infrastructure, il componente principale dell'implementazione SMI è il server WBEM, che gestisce le richieste CIM-XML dai client WBEM (in questo caso, dagli script di monitoraggio):

Monitoraggio dello storage IBM Storwize con Zabbix

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

Secondo www.snia.org/pywbem, per accedere allo storage attraverso 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 e condurre varie operazioni con un server WBEM che opera secondo le specifiche SMI-S o altre specifiche CIM.

Per connettersi al server WBEM utilizziamo il costruttore della classe WBEMConnection:

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

Questa è una connessione virtuale, poiché CIM-XML/WBEM opera sopra HTTP; la connessione reale avviene al momento della chiamata ai metodi per l'istanza della classe WBEMConnection. In conformità con le Best Practices e Performance Guidelines di IBM System Storage SAN Volume Controller and Storwize V7000 (Esempio C-8, p. 412), utilizzeremo "root/ibm" come namespace CIM per lo storage IBM Storwize.

Si prega di notare che per raccogliere statistiche tramite il protocollo CIM-XML/WBEM, è necessario includere l'utente nel gruppo di sicurezza appropriato. In altri casi, l'output degli attributi dell'istanza della classe sarà vuoto durante l'esecuzione di richieste WBEM..

Per accedere alle statistiche dello storage, l'utente che chiama il costruttore WBEMConnection(), deve avere diritti almeno di RestrictedAdmin (disponibile per code_level > 7.8.0) o di Administrator (non consigliato per motivi di sicurezza).

Ci connettiamo allo storage tramite SSH e controlliamo i numeri dei gruppi:

> 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    

Aggiungiamo l'utente zabbix al gruppo necessario:

> chuser -usergrp 5 zabbix

Inoltre, in conformità con le Best Practices e Performance Guidelines di IBM System Storage SAN Volume Controller and Storwize V7000 (p. 415), è necessario abilitare la raccolta di statistiche sullo storage. In tal modo, per raccogliere statistiche ogni minuto:

> startstats -interval 1 

Controlliamo:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

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

Esempio:

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

Per ottenere i valori dei parametri dello storage, è destinato il metodo EnumerateInstances() della classe WBEMConnection, che restituisce un elenco di istanze CIMInstance().

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 gran numero di istanze, come IBMTSSVC_StorageVolume, una richiesta completa di tutte le istanze può essere piuttosto lenta. Può generare grandi volumi di dati che devono essere preparati dalla SAN, trasferiti tramite rete e elaborati da uno script. A tal fine, esiste un metodo ExecQuery(), che consente di ottenere solo le proprietà di interesse dell'istanza della classe. Questo metodo prevede l'uso di un linguaggio di query simile a SQL - sia CIM Query Language (DMTF:CQL) sia WBEM Query Language (WQL), per interrogare gli oggetti CIM della SAN:

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

Per determinare quali classi ci servono per ottenere i parametri degli oggetti della SAN, leggiamo la documentazione, ad esempio Come i concetti di sistema si mappano ai concetti CIM.

Quindi, per ottenere i parametri (non i contatori di prestazioni) dei dischi fisici (Disk Drives) interrogheremo la classe IBMTSSVC_DiskDrive, per ottenere i parametri dei volumi - classe IBMTSSVC_StorageVolume, per ottenere i parametri degli array - classe IBMTSSVC_Array, per ottenere i parametri degli MDisks - classe IBMTSSVC_BackendVolume e così via.

Per quanto riguarda le prestazioni, possiamo leggere Diagrammi funzionali dell'agente Common Information Model (specificamente - Sottoprofilo delle prestazioni del server blocchi) e IBM System Storage SAN Volume Controller e Storwize V7000 Best Practices and Performance Guidelines (Esempio C-11, p. 415).

Per raccogliere statistiche della SAN sui volumi, è necessario specificare come valore del parametro ClassName IBMTSSVC_StorageVolumeStatistics. Le proprietà necessarie per la raccolta delle statistiche della classe IBMTSSVC_StorageVolumeStatistics possono essere visualizzate in Statistiche dei nodi.

Inoltre, per analizzare le prestazioni possiamo utilizzare le classi IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Per registrare dati nel sistema di monitoraggio utilizzeremo il meccanismo zabbix traps, implementato in python nel modulo py-zabbix. Struttureremo le classi della SAN e le loro proprietà in un dizionario in formato JSON.

Carichiamo il modello sul server Zabbix, assicuriamo che dal server di monitoraggio ci sia accesso alla SCSI tramite il protocollo WEB (TCP/5989), posizioniamo i file di configurazione, gli script di rilevamento e monitoraggio sul server di monitoraggio. A seguire, aggiungiamo al pianificatore l'avvio degli script. In conclusione: rileviamo gli oggetti SCSI (array, dischi fisici e virtuali, enclosures e molto altro), li inviamo a Zabbix discoveries, leggiamo lo stato dei loro parametri, leggiamo le statistiche sulle prestazioni (performance counters) e trasferiamo tutto questo agli Zabbix Items del nostro modello.

Il modello Zabbix, gli script Python, la struttura delle classi SCSI e le loro proprietà, così come esempi di file di configurazione, possono essere essere trovati qui.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster