Monitorowanie pamięci masowej IBM Storwize za pomocą Zabbix
W tym artykule porozmawiamy trochę o monitorowaniu systemów pamięci masowej IBM Storwize i innych systemów pamięci masowej obsługujących protokoły CIM/WBEM. Potrzeba takiego monitorowania jest pominięta w równaniu; uznamy to za aksjomat. Będziemy używać Zabbix jako systemu monitorowania.
W najnowszych wersjach Zabbix firma zaczęła zwracać znacznie większą uwagę na szablony - zaczęły pojawiać się szablony dla usług monitorowania, DBMS, sprzętu serwerowego (IMM/iBMC) poprzez IPMI. Monitorowanie systemu pamięci masowej nadal nie jest dostępne od razu po wyjęciu z pudełka, więc aby zintegrować informacje o stanie i wydajności komponentów pamięci masowej z Zabbixem, należy użyć niestandardowych szablonów. Zwracam uwagę na jeden z tych szablonów.
Po pierwsze, mała teoria.
Aby uzyskać dostęp do stanu i statystyk systemów pamięci masowej IBM Storwize, możesz skorzystać z:
protokoły CIM/WBEM;
RESTful API (obsługiwane w IBM Storwize począwszy od wersji oprogramowania 8.1.3);
Pułapki SNMP (ograniczony zestaw pułapek, brak statystyk);
Zainteresowani mogą dowiedzieć się więcej o różnych metodach monitorowania w odpowiednich rozdziałach dokumentacji dostawcy, a także w dokumencie Skrypty IBM Spectrum Virtualize.
WBEM działa w oparciu o protokół HTTP. Dzięki WBEM możesz pracować nie tylko z systemami pamięci masowej, ale także z kartami HBA, przełącznikami i bibliotekami taśmowymi.
Według Architektura SMI и Określ infrastrukturę, głównym komponentem implementacji SMI jest serwer WBEM, który przetwarza żądania CIM-XML od klientów WBEM (w naszym przypadku ze skryptów monitorujących):
CIM to model obiektowy oparty na ujednoliconym języku modelowania (UML).
Elementy zarządzane definiuje się jako klasy CIM posiadające właściwości i metody reprezentujące zarządzane dane i funkcjonalność.
Według www.snia.org/pywbem, aby uzyskać dostęp do systemów pamięci masowej za pośrednictwem CIM/WBEM, możesz użyć PyWBEM - biblioteki open source napisanej w Pythonie, która zapewnia programistom i administratorom systemów implementację protokołu CIM umożliwiającego dostęp do obiektów CIM i wykonywanie różnych operacji z serwerem WBEM działającym w zgodnie z SMI-S lub innymi specyfikacjami CIM.
Aby połączyć się z serwerem WBEM używamy konstruktora klasy Połączenie WBEM:
Jest to połączenie wirtualne, ponieważ CIM-XML/WBEM działa na bazie protokołu HTTP, prawdziwe połączenie ma miejsce, gdy metody są wywoływane na instancji klasy WBEMConnection. Zgodnie z IBM System Storage SAN Volume Controller oraz najlepszymi praktykami i wytycznymi dotyczącymi wydajności Storwize V7000 (Przykład C-8, strona 412) będziemy używać „root/ibm” jako przestrzeni nazw CIM dla systemu pamięci masowej IBM Storwize.
Należy pamiętać, że aby zbierać statystyki przy wykorzystaniu protokołu CIM-XML/WBEM należy zaliczyć użytkownika do odpowiedniej grupy zabezpieczeń. W przeciwnym razie podczas wykonywania zapytań WBEM dane wyjściowe atrybutów instancji klasy będą puste.
Aby uzyskać dostęp do statystyk przechowywania, użytkownik, pod którym wywoływany jest konstruktor Połączenie WBEM(), musi mieć co najmniej uprawnienia RestrictedAdmin (dostępne dla poziomu kodu > 7.8.0) lub uprawnienia Administratora (niezalecane ze względów bezpieczeństwa).
Łączymy się z systemem przechowywania poprzez 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
Dodaj użytkownika zabbix do żądanej grupy:
> chuser -usergrp 5 zabbix
Ponadto, zgodnie z IBM System Storage SAN Volume Controller i najlepszymi praktykami i wytycznymi dotyczącymi wydajności Storwize V7000 (s. 415), należy włączyć gromadzenie statystyk w systemie pamięci masowej. Aby więc zbierać statystyki co minutę:
> startstats -interval 1
Sprawdzanie:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
Aby uzyskać wszystkie istniejące klasy pamięci, należy użyć metody EnumerateClassNames().
Przykład:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
Metoda służy do uzyskania wartości parametrów systemu magazynowania Wylicz instancje() klasa WBEMConnection, zwracająca listę instancji Instancja CIM().
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))
W przypadku niektórych klas zawierających dużą liczbę instancji, takich jak IBMTSSVC_StorageVolume, pełne zapytanie dotyczące wszystkich instancji może być dość powolne. Może generować duże ilości danych, które muszą zostać przygotowane przez system przechowywania, przesłane siecią i przetworzone przez skrypt. Jest metoda na taki przypadek ExecQuery(), co pozwala nam uzyskać tylko właściwości instancji klasy, które nas interesują. Ta metoda polega na użyciu języka zapytań podobnego do SQL, języka zapytań CIM (DMTF:CQL) lub języka zapytań WBEM (WQL), do wysyłania zapytań do obiektów pamięci CIM:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
Zatem, aby uzyskać parametry (a nie liczniki wydajności) dysków fizycznych (napędów dyskowych), odpytujemy klasę IBMTSSVC_DiskDrive, aby uzyskać parametry woluminów - klasę IBMTSSVC_StorageVolume, aby uzyskać parametry tablicy - klasę IBMTSSVC_Array, aby uzyskać parametry MDisk - klasę IBMTSSVC_BackendVolume itp.
Aby uzyskać statystyki pamięci dla woluminów, należy określić IBMTSSVC_StorageVolumeStatistics jako wartość parametru ClassName. Właściwości klasy IBMTSSVC_StorageVolumeStatistics niezbędne do zbierania statystyk można przeglądać w Statystyki węzłów.
Ponadto do analizy wydajności można użyć klas IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
Do zapisu danych do systemu monitoringu wykorzystamy mechanizm pułapki zabbix, zaimplementowany w Pythonie w module py-zabbix. Strukturę klas systemów pamięci masowej i ich właściwości umieścimy w słowniku w formacie JSON.
Przesyłamy szablon na serwer Zabbix, upewniamy się, że serwer monitorujący ma dostęp do systemu przechowywania poprzez protokół WEB (TCP/5989), umieszczamy na serwerze monitorującym pliki konfiguracyjne, skrypty detekcyjne i monitorujące. Następnie dodaj uruchomienie skryptu do harmonogramu. W rezultacie: odkrywamy obiekty pamięci masowej (macierze, dyski fizyczne i wirtualne, obudowy i wiele więcej), przesyłamy je do odkryć Zabbix, czytamy stan ich parametrów, czytamy statystyki wydajności (liczniki wydajności), przesyłamy to wszystko do odpowiedniego Zabbix Elementy naszego szablonu.
Szablon Zabbix, skrypty Pythona, struktura klas pamięci i ich właściwości, a także przykłady plików konfiguracyjnych, możesz znaleźć tutaj.