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ć:
- Protokół CIM/WBEM;
- (w IBM Storwize obsługiwane od wersji oprogramowania 8.1.3);
- SNMP Traps (ograniczony zestaw trapów, brak statystyk);
- Połączenie przez SSH z późniejszym zdalnym .
Osoby zainteresowane mogą zapoznać się z różnymi metodami monitorowania w odpowiednich sekcjach dokumentacji dostawcy, a także w dokumencie .
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 – Specyfikacja opiera się na otwartych standardach i , określanych przez .
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 i , 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):

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 , 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 :
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 , 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 klasy WBEMConnection, zwracająca listę instancji .
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ę , 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 .
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ć (konkretnie — ) 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 .
Dodatkowo, do analizy wydajności można wykorzystać klasy IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
Do zapisu danych w systemie monitorowania wykorzystamy mechanizm , zrealizowany w pythonie w module . 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 .
Źródło: habr.com
