Monitoraggio dello storage IBM Storwize con Zabbix

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:

  1. Protocolli CIM/WBEM;
  2. RESTful API (in IBM Storwize supportato a partire dalla versione software 8.1.3);
  3. SNMP Traps (set limitato di trap, senza statistiche);
  4. Collegamento tramite SSH con successivo accesso remoto adatto per script bash lenti.

Gli interessati possono approfondire i vari metodi di monitoraggio nelle sezioni appropriate della documentazione del fornitore, oltre che nel documento Scripting di IBM Spectrum Virtualize.

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 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. Attraverso WBEM è possibile lavorare non solo con lo storage, ma anche con HBA, switch e librerie a nastro.

Secondo Architettura SMI e Determina l'infrastruttura, 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):

Monitoraggio dello storage IBM Storwize con Zabbix

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 www.snia.org/pywbem, 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 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 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 WBEMConnection(), 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 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ò 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 ExecQuery(), 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 How system concepts map to CIM concepts.

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 Functional diagrams of the Common Information Model agent (in particolare — Sottoprofilo delle prestazioni del server di blocco) 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 Statistiche del Nodo.

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 trappole zabbix, implementato in python nel modulo py-zabbix. 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 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