English version of this article: https://community.ibm.com/community/user/power/blogs/michal-wiktorek/2024/11/06/powervm-performance-monitoring-grafana
Tekst został utworzony dla społeczności Poland Power User Group
Wstęp
W tym artykule chciałbym podzielić się swoimi poradami do Grafana, na potrzeby monitorowania statystyk platformy IBM Power.
Opieram się tutaj na użyciu Grafana z Data Source do bazy InfluxDB, która jest zasilana skryptami nextract_plus autorstwa Nigela Griffithsa, jednak zawarte porady mogą być przydatne również w wielu innych zastosowaniach.
Jeżeli interesuje Cię temat monitorowania statystyk wydajnościowych platformy Power, zdecydowanie polecam Ci zapoznanie się z "Nextract Plus", ponieważ narzędzie daje potężne możliwości, przy minimalnych kosztach.
Więcej informacji możesz znaleźć na stronie: https://www.ibm.com/support/pages/nextract-plus-hmc-rest-api-performance-statistics
Warto wspomnieć też o innym świetnym narzędziu, (również autorstwa Nigela Griffithsa) czyli o njmon, które również może wysyłać statystyki do bazy InfluxDB, ale z poziomu systemu operacyjnego AIX/Linux z użyciem agenta.
Jeżeli znasz i lubisz narzędzie NMON, powinna Ci się spodobać możliwość prezentowania danych w Grafana: https://www.ibm.com/support/pages/njmon-intro-and-update
Uwaga: wszelkie dane pokazane w artykule są zmyślone i nie pochodzą z żadnego prawdziwego środowiska IT.
Założeniem tego artykułu była pomoc w tworzeniu własnych, dostosowanych do indywidualnych potrzeb dashboardów w Grafana. Nie opieram się tu o gotowe dashboardy, które są dostępne na stronach Grafany.
Filtrowanie serwerów i LPAR-ów pod względem typu i lokalizacji
W przypadku dużego środowiska IT, gdzie działa wiele serwerów fizycznych różnego typu i w różnych serwerowniach, bardzo użyteczne jest użycie filtrowania z wykorzystaniem zmiennych. Poświęciłem trochę czasu i nerwów na wymyślenie sensownego sposobu do filtrowania LPAR-ów i maszyn, dlatego chciałbym ułatwić innym życie, dzieląc się kilkoma poradami.
Myślę, że używanie takiego filtrowania w dashboardach może bardzo ułatwić codzienną pracę z monitorowaniem platformy Power.
Aby zilustrować, jak można ustawić filtr dla serwerów i LPAR-ów, prezentuję przykład zmyślonego środowiska. Nazwy te zostaną użyte w kolejnych przykładach dla zmiennych w Grafana.
Przyjąłem scenariusz w którym cała platforma Power dzieli się na serwery różnego typu, w różnych Data Center, z podziałem na środowisko produkcyjne i testowe:
Domyślnie w bazie InfluxDB nie istnieje informacja o tym, gdzie znajduje się dany serwer, ani czy jest produkcyjny lub testowy. Z pewnością bardzo użyteczna byłaby możliwość wykazania utylizacji serwerów, np. tylko w jednym Data Center, lub tylko z jednego środowiska. Bez wykorzystania zmiennych w Grafana niestety nie jest to takie proste, a ustawianie ręcznie nazw serwerów/LPARów w panelach Grafany może być bardzo uciążliwe.
Celem jest uzyskanie takiego panelu wyboru w dashboardzie, jak poniżej. Wybranie odpowiedniego Data Center, oraz typu środowiska i klasy maszyny, powinno automatycznie ograniczać widoczne wykresy dashboardu, tylko do odpowiednich maszyn oraz LPARów
Aby uzyskać taki efekt, dla danego dashboardu należy wybrać Settings, pozycję Variables i utworzyć nowe zmienne. Należy zwrócić uwagę że niektóre będą zmiennymi typu "custom" a inne typu "Query", które będą odpytywać bazę InfluxDB.
Osobiście polecam utworzenie osobnego dashboardu ze statystykami dla maszyn fizycznych, oraz osobnego dashboardu dla statystyk LPAR-ów. Danych możliwych do zebrania jest na tyle dużo, że prezentowanie wszystkiego w jednym miejscu może sprawić, że dashboard będzie wymagać przewijania ekranu i straci na prostocie.
W przypadku dashboardu tylko ze statystykami maszyny, zmienną LPAR oczywiście można pominąć.
UWAGA, wszystkie teksty zawarte w polach "CUSTOM OPTIONS" i "QUERY" muszą być pisane ciągiem. Nigdzie nie powinno być znaków końca linii. W artykule niestety musiałem zawinąć tekst, więc może to wprowadzać w błąd
Zmienna "DATACENTER" typu custom
Serwery można podzielić na lokalizację za pomocą "CUSTOM TYPE". Bardzo istotna jest poprawna składnia. Wszelkie nazwy oczywiście należy zamienić na odpowiadające prawdziwym maszynom w danym środowisku.
Poprawna składnia powinna wyglądać następująco: GROUP1 : item1|item2|item3, GROUP2 : item4|item5|item6
Warto zwrócić uwagę na znaki spacji i brak użycia znaków końca linii. Wszystko musi być w jednym wierszu.
DC1 : Server1_S1022|Server2_S1022|Server3_S1022|Server10_E1050|Server11_E1050|Server20_E1080|Server21_E1080, DC2 : Server4_S1022|Server5_S1022|Server6_S1022|Server12_E1050|Server13_E1050|Server22_E1080|Server23_E1080, DC3 : Server7_S1022|Server8_S1022|Server9_S1022|Server14_E1050|Server15_E1050|Server24_E1080|Server25_E1080
Przykład w Grafana:
Warto pamiętać by opcja Multi-value była zaznaczona, co pozwoli na wybór wielu pozycji. Podgląd wyniku powinien się pojawić na dole strony (Preview of values)
Zmienna "ENV" typu custom
Zasady są takie same jak w przykładzie dla DATACENTER
TEST : Server1_S1022|Server2_S1022|Server4_S1022|Server5_S1022|Server7_S1022|Server8_S1022|Server10_E1050|Server12_E1050|Server14_E1050,PROD : Server3_S1022|Server6_S1022|Server9_S1022|Server11_E1050|Server13_E1050|Server15_E1050|Server20_E1080|Server22_E1080|Server24_E1080|Server21_E1080|Server23_E1080|Server25_E1080
Przykład w Grafana:
Zmienna "TYPE" typu custom
Zasady takie same jak w przykładach powyżej
Scale-out : Server1_S1022|Server4_S1022|Server7_S1022|Server2_S1022|Server5_S1022|Server8_S1022|Server3_S1022|Server6_S1022|Server9_S1022,Midrange : Server10_E1050|Server12_E1050|Server14_E1050|Server11_E1050|Server13_E1050|Server15_E1050,Enterprise : Server20_E1080|Server22_E1080|Server24_E1080|Server21_E1080|Server23_E1080|Server25_E1080
Przykład w Grafana:
Zapytanie "SERVERNAME"
W tym przypadku zmienna jest typu QUERY i korzysta z informacji w bazie InfluxDB. Należy zwrócić uwagę na warunki które są użyte w zapytaniu, czyli "DATACENTER:pipe
", "TYPE:pipe
" i , "ENV:pipe
". Użycie takiego zapytania pozwala ograniczyć dane tylko do tych, które są wybrane w panelu filtrowania.
SHOW TAG VALUES WITH KEY = "servername" WHERE servername =~/^*(${DATACENTER:pipe})$*/ AND servername =~/^*(${TYPE:pipe})$*/ AND servername =~/^*(${ENV:pipe})$*/
Przykład w Grafana:
Zapytanie "LPAR"
To zapytanie wyświetla nazwy LPARów, ale ale jedynie te które pasują do danego serwera. Zapytanie wyświetla tylko najnowsze nazwy, aby nie dublować nazw (np. po migracji LPAR-a miedzy maszynami) i jest ograniczone tylko do LPAR-ów z ostatnich 30 dni, by nie wyświetlać przestarzałych danych. Oczywiście można zrezygnować z tego ostatniego warunku.
SELECT last("name") FROM "lpar_details" WHERE ("servername" =~ /^$SERVERNAME$/) AND time > now() - 30d GROUP BY "lparname"
Przykład w Grafana:
Wszystkie zmienne
Zestaw wszystkich zmiennych powinien wyglądać tak jak na poniższych screenie. Może się pojawić znak "WARNING" w przypadku gdy zmienna nie jest użyta w dashboardzie, lub przez inną zmienna.
Zapytania w panelach
W panelach Grafana, powinny zostać zastosowane nazwy zmiennych zamiast bezpośrednio wpisanych nazw LPAR-ów lub maszyn, tak jak na poniższych przykładach:
SELECT "currentVirtualProcessors" FROM "lpar_processor" WHERE ("lparname" =~ /^$LPAR$/) AND $timeFilter GROUP BY "lparname"
SELECT "availableProcUnits" FROM "server_processor" WHERE ("servername" =~ /^$SERVERNAME$/) AND $timeFilter GROUP BY "servername"
To wszystko, jeśli chodzi o filtrowanie serwerów. Pewnym utrudnieniem jest to, że zmienne trzeba wprowadzić dla każdego dashboardu osobno, dlatego warto klonować dashboardy zamiast tworzyć je od zera. Warto pamiętać, by aktualizować informacje gdy np. w danym środowisku pojawi się nowy serwer fizyczny lub zostanie przeniesiony między lokalizacjami.
Niektóre zmiany mogą być niewidoczne aż do czasu gdy dashboard zostanie zapisany.
Często się też zdarza, że przeglądarka pamięta stare nazwy w filtrach - należy wtedy spróbować wyczyścić cache przeglądarki (CLTR + F5).
Ustawianie legendy w panelu Grafany - Time series graph
W przypadku wykresu "Time Series", warto wykorzystać możliwość sortowania po wartościach legendy. Dzięki temu można łatwo sprawdzić np. które LPAR-y najmocniej utylizują CPU lub mają najwyższe peaki. W tym celu należy zmienić legendę na formę tabeli i kliknąć żądane wartości:
Przykład legendy posortowanej po kolumnie "Max":
Stacked czy unstacked?
Bardzo przydatną rzeczą w grafanie jest możliwość tworzenia STACK Group, które są niezależne od ogólnych ustawień STACK panelu. Pozwala to na zsumowanie wybranych danych, przy zachowaniu wartości stałych.
Przykładowo np. można chcieć zsumować dane utylizacji wielu LPAR-ów, na wielu maszynach i jednocześnie by wykres zrobił osobny stos dla TOTAL CPU maszynych fizycznych oraz osobny dla wartości utylizacji LPAR-ów, ale bez łączenia ich ze sobą.
W tym celu wystarczy dodać w opcji "OVERRIDE" dla wybranego zapytania STACK i nazwać grupę odopowiednią nazwą, np. TOTAL dla zapytań o dane wszystkich CPU maszyn, oraz UTIL dla zapytań o dane utylizacji:
Zmiana edytora zapytań InfluxQL na edytor tekstowy (RAW)
Edytor zapytań na pewno jest dużym ułatwieniem, jednak pracując z Grafaną i Influxdb warto uczyć się i robić bardziej skomplikowane zapytania z użyciem "RAW MODE". Aby przełączyć się pomiędzy trybami należy kliknać ikonę ołówka przy zapytaniu.
Używanie TAG-ów
Warto zwrócić uwagę że w QUERY, w polu "Alias by" można używać tagi, np.
- tag_servername
- tag_lparname
- tag_viosname
Można ich użyć, jeżeli w zapytaniu wcześniej zostały zastosowane odpowiednie nazwy przy GROUP BY.
Odpowiednie nazwy zostaną wyświetlone w legendzie, co jest również bardzo użyteczne.
Zakończenie
Mam nadzieję, że tekst był dla ciebie przydatny. Jeśli temat jest dla ciebie interesujący i chciałbyś więcej porad lub jesteś zainteresowany przykładami dashboardów do monitorowania platformy Power, napisz do mnie :)
Jeżeli interesują Cię treści o tej tematyce lub chcesz wymienić się doświadczeniami z zakresu technologii IBM Power, AIX, IBM i, Linux on Power z innymi osobami z Polski, zapraszam do dołączenia do grupy "Poland Power User Group"
Aby dołączyć do Grupy, wystarczy utworzyć konto IBMid + kliknąć "Join Group", po wejściu na poniższy link:
https://community.ibm.com/community/user/power/communities/globalgrouphome?CommunityKey=864bdb4f-30d1-4382-99e0-018fc17a0aff