In diesem Artikel sprechen wir ein wenig über das Monitoring von IBM Storwize und anderen Speichersystemen, die CIM/WBEM-Protokolle unterstützen. Die Notwendigkeit eines solchen Monitorings wird als gegeben angesehen, wir betrachten dies als Axiom. Als Monitoring-System verwenden wir Zabbix.
In den neuesten Versionen von Zabbix hat das Unternehmen den Vorlagen viel mehr Aufmerksamkeit geschenkt – es gibt jetzt Vorlagen für das Monitoring von Diensten, Datenbankmanagementsystemen und Serverhardware (IMM/iBMC) über IPMI. Das Monitoring von Speichersystemen bleibt jedoch außerhalb der standardmäßigen Vorlagen, daher müssen für die Integration von Status- und Leistungsinformationen der Speichersysteme in Zabbix benutzerdefinierte Vorlagen verwendet werden. Eine solche Vorlage präsentiere ich Ihnen.
Zuerst ein wenig Theorie.
Für den Zugriff auf Status und Statistiken des IBM Storwize-Speichersystems können folgende Protokolle verwendet werden:
- CIM/WBEM-Protokolle;
- (wird ab Softwareversion 8.1.3 in IBM Storwize unterstützt);
- SNMP Traps (eingeschränkter Satz von Traps, keine Statistiken);
- SSH-Verbindung mit anschließendem Remote .
Interessierte können sich in den entsprechenden Abschnitten der Anbieter-Dokumentation sowie im Dokument näher mit den verschiedenen Überwachungsmethoden vertrautmachen.
Wir werden die CIM/WBEM-Protokolle verwenden, die es ermöglichen, Betriebsparameter von Speichersystemen ohne wesentliche Änderungen der Software für verschiedene Speichersysteme zu erhalten. Die CIM/WBEM-Protokolle arbeiten entsprechend Die Storage Management Initiative – Specification basiert auf offenen Standards. und , die durch .
definiert werden. WBEM arbeitet über das HTTP-Protokoll. Über WBEM kann nicht nur mit Speichersystemen, sondern auch mit HBAs, Switches und Tape Libraries gearbeitet werden.
Laut und , der Hauptkomponente der SMI-Implementierung ist der WBEM-Server, der CIM-XML-Anfragen von WBEM-Clients (in unserem Fall von Monitoring-Skripten) bearbeitet:

CIM ist ein objektorientiertes Modell, das auf der Unified Modeling Language (UML) basiert.
Verwaltete Elemente werden in Form von CIM-Klassen definiert, die Eigenschaften und Methoden zur Darstellung verwalteter Daten und Funktionen besitzen.
Laut , um auf das SAN über CIM/WBEM zuzugreifen, kann PyWBEM verwendet werden — eine Open-Source-Bibliothek, die in Python geschrieben ist und Entwicklern sowie Systemadministratoren die Implementierung des CIM-Protokolls für den Zugriff auf CIM-Objekte und die Durchführung verschiedener Operationen mit einem WBEM-Server ermöglicht, der gemäß SMI-S oder anderen CIM-Spezifikationen arbeitet.
Um eine Verbindung mit dem WBEM-Server herzustellen, verwenden wir den Klassenkonstruktor :
conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
namespace, no_verification=True)
Dies ist eine virtuelle Verbindung, da CIM-XML/WBEM über HTTP funktioniert, die tatsächliche Verbindung erfolgt im Moment des Aufrufs von Methoden für die Instanz der Klasse WBEMConnection. Gemäß den IBM System Storage SAN Volume Controller und Storwize V7000 Best Practices und Performance Guidelines (Beispiel C-8, S. 412) verwenden wir als CIM-Namespace für das IBM Storwize SAN „root/ibm“.
Bitte beachten Sie, dass zur Erfassung von Statistiken über das CIM-XML/WBEM der Benutzer in die entsprechende Sicherheitsgruppe aufgenommen werden muss. Andernfalls sind bei der Ausführung von WBEM-Anfragen die Ausgabe der Attribute der Instanzklasse leer..
Um auf die Statistiken des SAN zuzugreifen, muss der Benutzer, unter dem der Konstruktor aufgerufen wird, , über Berechtigungen von mindestens RestrictedAdmin (verfügbar für code_level > 7.8.0) oder Administrator verfügen (ich empfehle dies aus Sicherheitsgründen nicht).
Wir verbinden uns über SSH mit dem SAN und sehen uns die Gruppennummern an:
> 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
Wir fügen den Benutzer zabbix der benötigten Gruppe hinzu:
> chuser -usergrp 5 zabbix
Darüber hinaus muss gemäß den IBM System Storage SAN Volume Controller und Storwize V7000 Best Practices und Performance Guidelines (S. 415) die Statistiksammlung am SAN aktiviert werden. Um Statistiken jede Minute zu sammeln:
> startstats -interval 1
Überprüfen:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
Um alle vorhandenen Klassen des SAN zu erhalten, muss die Methode EnumerateClassNames() verwendet werden.
Beispiel:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
Zur Erfassung der Werte der SAN-Parameter dient die Methode der Klasse WBEMConnection, die eine Liste von Instanzen zurückgibt .
Beispiel:
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))
Für einige Klassen, die eine große Anzahl von Instanzen enthalten, wie IBMTSSVC_StorageVolume, kann die vollständige Abfrage aller Instanzen ziemlich langsam sein. Es können große Datenmengen generiert werden, die von der Speichersystemvorbereitung, über das Netzwerk übertragen und durch ein Skript verarbeitet werden müssen. Für diesen Fall gibt es eine Methode , die es ermöglicht, nur die für uns interessierenden Eigenschaften der Instanzklasse abzurufen. Diese Methode setzt die Verwendung einer Abfragesprache voraus, die SQL ähnlich ist – entweder CIM Query Language (DMTF:CQL) oder WBEM Query Language (WQL), um CIM-Objekte des Speichersystems abzufragen:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
Um zu bestimmen, welche Klassen wir benötigen, um die Parameter der Speicherobjekte abzurufen, lesen wir die Dokumentation, zum Beispiel .
So werden wir, um die Parameter (keine Leistungszähler) physischer Festplatten (Disk Drives) abzufragen, die Klasse IBMTSSVC_DiskDrive befragen, für die Parameter der Volumes – die Klasse IBMTSSVC_StorageVolume, für die Parameter der Arrays – die Klasse IBMTSSVC_Array, für die Parameter der MDisks – die Klasse IBMTSSVC_BackendVolume usw.
Über die Leistung kann man lesen (konkret – ) und die Best Practices und Leistungsrichtlinien für IBM System Storage SAN Volume Controller und Storwize V7000 (Beispiel C-11, S. 415).
Um die Statistiken des Speichersystems für Volumes zu erhalten, muss als Wert des Parameters ClassName IBMTSSVC_StorageVolumeStatistics angegeben werden. Die benötigten Eigenschaften der Klasse IBMTSSVC_StorageVolumeStatistics zur Sammlung von Statistiken können eingesehen werden in .
Außerdem können zur Leistungsanalyse die Klassen IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics verwendet werden.
Für das Schreiben von Daten in das Überwachungssystem verwenden wir den Mechanismus , der auf Python im Modul . Die Struktur der Klassen des Speichersystems und deren Eigenschaften werden wir in einem Wörterbuch im JSON-Format anordnen.
Wir laden die Vorlage auf den Zabbix-Server hoch, stellen sicher, dass der Überwachungsserver über das PROTOKOLL WEB (TCP/5989) Zugriff auf den SAN hat, platzieren Konfigurationsdateien, Entdeckungs- und Überwachungsskripte auf dem Überwachungsserver. Anschließend fügen wir den Scheduler zum Starten der Skripte hinzu. Letztendlich: Wir entdecken Objekte aus dem SAN (Arrays, physische und virtuelle Festplatten, Enclosures und vieles mehr), übergeben sie an die Zabbix-Entdeckungen, lesen den Status ihrer Parameter aus, erfassen Leistungsstatistiken (Performance-Counters) und übergeben alles in die entsprechenden Zabbix-Items unserer Vorlage.
Die Zabbix-Vorlage, Python-Skripte, die Klassenstruktur des SAN und deren Eigenschaften sowie Beispiele von Konfigurationsdateien sind verfügbar. .
Quelle: habr.com
