Überwachung des IBM Storwize-Speichers mit Zabbix

In diesem Artikel werden wir ein wenig über die Überwachung von IBM Storwize-Speichersystemen und anderen Speichersystemen sprechen, die die CIM/WBEM-Protokolle unterstützen. Die Notwendigkeit einer solchen Überwachung bleibt außen vor; wir betrachten dies als Axiom. Wir werden Zabbix als Überwachungssystem verwenden.

In den neuesten Versionen von Zabbix widmete das Unternehmen Vorlagen viel mehr Aufmerksamkeit – es erschienen nun Vorlagen für Überwachungsdienste, DBMS und Server-Hardware (IMM/iBMC) über IPMI. Die Überwachung des Speichersystems ist immer noch außerhalb der Standardvorlagen. Um Informationen über den Status und die Leistung von Speicherkomponenten in Zabbix zu integrieren, müssen Sie benutzerdefinierte Vorlagen verwenden. Ich mache Sie auf eine dieser Vorlagen aufmerksam.

Zuerst ein bisschen Theorie.

Um auf den Status und die Statistiken von IBM Storwize-Speichersystemen zuzugreifen, können Sie Folgendes verwenden:

  1. CIM/WBEM-Protokolle;
  2. REST-konforme API (unterstützt in IBM Storwize ab Softwareversion 8.1.3);
  3. SNMP-Traps (begrenzter Satz an Traps, keine Statistiken);
  4. Verbinden Sie sich über SSH und dann remote Geeignet für gemütliches Bash-Scripting.

Interessierte können in den entsprechenden Abschnitten der Herstellerdokumentation sowie im Dokument mehr über verschiedene Überwachungsmethoden erfahren IBM Spectrum Virtualize-Skripterstellung.

Wir werden die CIM/WBEM-Protokolle verwenden, die es uns ermöglichen, Betriebsparameter des Speichersystems ohne wesentliche Softwareänderungen für verschiedene Speichersysteme zu erhalten. Die CIM/WBEM-Protokolle funktionieren gemäß Spezifikation der Speicherverwaltungsinitiative (SMI-S). Storage Management Initiative – Spezifikation basiert auf offenen Standards CIM (Common Information Model) и WBEM (Webbasiertes Unternehmensmanagement), bestimmt Task Force für verteiltes Management.

WBEM läuft auf dem HTTP-Protokoll. Durch WBEM können Sie nicht nur mit Speichersystemen, sondern auch mit HBAs, Switches und Bandbibliotheken arbeiten.

Согласно SMI-Architektur и Bestimmen Sie die Infrastruktur, die Hauptkomponente der SMI-Implementierung ist der WBEM-Server, der CIM-XML-Anfragen von WBEM-Clients (in unserem Fall von Überwachungsskripten) verarbeitet:

Überwachung des IBM Storwize-Speichers mit Zabbix

CIM ist ein objektorientiertes Modell, das auf der Unified Modeling Language (UML) basiert.
Verwaltete Elemente werden als CIM-Klassen definiert, die über Eigenschaften und Methoden zur Darstellung verwalteter Daten und Funktionen verfügen.

Согласно www.snia.org/pywbemUm über CIM/WBEM auf Speichersysteme zuzugreifen, können Sie PyWBEM verwenden – eine in Python geschriebene Open-Source-Bibliothek, die Entwicklern und Systemadministratoren eine Implementierung des CIM-Protokolls für den Zugriff auf CIM-Objekte und die Durchführung verschiedener Vorgänge mit einem WBEM-Server zur Verfügung stellt gemäß SMI-S oder anderen CIM-Spezifikationen.

Um eine Verbindung zum WBEM-Server herzustellen, verwenden wir den Klassenkonstruktor WBEMConnection:

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

Dies ist eine virtuelle Verbindung, da CIM-XML/WBEM auf HTTP ausgeführt wird. Die reale Verbindung entsteht, wenn Methoden für eine Instanz der WBEMConnection-Klasse aufgerufen werden. In Übereinstimmung mit den Best Practices und Leistungsrichtlinien von IBM System Storage SAN Volume Controller und Storwize V7000 (Beispiel C-8, Seite 412) verwenden wir „root/ibm“ als CIM-Namespace für das IBM Storwize-Speichersystem.

Bitte beachten Sie, dass Sie zum Sammeln von Statistiken über das CIM-XML/WBEM-Protokoll den Benutzer in die entsprechende Sicherheitsgruppe aufnehmen müssen. Andernfalls ist beim Ausführen von WBEM-Abfragen die Ausgabe der Klasseninstanzattribute leer.

Um auf Speicherstatistiken zuzugreifen, muss der Benutzer verwendet werden, unter dem der Konstruktor aufgerufen wird WBEMConnection(), muss mindestens über RestrictedAdmin (verfügbar für code_level > 7.8.0) oder Administratorrechte (aus Sicherheitsgründen nicht empfohlen) verfügen.

Wir verbinden uns per SSH mit dem Speichersystem und schauen 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    

Fügen Sie den Zabbix-Benutzer zur gewünschten Gruppe hinzu:

> chuser -usergrp 5 zabbix

Darüber hinaus müssen Sie gemäß den Best Practices und Leistungsrichtlinien von IBM System Storage SAN Volume Controller und Storwize V7000 (S. 415) die Statistikerfassung auf dem Speichersystem aktivieren. Um also jede Minute Statistiken zu sammeln:

> startstats -interval 1 

Wir prüfen:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Um alle vorhandenen Speicherklassen abzurufen, müssen Sie die Methode EnumerateClassNames() verwenden.

Beispiel:

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

Die Methode wird verwendet, um die Werte von Speichersystemparametern zu erhalten EnumerateInstances() Klasse WBEMConnection, die eine Liste von Instanzen zurückgibt CIMInstance().

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))

Bei einigen Klassen, die eine große Anzahl von Instanzen enthalten, wie z. B. IBMTSSVC_StorageVolume, kann eine vollständige Abfrage aller Instanzen recht langsam sein. Dabei können große Datenmengen entstehen, die vom Speichersystem aufbereitet, über das Netzwerk übertragen und vom Skript verarbeitet werden müssen. Für einen solchen Fall gibt es eine Methode ExecQuery(), wodurch wir nur die Eigenschaften einer Klasseninstanz abrufen können, die uns interessieren. Bei dieser Methode wird eine SQL-ähnliche Abfragesprache verwendet, entweder CIM Query Language (DMTF:CQL) oder WBEM Query Language (WQL), um CIM-Speicherobjekte 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 von Speicherobjekten zu erhalten, lesen Sie beispielsweise die Dokumentation Wie Systemkonzepte auf CIM-Konzepte abgebildet werden.

Um also Parameter (keine Leistungsindikatoren) von physischen Festplatten (Festplattenlaufwerken) zu erhalten, fragen wir die Klasse IBMTSSVC_DiskDrive ab, um Volumenparameter zu erhalten – Klasse IBMTSSVC_StorageVolume, um Array-Parameter zu erhalten – Klasse IBMTSSVC_Array, um MDisks-Parameter zu erhalten – Klasse IBMTSSVC_BackendVolume usw.

Zur Leistung können Sie nachlesen Funktionsdiagramme des Common Information Model-Agenten (insbesondere - Unterprofil „Serverleistung blockieren“.) und IBM System Storage SAN Volume Controller und Storwize V7000 Best Practices und Leistungsrichtlinien (Beispiel C-11, Seite 415).

Um Speicherstatistiken für Volumes zu erhalten, müssen Sie IBMTSSVC_StorageVolumeStatistics als Wert des ClassName-Parameters angeben. Die zum Sammeln von Statistiken erforderlichen Eigenschaften der Klasse IBMTSSVC_StorageVolumeStatistics können in angezeigt werden Knotenstatistik.

Für die Leistungsanalyse können Sie außerdem die Klassen IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics und IBMTSSVC_NodeStatistics verwenden.

Um Daten im Überwachungssystem aufzuzeichnen, verwenden wir den Mechanismus Zabbix-Fallen, in Python in einem Modul implementiert py-zabbix. Wir werden die Struktur von Speichersystemklassen und ihre Eigenschaften in einem Wörterbuch im JSON-Format platzieren.

Wir laden die Vorlage auf den Zabbix-Server hoch, stellen sicher, dass der Überwachungsserver über das WEB-Protokoll (TCP/5989) Zugriff auf das Speichersystem hat, und platzieren Konfigurationsdateien, Erkennungs- und Überwachungsskripte auf dem Überwachungsserver. Fügen Sie als Nächstes den Skriptstart zum Planer hinzu. Als Ergebnis: Wir entdecken Speicherobjekte (Arrays, physische und virtuelle Festplatten, Gehäuse und vieles mehr), übertragen sie an Zabbix-Erkennungen, lesen den Status ihrer Parameter, lesen Leistungsstatistiken (Leistungsindikatoren) und übertragen all dies an den entsprechenden Zabbix Elemente unserer Vorlage.

Zabbix-Vorlage, Python-Skripte, Struktur von Speicherklassen und deren Eigenschaften sowie Beispiele für Konfigurationsdateien finden Sie hier finden Sie hier.

Source: habr.com

Kommentar hinzufügen