Überwachung des IBM Storwize SAN mit Zabbix

In diesem Artikel sprechen wir kurz über das Monitoring von IBM Storwize und anderen Speicherlösungen, die CIM/WBEM-Protokolle unterstützen. Die Notwendigkeit eines solchen Monitorings lassen wir außen vor, betrachten wir es als Axiom. Als Monitoring-System verwenden wir Zabbix.

In den neuesten Versionen von Zabbix hat das Unternehmen den Vorlagen viel mehr Aufmerksamkeit geschenkt – es sind Vorlagen für die Überwachung von Diensten, Datenbanken, Serverhardware (IMM/iBMC) über IPMI entstanden. Das Monitoring von Speicherlösungen bleibt jedoch derzeit ohne Out-of-the-Box-Vorlagen, daher müssen für die Integration des Status und der Leistung von Speicherkomponenten in Zabbix benutzerdefinierte Vorlagen verwendet werden. Eine solche Vorlage möchte ich Ihnen vorstellen.

Zuerst ein wenig Theorie.

Um auf den Status und die Statistiken der IBM Storwize-Speicherlösungen zuzugreifen, können folgende Methoden verwendet werden:

  1. CIM/WBEM-Protokolle;
  2. RESTful API (wird in IBM Storwize seit Softwareversion 8.1.3 unterstützt);
  3. SNMP-Traps (eine eingeschränkte Anzahl von Traps, keine Statistiken);
  4. SSH-Verbindung mit anschließendem Remote-Zugriff geeignet für langsames Bash-Scripting.

Interessierte können sich in den entsprechenden Abschnitten der Herstellerdokumentation näher über verschiedene Überwachungsmethoden informieren sowie in der Dokumentation. IBM Spectrum Virtualize Skripting.

Wir werden die Protokolle CIM/WBEM verwenden, die es ermöglichen, Betriebsparameter von Speicherlösungen zu erhalten, ohne dass signifikante Änderungen an der Software für unterschiedliche Systeme erforderlich sind. Die Protokolle CIM/WBEM arbeiten gemäß der Storage Management Initiative Specification (SMI-S).Die Storage Management Initiative – Spezifikation basiert auf offenen Standards CIM (Common Information Model) und WBEM (Web-Based Enterprise Management), die definiert werden von der Distributed Management Task Force..

WBEM läuft über das HTTP-Protokoll. Über WBEM kann nicht nur mit Speichersystemen gearbeitet werden, sondern auch mit HBAs, Switches und Bandbibliotheken.

Laut SMI-Architektur und Bestimmen der Infrastruktur, der Hauptbestandteil der Implementierung von SMI ist der WBEM-Server, der CIM-XML-Anfragen von WBEM-Clients (in unserem Fall von Monitoring-Skripten) verarbeitet:

Überwachung des IBM Storwize SAN mit Zabbix

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 www.snia.org/pywbem, um auf den Speicher ü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 zur Verfügung stellt, um auf CIM-Objekte zuzugreifen und verschiedene Operationen mit einem WBEM-Server durchzuführen, der gemäß SMI-S oder anderen CIM-Spezifikationen arbeitet.

Zum Verbinden mit dem WBEM-Server 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 über HTTP arbeitet; die tatsächliche Verbindung erfolgt beim Aufruf der Methoden für das Objekt der Klasse WBEMConnection. Gemäß den Best Practices und Leistungsrichtlinien von IBM System Storage SAN Volume Controller und Storwize V7000 (Beispiel C-8, S. 412) verwenden wir als CIM-Namespace für das IBM Storwize-Speichersystem „root/ibm“.

Bitte beachten Sie, dass zur Sammlung von Statistiken über das CIM-XML/WBEM-Protokoll der Benutzer in die entsprechende Sicherheitsgruppe aufgenommen werden muss. Andernfalls wird die Ausgabe der Attribute des Klassenobjekts bei der Durchführung von WBEM-Anfragen leer sein..

Für den Zugriff auf die Statistiken des Speichers ist der Benutzer, unter dem der Konstruktor aufgerufen wird, WBEMConnection(), muss über mindestens die Berechtigungen RestrictedAdmin (verfügbar für code_level > 7.8.0) oder Administrator verfügen (nicht empfohlen aus Sicherheitsgründen).

Wir verbinden uns über SSH mit dem Storage-System und prüfen die Gruppennummern:

> 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 Benutzer zabbix zur entsprechenden Gruppe hinzu:

> chuser -usergrp 5 zabbix

Außerdem, gemäß den IBM System Storage SAN Volume Controller und Storwize V7000 Best Practices und Performance Guidelines (S. 415), muss die Statistiksammlung im Storage-System aktiviert werden. Um Statistiken jede Minute zu sammeln:

> startstats -interval 1 

Überprüfen wir:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Um alle vorhandenen Klassen des Storage-Systems zu erhalten, muss die Methode EnumerateClassNames() verwendet werden.

Beispiel:

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

Zur Abfrage von Werten der Parameter des Storage-Systems ist die Methode EnumerateInstances() der Klasse WBEMConnection vorgesehen, 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 bestimmten Klassen mit einer großen Anzahl von Instanzen, wie beispielsweise IBMTSSVC_StorageVolume, kann es recht langsam sein, eine vollständige Anfrage aller Instanzen durchzuführen. Dies kann erhebliche Datenmengen erzeugen, die von der Speicherhardware aufbereitet, über das Netzwerk übertragen und vom Skript verarbeitet werden müssen. In solchen Fällen gibt es eine Methode, ExecQuery(), die es ermöglicht, nur die für uns relevanten Eigenschaften der Klasseninstanz abzurufen. Diese Methode erfordert die Verwendung einer Abfragesprache, die SQL ähnlich ist – entweder CIM Query Language (DMTF:CQL) oder WBEM Query Language (WQL), um die CIM-Objekte der Speichersysteme abzufragen:

request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)

Um festzustellen, welche Klassen wir benötigen, um die Parameter der Speichersystemobjekte abzurufen, lesen wir die Dokumentation, wie zum Beispiel Wie Systemkonzepte auf CIM-Konzepte abgebildet werden.

Um die Parameter (keine Leistungszähler) der physischen Festplatten (Disk Drives) zu erhalten, befragen wir die Klasse IBMTSSVC_DiskDrive. Für die Parameter der Volumes verwenden wir die Klasse IBMTSSVC_StorageVolume, für die Parameter der Arrays die Klasse IBMTSSVC_Array, und für die Parameter der MDisks die Klasse IBMTSSVC_BackendVolume usw.

Über die Leistung können Sie lesen Funktionsdiagramme des Common Information Model-Agenten (insbesondere – Block-Server-Leistungsunterprofil) und IBM System Storage SAN Volume Controller und Storwize V7000 Best Practices und Leistungsrichtlinien (Beispiel C-11, S. 415).

Um Statistiken der SAN über Volumes zu erhalten, müssen Sie den Parameter ClassName mit IBMTSSVC_StorageVolumeStatistics angeben. Die zur Erfassung von Statistiken benötigten Eigenschaften der Klasse IBMTSSVC_StorageVolumeStatistics finden Sie in Knotenstatistiken.

Zusätzlich können zur Leistungsanalyse die Klassen IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics und IBMTSSVC_NodeStatistics verwendet werden.

Für die Datenaufzeichnung im Überwachungssystem verwenden wir den Mechanismus Zabbix-Traps, realisiert in Python im Modul py-zabbix. Die Struktur der SAN-Klassen und ihrer Eigenschaften werden wir in einem Dictionary im JSON-Format ablegen.

Wir laden die Vorlage auf den Zabbix-Server hoch und stellen sicher, dass vom Überwachungsserver aus Zugriff auf die SAN über das WEB-Protokoll (TCP/5989) besteht. Danach platzieren wir die Konfigurationsdateien sowie Erkennungs- und Überwachungsskripte auf dem Überwachungsserver. Anschließend fügen wir die Skriptausführung in den Scheduler ein. Das Ergebnis: Wir entdecken die Objekte der SAN (Arrays, physische und virtuelle Festplatten, Gehäuse und vieles mehr), übergeben sie an die Zabbix-Entdeckungen, lesen den Status ihrer Parameter aus, verfolgen die Leistungsstatistiken (Performance Counters) und übermitteln all dies an die entsprechenden Zabbix-Items unserer Vorlage.

Die Zabbix-Vorlage, Python-Skripte, die Struktur der SAN-Klassen und deren Eigenschaften sowie Beispiele für Konfigurationsdateien können hier gefunden werden.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster