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:
- Protocolli CIM/WBEM;
- (supportato in IBM Storwize a partire dalla versione software 8.1.3);
- SNMP Traps (set di trap limitato, senza statistiche);
- Connessione SSH con successiva operazione remota .
Chi è interessato può approfondire i vari metodi di monitoraggio nelle sezioni pertinenti della documentazione del fornitore, nonché nel documento .
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 . La Storage Management Initiative - Specification si basa su standard aperti e , definiti da .
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 e , 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):

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 , 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 :
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 , 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 della classe WBEMConnection, che restituisce un elenco di istanze .
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 , 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 .
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 (specificamente - ) 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 .
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 , implementato in python nel modulo . 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 .
Fonte: habr.com
