In questo articolo parleremo del monitoraggio dello storage IBM Storwize e di altri storage che supportano i protocolli CIM/WBEM. La necessità di tale monitoraggio è un dato di fatto e la daremo per scontata. Useremo Zabbix come sistema di monitoraggio.
Nelle ultime versioni di Zabbix, l'azienda ha dedicato molta più attenzione ai template — sono stati introdotti template per il monitoraggio di servizi, DBMS, hardware dei server (IMM/iBMC) tramite IPMI. Il monitoraggio dello storage rimane ancora al di fuori dei template di default, quindi per integrare in Zabbix le informazioni sullo stato e sulle performance dei componenti dello storage è necessario utilizzare template personalizzati. Uno di questi template vi propongo.
Iniziamo con un po' di teoria.
Per accedere allo stato e alle statistiche dello storage IBM Storwize, è possibile utilizzare:
- Protocolli CIM/WBEM;
- (in IBM Storwize supportato a partire dalla versione software 8.1.3);
- SNMP Traps (set limitato di trap, senza statistiche);
- Collegamento tramite SSH con successivo accesso remoto .
Gli interessati possono approfondire i vari metodi di monitoraggio nelle sezioni appropriate della documentazione del fornitore, oltre che nel documento .
Utilizzeremo i protocolli CIM/WBEM, che consentono di raccogliere parametri di funzionamento dello storage senza significative modifiche al software per diversi sistemi di storage. I protocolli CIM/WBEM operano in conformità con . La Storage Management Initiative – Specification si basa su standard aperti e , definiti da .
WBEM opera sopra il protocollo HTTP. Attraverso WBEM è possibile lavorare non solo con lo storage, ma anche con HBA, switch e librerie a nastro.
Secondo e , il componente principale dell'implementazione SMI è il server WBEM, che gestisce le richieste CIM-XML dai client WBEM (nel nostro caso — dagli script di monitoraggio):

CIM è un modello orientato agli oggetti basato sul Unified Modeling Language (UML).
Gli elementi gestiti sono definiti come classi CIM, le quali hanno proprietà e metodi per rappresentare i dati e le funzioni gestite.
Secondo , per accedere allo storage SAN tramite CIM/WBEM è possibile utilizzare PyWBEM — una libreria open source scritta in Python, che fornisce agli sviluppatori e agli amministratori di sistema l'implementazione del protocollo CIM per accedere agli oggetti CIM e per eseguire varie operazioni con il server WBEM, che opera secondo 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 dell'invocazione dei metodi per l'istanza della classe WBEMConnection. In conformità con le Best Practices e le Linee Guida sulle Prestazioni di IBM System Storage SAN Volume Controller e Storwize V7000 (Esempio C-8, pagina 412), utilizzeremo «root/ibm» come namespace CIM per lo storage SAN IBM Storwize.
Si prega di notare che per raccogliere statistiche tramite il protocollo CIM-XML/WBEM, è necessario includere l'utente nel gruppo di sicurezza corrispondente. In caso contrario, durante l'esecuzione delle richieste WBEM, l'output degli attributi dell'istanza della classe sarà vuoto..
Per accedere alle statistiche dello storage SAN, l'utente con cui viene invocato il costruttore , deve possedere diritti di almeno RestrictedAdmin (disponibile per code_level > 7.8.0) o Administrator (non consigliato per motivi di sicurezza).
Colleghiamo allo storage attraverso 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 corretto:
> chuser -usergrp 5 zabbix
Inoltre, secondo le Best Practices e Performance Guidelines di IBM System Storage SAN Volume Controller e Storwize V7000 (pagina 415), è necessario attivare la raccolta delle statistiche sullo storage. Quindi, per raccogliere statistiche ogni minuto:
> startstats -interval 1
Controllando:
> 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ò risultare piuttosto lenta. Potrebbe generare grandi volumi di dati che devono essere preparati dall'archiviazione, trasferiti attraverso la rete e elaborati dallo script. A tal proposito, esiste un metodo , che consente di ottenere solo le proprietà rilevanti dell'istanza della classe. Questo metodo prevede l'uso di un linguaggio di query, simile a SQL — sia CIM Query Language (DMTF:CQL) che WBEM Query Language (WQL), per interrogare gli oggetti CIM dell'archiviazione:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
Per determinare quali classi sono necessarie per ottenere i parametri degli oggetti dell'archiviazione, consultiamo la documentazione, ad esempio .
Pertanto, 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 maggiori informazioni sulle prestazioni, puoi consultare (in particolare — ) e le Linee Guida sulle Migliori Pratiche e Prestazioni di IBM System Storage SAN Volume Controller e Storwize V7000 (Esempio C-11, p. 415).
Per ottenere statistiche dell'archiviazione su Volumes, è necessario specificare il parametro ClassName con il valore IBMTSSVC_StorageVolumeStatistics. Le proprietà necessarie per raccogliere le statistiche della classe IBMTSSVC_StorageVolumeStatistics possono essere consultate in .
Inoltre, per analizzare le prestazioni è possibile utilizzare le classi IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
Per registrare i dati nel sistema di monitoraggio utilizzeremo il meccanismo , implementato in python nel modulo . La struttura delle classi dell'archiviazione e delle loro proprietà sarà sistemata in un dizionario in formato JSON.
Carichiamo il template sul server Zabbix, assicurandoci che ci sia accesso all'SAN dal server di monitoraggio tramite il protocollo WEB (TCP/5989), posizioniamo i file di configurazione, gli script di rilevamento e monitoraggio sul server di monitoraggio. Successivamente, aggiungiamo la pianificazione dell'esecuzione degli script. Infine: rileviamo gli oggetti SAN (array, dischi fisici e virtuali, enclosures e molto altro), li trasferiamo alle scoperte di Zabbix, leggiamo lo stato dei loro parametri, raccogliamo le statistiche sulle prestazioni (performance counters) e trasferiamo tutto questo agli Zabbix Items del nostro template.
Il template Zabbix, gli script Python, la struttura delle classi SAN e le loro proprietà, così come esempi di file di configurazione possono .
Fonte: habr.com
