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:

  1. protokoły CIM/WBEM;
  2. RESTful API (obsługiwane w IBM Storwize począwszy od wersji oprogramowania 8.1.3);
  3. Pułapki SNMP (ograniczony zestaw pułapek, brak statystyk);
  4. Połącz się przez SSH, a następnie zdalnie nadaje się do spokojnego pisania skryptów Bash.

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.

Wykorzystamy protokoły CIM/WBEM, które pozwalają nam uzyskać parametry pracy systemu przechowywania danych bez znaczących zmian oprogramowania dla różnych systemów przechowywania. Protokoły CIM/WBEM działają zgodnie z Specyfikacja inicjatywy zarządzania pamięcią masową (SMI-S). Inicjatywa zarządzania pamięcią masową – specyfikacja opiera się na otwartych standardach CIM (model wspólnych informacji) и WBEM (zarządzanie przedsiębiorstwem przez Internet), określony Rozproszona grupa zadaniowa ds. zarządzania.

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

Monitorowanie pamięci masowej IBM Storwize za pomocą Zabbix

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:

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

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)

Aby ustalić, jakich klas potrzebujemy, aby uzyskać parametry obiektów pamięci masowej, zapoznaj się np. z dokumentacją W jaki sposób koncepcje systemowe odpowiadają koncepcjom CIM.

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.

Jeśli chodzi o wydajność, możesz przeczytać Diagramy funkcjonalne agenta Common Information Model (konkretnie - Zablokuj podprofil wydajności serwera) oraz IBM System Storage SAN Volume Controller i najlepsze praktyki i wytyczne dotyczące wydajności Storwize V7000 (przykład C-11, strona 415).

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.

Źródło: www.habr.com

Dodaj komentarz