Rozszerzanie i badanie historii alarmów w Amazon CloudWatch – część 2
W części 1-wszej pokazaliśmy jak wykorzystać regułę Amazon EventBridge do tworzenia logów i metryk Amazon CloudWatch na podstawie zmiany stanu alarmów CloudWatch.
Aby zdiagnozować trendy, wpływy i pierwotne przyczyny problemów, możesz chcieć zobaczyć trendy w historii alarmów lub wizualizować te dane wraz z innymi danymi CloudWatch. Zazwyczaj tylko ci, którzy muszą podjąć natychmiastowe działania, otrzymują dane alarmowe, ale jest to również przydatne dla osób rozwiązujących problemy, planujących przyszłe zmiany lub rozumiejących tzw. user experience. Włączenie danych alarmowych do dashboardów otwiera dane dla szerszej publiczności i szerszego wykorzystania.
Ten post będzie wykorzystywał logi i metryki utworzone w części 1 i pokaże Ci sposoby włączenia tych danych do dashboardów CloudWatch. Rysunek 1 przedstawia dashboard, który utworzymy w celu zapewnienia przeglądu alarmów. Możesz używać pojedynczych widżetów wraz z innymi danymi w dashboardach, które koncentrują się na określonych aplikacjach lub workflow’ach.
Przykładowy dashboard pokazuje dane z dodatkowych alarmów, aby pokazać, jak może wyglądać bardziej zapełniony dashboard. Jeśli chcesz korzystać z wielu alarmów z widżetami opisanymi w tym poście, powinieneś wysłać wszystkie zdarzenia logów do tej samej grupy logów (/aws/events/alarms/), a wszystkie metryki alarmów do tej samej przestrzeni nazw (CWAlarms) z wymiarem alarmName. Aby uzyskać szczegółowe informacje, jak to zrobić, zobacz część 1 tej serii.
Rysunek 1: Przykładowy dashboard CloudWatch dla alarmów.
Ten post będzie działał z danymi alarmowymi EC2-low_CPU z części 1. Jeśli nie wygenerowałeś żadnych danych, włącz instancję Amazon Elastic Compute Cloud (Amazon EC2), pozostaw ją uruchomioną na 10-15 minut i wyłącz instancję Amazon EC2. Zrób to kilka razy, aby wygenerować trochę danych.
Utworzenie dashboardu
- W konsoli CloudWatch wybierz Dashboards. Wybierz Create dashboard, wpisz alarm-history i wybierz Create Dashboard.
- W tym momencie zobaczysz wyskakujące okienko, w którym możesz wybrać typ widżetu, który chcesz dodać. Wybierz Cancel, aby uzyskać pusty dashboard.
Aby uzyskać więcej informacji, zapoznaj się z dokumentacją dotyczącą tworzenia dashboardu CloudWatch.
Widżety aktualnego stanu alarmu
Rysunek 2 przedstawia widżet statusu alarmu CloudWatch, w tym aktualny stan alarmu.
Rysunek 2: Widżet dashboardu stanu alarmów.
- Z dashboardu wybierz Add widget, wybierz typ Alarm status i kliknij Next.
- Zaznacz pola wyboru obok alarmów, które chcesz uwzględnić, i kliknij Create widget.
- W Select a dashboard wybierz dashboard alarm-history z rozwijanej listy.
- W opcji Customize the widget title dodaj tytuł widżetu Current alarm state.
- Wybierz opcję Add to dashboard.
Możesz mieć więcej niż jeden alarm na widżet i więcej niż jeden widżet stanu alarmu na dashboard. Pozwala to na grupowanie alarmów według ich znaczenia dla użytkowników i kontekstu dashboardu.
Aby uzyskać więcej informacji, zapoznaj się z dokumentacją dotyczącą dodawania widżetu alarmowego do dashboardu CloudWatch.
Format logów
Następne dwa widżety przedstawiają podsumowania danych logów w formacie tabeli. Aby tworzyć widżety przy użyciu danych logu, musimy znać format logu, a także jakie pola są obecne.
1. W konsoli CloudWatch, wybierz Logs Insights. Z rozwijanej listy Select log group(s), wybierz /aws/events/alarms/. Zastąp zapytanie tym poniżej, a następnie wybierz Run query.
fields @timestamp, detail.alarmName, detail.state.value, @message
Jeśli wyszukiwanie nie przyniesie żadnych wyników, zmień okres czasu wyszukiwania, a następnie ponownie wybierz opcję Run query.
2. Wybierz strzałkę po lewej stronie wiersza, aby zobaczyć całe wydarzenie.
Rysunek 3 przedstawia przykładowe zdarzenie. Zdarzenie jest w formacie JSON i możesz zobaczyć rozszerzony widok zdarzenia z nazwami pól po lewej, a także powiązanymi z nimi wartościami po prawej stronie.
Rysunek 3: Wyniki wyszukiwania Log Insights przedstawiające pełne zdarzenie logu JSON, w tym nazwy pól i wartości.
Kiedy wystąpił ostatni alarm? (Stan wiżdzetu Last ALARM)
Tutaj chcemy pokazać ostatnie wystąpienie stanu ALARM w wyszukiwanym okresie czasu. Rysunek 4 pokazuje ostatnią zmianę stanu alarmu EC2-low_CPU na In Alarm.
Rysunek 4: Ostatni czas, kiedy każdy alarm przeszedł w stan ALARM.
1. W konsoli CloudWatch, wybierz Logs Insights. Z rozwijanej listy Select log group(s), wybierz /aws/events/alarms/. Wybierz odpowiedni okres czasu. Zastąp zapytanie tym poniżej, a następnie wybierz Run query.
filter detail.state.value="ALARM"
| stats latest(detail.state.timestamp) as time by detail.alarmName
Zapytania Log Insights zawierają co najmniej jedno polecenie zapytania oddzielone znakiem pipe character (|). Pierwsza komenda w tym wyszukiwaniu (filter) znajduje wszystkie zdarzenia ze stanem ALARM.
Następne polecenie wyszukuje najnowsze z tych zdarzeń (latest), a następnie wyświetla wartość timestamp i nazwę alarmu. Zapoznaj się z dokumentacją, aby uzyskać więcej informacji na temat składni zapytań CloudWatch Logs Insights.
2. Wybierz Run query, aby zobaczyć wyniki.
4. Wybierz Add to dashboard. w Select a dashboard wybierz dashboard alarm-history z rozwijanej listy. W polu Customize widget title dodaj tytuł stanu Last ALARM. Wybierz Add to dashboard.
Teraz możesz wybrać pozycję i rozmiar widżetu w swoim dashboardzie. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Move or resize a graph on a CloudWatch dashboard.
5. Wybierz Save dashboard, aby zachować ten widżet w dashboardzie.
Podczas dodawania widżetów do dashboardu, pamiętaj, że okres czasu wyszukiwania nie pochodzi z dodanego widżetu, ale z wybranego okresu czasu w prawym górnym rogu dashboardu. Jeśli nie widzisz wyników w swoich widżetach, zmodyfikuj je odpowiednio. Aby uzyskać więcej informacji, zobacz Change the time range or time zone format of a CloudWatch dashboard.
Jak często występują alarmy? (Widżet - top 5 aktywnych alarmów)
W tym widżecie chcemy pokazać 5 najczęstszych alarmów i częstotliwość ich uruchamiania. Rysunek 5 przedstawia przykładowy widżet. Te statystyki wysokiego poziomu mogą nam pomóc w podejmowaniu decyzji dotyczących alarmów, którym należy nadać priorytet pracy w odniesieniu do zrozumienia pierwotnej przyczyny i rozwiązania.
Rysunek 5: Wyniki Insights Query dla 5 najczęstych alarmów.
1. W konsoli CloudWatch, wybierz Logs Insights. Z rozwijanej listy Select log group(s), wybierz /aws/events/alarms/. Wybierz odpowiedni okres czasu. Zastąp zapytanie tym poniżej, a następnie wybierz Run query.
filter detail.state.value="ALARM" | stats count() as AlarmCount by detail.alarmName | sort AlarmCount desc | limit 5
Polecenie filter w tym wyszukiwaniu znajduje każde zdarzenie ze stanem ALARM. Komenda stats zlicza ile wystąpień jest dla każdej nazwy alarmu. Polecenie sort porządkuje wyniki od największego do najmniejszego (opis). Na koniec polecenie limit zwraca pierwszych pięć wyników.
2. Wybierz Run query, aby zobaczyć wyniki.
Podobnie jak w poprzednim przykładzie, dodaj ten widżet do dashboardu, ustaw go zgodnie z potrzebami, a następnie zapisz dashboard.
Jak długo alarmy były aktywne? (Widżet czasu trwania alarmu)
W tym przykładzie mamy pojedynczą metrykę o wartości 1, gdy stan zmienia się na alarm, oraz o wartości 0, gdy zmienia się na OK.
Znajdując różnicę czasu między tymi punktami danych, możemy znaleźć czas trwania stanu alarmowego. Rysunek 6 przedstawia przykład ukończonego widżetu, w tym liczbę minut w stanie alarmu.
Rysunek 6: Czas trwania alarmu.
Najpierw musimy wybrać metrykę, która będzie używana dla naszego stanu alarmowego.
1. W konsoli CloudWatch przejdź do opcji Metrics > All Metrics. Wybierz przestrzeń nazw metryki (CWAlarms) oraz wymiar (alarmName), a zobaczysz metrykę dla każdego alarmName. Wybierz jeden ze swoich metryk, zaznaczając odpowiednie pole wyboru po lewej stronie. Pokaże się ona na wykresie czasu.
2. Wybierz Graphed metrics.
Korzystając z metric math, najpierw znajdujemy różnicę czasu między bieżącym punktem danych a poprzednim punktem danych, niezależnie od wartości punktów.
3. Wybierz Math expression > Start with empty expression. W kolumnie Details wprowadź następujące wyrażenie i kliknij w znacznik po prawej stronie wyrażenia.
DIFF_TIME(m1)
Dane na wykresie czasu pokażą różnicę czasu w sekundach. Przykład na rysunku 7 pokazuje pierwszy punkt danych trwający ~600 s, czyli 10 minut. Jest to czas między punktami danych o 11:25 i 11:35.
Uwaga: m1 w tym wyrażeniu odnosi się do identyfikatora nadanego oryginalnej metryce, którą dodałeś. Jeśli dane mają inną wartość w kolumnie Id, użyj jej zamiast m1 w wyrażeniu.
Rysunek 7: DIFF_TIME zastosowany do naszych danych metrycznych
4. Następnym krokiem jest zachowanie danych tylko wtedy, gdy metryka jest w stanie alarm. Innymi słowy, czas pomiędzy punktem wartości 0 (stan OK) a poprzednim punktem (wartość 1, stan ALARM). Oznacza to zachowanie wartości, gdy punkt danych wynosi 0, i odrzucenie wartości dla punktów danych o wartości 1. Można to zrobić za pomocą następującego wyrażenia matematycznego:
(1-m1)*DIFF_TIME(m1)
Zmodyfikuj istniejące wyrażenie DIFF_TIME lub utwórz nowe za pomocą tego wyrażenia. Wykres tego wyrażenia pokaże tylko wartości, które znajdują się między stanem ALARM (1) a stanem OK (0) (Rysunek 8).
Rysunek 8: (1-m1)*DIFF_TIME(m1) zastosowane do naszych danych metrycznych.
5. Na koniec musimy uzyskać sumaryczny czas przebywania w stanie alarmowym, więc modyfikujemy wyrażenie na
RUNNING_SUM((1-m1)*DIFF_TIME(m1))
Możesz także zmienić wyniki z sekund na minuty lub dowolną odpowiednią jednostkę czasu, jak pokazano na rysunku 9.
(RUNNING_SUM((1-m1)*DIFF_TIME(m1)))/60
Uwaga: Wyrażenia te obliczają tylko czas między zmianami stanu z In Alarm na OK w czasie wyszukiwania dashboardu. Jeśli alarm zgłosił dane, ale nie zmienił stanu, zostanie wyświetlona wartość 0. Jeśli alarm nie zgłosił żadnych danych, pojawią się dwie kreski.
Rysunek 9: Wynik zastosowania running_sum i konwersji na minuty dla naszych danych metrycznych.
Aby dowiedzieć się więcej o metric math, zobacz dokumentację Using metric math.
6. Chcemy wyświetlić jak długo alarm jest aktywny, więc chcemy zobaczyć pojedynczą wartość dla każdego alarmu. Wyczyść wszystkie pola wyboru oprócz tego obok ostatniego wyrażenia i wybierz Select a Widget type of Number.
Możesz dodać wyrażenia dla wielu alarmów w tym samym widżecie numerycznym.
7. Wybierz rozwijaną listę Actions, a następnie Add to dashboard jak poprzednio.
Kiedy pojawiają się alarmy? (Widżet stanu alarmu)
Rysunek 10 przedstawia widżet dashboardu wykresu czasowego wyświetlający wartość 1, gdy stan to ALARM, oraz wartość 0, gdy jest w stanie OK. Ten wykres czasowy może być przydatny do przeglądania wzorców w odniesieniu do innych alarmów lub innych metryk lub danych time-series.
Rysunek 10: Wykres czasowy przedstawiający stan alarmu.
1. Tak jak poprzednio, zacznij od wybrania metryki używanej dla stanu alarm. W konsoli CloudWatch przejdź do opcji Metrics > All Metrics. Wybierz przestrzeń nazw metryki (CWAlarms) i wymiar (alarmName), a zobaczysz metrykę dla każdego alarmu. Wybierz jedną ze swoich metryk, zaznaczając odpowiednie pole wyboru po lewej stronie. Pokaże się na wykresie czasu.
2. Wybierz zakładkę Graphed metrics.
Stan danych pokazuje punkty danych dla 1 i 0. W zależności od tego, kiedy pojawiają się punkty danych, mogą one być połączone linią lub nie. Dlatego użyjemy wyrażenia matematycznego, aby upewnić się, że widzimy połączone punkty danych, a tym samym ciągłą linię pokazującą stan alarmu w dowolnym momencie.
3. Wybierz Math expression > Start with empty expression. W kolumnie Details wprowadź następujące wyrażenie, a następnie kliknij w mały znacznik po prawej stronie wyrażenia.
FILL(m1,REPEAT)
4. Zaznacz pole po lewej stronie tych danych, aby wyświetlić je na wykresie. Wybierz wpis etykiety i zmień go, aby pokazać coś bardziej znaczącego, na przykład nazwę alarmu.
5. Usuń zaznaczenie pola obok oryginalnej serii (labelled state), aby usunąć ją z wykresu.
Rysunek 11: Seria czasowa pokazująca stan alarmu.
6. Kliknij ikonę ołówka obok tytułu wykresu w lewym górnym rogu, aby zmienić tytuł wykresu na Alarm state.
7. Wybierz menu rozwijane Actions, a następnie Add to dashboard.
Możesz zmodyfikować ten widżet, aby zawierał inne metryki lub umieścić go obok innych widżetów w celu skorelowania wystąpień alarmów z innymi danymi. Aby uzyskać więcej informacji na temat edytowania istniejących widżetów metryk, zapoznaj się z dokumentacją Edit a graph on a CloudWatch dashboard.
Cennik
W tym przykładzie wykorzystano logi, metryki i zasoby dashboardu CloudWatch. Aby uzyskać szczegółowe informacje, zobacz cennik Amazon CloudWatch.
Czynności końcowe
Aby uniknąć opłat na koncie, usuń utworzone zasoby.
- Dashboard CloudWatch: Z dashboardu historii alarmów wybierz opcję Actions > Delete dashboard i wybierz opcję Delete.
- Grupy logów CloudWatch: W konsoli CloudWatch przejdź do Logs > Log groups i wybierz odpowiednią grupę. Z listy rozwijanej Actions wybierz opcję Delete log group(s).
- CloudWatch Metrics nie można usunąć, ale wygasną na podstawie harmonogramu przechowywania wyjaśnionego w FAQ What is the retention period of all metrics.
Jeśli utworzyłeś instancję Amazon EC2 lub zasadę EventBridge w pierwszej części tej serii, pamiętaj również o usunięciu poniższych elementów.
- Instancja Amazon EC2: zapoznaj się z dokumentacją dotyczącą usuwania instancji.
- Reguła EventBridge: zobacz dokumentację dotyczącą wyłączania lub usuwania reguły Amazon EventBridge.
Podsumowanie
W tym poście pokazano, jak tworzyć widżety dashboardu z logów i metryk historii alarmów. Stworzyliśmy widżet alarmowy, widżety z zapytań o wgląd w logi oraz widżety z danych metrycznych wykorzystujących wyrażenia matematyczne metryk.
Aby dowiedzieć się więcej o zapytaniach Logs Insights, zapoznaj się z dokumentacją Analyzing log data with CloudWatch Logs Insights. Aby dowiedzieć się więcej o matematyce metrycznej, zobacz dokumentację Using metric math.
źródło: AWS