Monitorowanie systemów pamięci masowej IBM Storwize za pomocą Zabbix

W tym artykule porozmawiamy trochę o monitorowaniu macierzy dyskowych IBM Storwize oraz innych macierzy, które wspierają protokoły CIM/WBEM. Zapotrzebowanie na takie monitorowanie pomijamy, przyjmując to jako aksjomat. Jako system monitorowania użyjemy Zabbix.

W najnowszych wersjach Zabbix firma zwróciła większą uwagę na szablony — zaczęły pojawiać się szablony do monitorowania usług, baz danych, sprzętu serwerowego (IMM/iBMC) przez IPMI. Monitorowanie macierzy dyskowych wciąż jest poza szablonami dostępnymi w podstawowej wersji, dlatego do integracji w Zabbix informacji o stanie i wydajności komponentów macierzy należy używać niestandardowych szablonów. Jeden z takich szablonów proponuję Państwu.

Najpierw trochę teorii.

Aby uzyskać dostęp do statusu i statystyk macierzy IBM Storwize, można użyć:

  1. Protokół CIM/WBEM;
  2. RESTful API (w IBM Storwize obsługiwane od wersji oprogramowania 8.1.3);
  3. SNMP Traps (ograniczony zestaw trapów, brak statystyk);
  4. Połączenie przez SSH z późniejszym zdalnym jest odpowiednie do powolnego skryptowania bashowego.

Osoby zainteresowane mogą zapoznać się z różnymi metodami monitorowania w odpowiednich sekcjach dokumentacji dostawcy, a także w dokumencie IBM Spectrum Virtualize scripting.

Będziemy używać protokołów CIM/WBEM, które pozwalają uzyskać parametry pracy macierzy bez znaczących zmian w oprogramowaniu dla różnych macierzy. Protokół CIM/WBEM działa zgodnie z Storage Management Initiative Specification (SMI-S). Storage Management Initiative – Specyfikacja opiera się na otwartych standardach CIM (Common Information Model) i WBEM (Web-Based Enterprise Management), określanych przez Distributed Management Task Force.

WBEM działa na protokole HTTP. Dzięki WBEM można pracować nie tylko z macierzami, ale również z HBA, przełącznikami i bibliotekami taśmowymi.

Zgodnie z SMI Architecture i Determine Infrastructure, podstawowym komponentem realizacji SMI jest serwer WBEM, który przetwarza zapytania CIM-XML od klientów WBEM (w naszym przypadku — od skryptów monitorujących):

Monitorowanie systemów pamięci masowej IBM Storwize za pomocą Zabbix

CIM to model obiektowy oparty na Unified Modeling Language (UML).
Zarządzane elementy są definiowane jako klasy CIM, które mają właściwości i metody do reprezentowania zarządzanych danych i funkcji.

Zgodnie z www.snia.org/pywbem, aby uzyskać dostęp do macierzy dyskowej poprzez CIM/WBEM, można użyć PyWBEM — biblioteki open source napisanej w Pythonie, która umożliwia programistom i administratorom systemów implementację protokołu CIM w celu uzyskania dostępu do obiektów CIM oraz przeprowadzania różnych operacji z serwerem WBEM działającym zgodnie z SMI-S lub innymi specyfikacjami CIM.

Aby połączyć się z serwerem WBEM, używamy konstruktora klasy WBEMConnection:

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

To połączenie wirtualne, ponieważ CIM-XML/WBEM działa na HTTP, a rzeczywiste połączenie następuje w momencie wywołania metod dla instancji klasy WBEMConnection. Zgodnie z najlepszymi praktykami i wytycznymi wydajności IBM System Storage SAN Volume Controller i Storwize V7000 (przykład C-8, str. 412), jako namespace CIM dla macierzy IBM Storwize będziemy używać „root/ibm”.

Zauważ, że aby zbierać statystyki z protokołu CIM-XML/WBEM, użytkownik musi być członkiem odpowiedniej grupy zabezpieczeń. W przeciwnym razie podczas wykonywania zapytań WBEM wartości atrybutów instancji klasy będą puste..

Aby uzyskać dostęp do statystyk macierzy, użytkownik, który wywołuje konstruktor WBEMConnection(), musi mieć przynajmniej prawa RestrictedAdmin (dostępne dla code_level > 7.8.0) lub Administrator (niezalecane ze względów bezpieczeństwa).

Łączymy się z macierzą przez SSH i sprawdzamy numery grup:

> 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    

Dodajemy użytkownika zabbix do odpowiedniej grupy:

> chuser -usergrp 5 zabbix

Ponadto, zgodnie z najlepszymi praktykami i wytycznymi wydajności IBM System Storage SAN Volume Controller i Storwize V7000 (str. 415) należy włączyć zbieranie statystyk na macierzy. Aby zbierać statystyki co minutę:

> startstats -interval 1 

Sprawdzamy:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Aby uzyskać wszystkie istniejące klasy macierzy, należy użyć metody EnumerateClassNames().

Przykład:

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

Aby uzyskać wartości parametrów macierzy, przeznaczona jest metoda EnumerateInstances() klasy WBEMConnection, zwracająca listę instancji CIMInstance().

Przykład:

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

Dla niektórych klas zawierających dużą liczbę instancji, takich jak IBMTSSVC_StorageVolume, pełne zapytanie o wszystkie instancje może być dość wolne. Może generować duże ilości danych, które muszą być przygotowane przez system pamięci masowej, przesyłane przez sieć i przetwarzane przez skrypt. W takim przypadku stosuje się metodę ExecQuery(), która umożliwia uzyskanie tylko tych właściwości instancji klasy, które nas interesują. Metoda ta wymaga użycia języka zapytań podobnego do SQL — czy to CIM Query Language (DMTF:CQL), czy WBEM Query Language (WQL), do zapytywania obiektów CIM w systemie pamięci masowej:

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

Aby określić, które klasy są potrzebne do uzyskania parametrów obiektów systemu pamięci masowej, zapoznaj się z dokumentacją, na przykład Jak pojęcia systemowe mapują pojęcia CIM.

Tak więc, aby uzyskać parametry (nie liczniki wydajności) fizycznych dysków (Disk Drives), będziemy zapytywać klasę IBMTSSVC_DiskDrive, aby uzyskać parametry Wolumenów — klasę IBMTSSVC_StorageVolume, aby uzyskać parametry macierzy — klasę IBMTSSVC_Array, a dla parametrów MDisks — klasę IBMTSSVC_BackendVolume itd.

O wydajności można przeczytać Funkcjonalne schematy agenta Modelu Informacji Wspólnej (konkretnie — Podprofil wydajności serwera blokowego) oraz Wytyczne i najlepsze praktyki dotyczące wydajności IBM System Storage SAN Volume Controller i Storwize V7000 (Przykład C-11, str. 415).

Aby uzyskać statystyki systemu pamięci masowej dla Wolumenów, należy jako wartość parametru ClassName podać IBMTSSVC_StorageVolumeStatistics. Właściwości klasy IBMTSSVC_StorageVolumeStatistics, które są potrzebne do zbierania statystyk, można znaleźć w Statystyki węzła.

Dodatkowo, do analizy wydajności można wykorzystać klasy IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Do zapisu danych w systemie monitorowania wykorzystamy mechanizm zabbix traps, zrealizowany w pythonie w module py-zabbix. Strukturę klas systemu pamięci masowej i ich właściwości umieścimy w słowniku w formacie JSON.

Ładujemy szablon na serwer Zabbix, upewniamy się, że serwer monitorowania ma dostęp do macierzy dyskowej przez protokół WEB (TCP/5989), umieszczamy pliki konfiguracyjne, skrypty wykrywania i monitorowania na serwerze monitorowania. Następnie dodajemy do harmonogramu uruchamianie skryptów. W wyniku tego: wykrywamy obiekty macierzy dyskowej (macierze, fizyczne i wirtualne dyski, obudowy i wiele innych), przesyłamy je do wykrywania Zabbix, odczytujemy status ich parametrów, zbieramy statystyki wydajności (liczniki wydajności), a wszystko to przekazujemy do odpowiednich elementów Zabbix naszego szablonu.

Szablon Zabbix, skrypty python, struktura klas macierzy dyskowej i ich właściwości oraz przykłady plików konfiguracyjnych można znaleźć tutaj.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster