Jak włączyć alarmy Amazon CloudWatch, aby wysyłały powtarzające się powiadomienia?
Alarmy Amazon CloudWatch są natywnie zintegrowane z danymi Amazon CloudWatch. Wiele usług AWS wysyła metryki do CloudWatch, a AWS oferuje również wiele podejść, które pozwalają emitować metryki aplikacji jako niestandardowe metryki.
Alarmy CloudWatch pozwalają monitorować zmiany metryk podczas przekraczania progu statycznego lub wypadania poza pasmo wykrywania anomalii. Ponadto umożliwiają monitorowanie obliczonych wyników wielu alarmów. Następnie alarmy CloudWatch automatycznie inicjują akcje, gdy ich stan zmienia się pomiędzy OK, ALARM i INSUFFICIENT_DATA.
Najczęściej stosowaną akcją alarmową jest powiadomienie zainteresowanej osoby lub wywołanie automatyzacji downstream poprzez wysłanie wiadomości do tematu Amazon Simple Notification Service (SNS). Alarmy CloudWatch są zaprojektowane tak, aby wywoływały tylko akcje alarmowe, gdy nastąpi zmiana stanu. Jedynym wyjątkiem są akcje autoskalowania, w których akcja skalowania będzie wywoływana okresowo, gdy alarm pozostanie w stanie skonfigurowanym dla akcji.
Istnieją scenariusze, w których przydatne może okazać się wielokrotne powiadamianie o niektórych alarmach krytycznych, aby odpowiedni zespół został ostrzeżony o natychmiastowym podjęciu działań. W tym artykule autorzy pokażą Ci, jak korzystać z Amazon EventBridge, AWS Step Function i AWS Lambda, aby włączyć powtarzające się powiadomienia o alarmach w wybranych alarmach CloudWatch. Omówią również inne przypadki użycia dostosowywania, które można osiągnąć przy zmianie stanu alarmowego przy użyciu tego samego modelu rozwiązania.
Zestawienie
Od 2019 roku Amazon EventBridge jest zintegrowany z Amazon CloudWatch, dzięki czemu, gdy zmieni się stan alarmu CloudWatch, odpowiednie zdarzenie zmiany stanu alarmu CloudWatch jest wysyłane do usługi EventBridge. Możesz utworzyć regułę EventBridge z dostosowanym wzorcem reguły do przechwycenia:
- wszystkie zdarzenia zmiany sceny alarmowej;
- przejścia alarmów do poszczególnych stanów;
- zdarzenia zmiany stanu alarmów z określonymi nazwami z prefiksem.
Dopasowane zdarzenia oznaczają, że reguła wywołuje kolejne automatyzacje w celu przetworzenia zdarzenia zmiany stanu alarmu. To rozwiązanie wykorzystuje funkcję AWS Step do organizowania przepływu pracy z powtarzającymi się powiadomieniami o alarmach.
W tym rozwiązaniu umożliwimy wielokrotne powiadamianie o alarmie poprzez nałożenie określonego tagu na zasoby alarmowe CloudWatch. W ramach funkcji Step funkcja Lambda może wysyłać zapytania do zmiennych wyzwolonego alarmu i przetwarzać dalej tylko wtedy, gdy występuje określona zmienna . Co więcej, takie podejście umożliwia utworzenie scentralizowanego widoku wszystkich alarmów z włączonym powtarzaniem powiadomień o alarmach poprzez utworzenie grupy zasobów opartej na znacznikach. Grupa zasobów jest dołączona jako opcjonalna część tego rozwiązania.
Architektura rozwiązania
To rozwiązanie jest wdrażane jako aplikacja AWS Cloud Development Kit (CDK), która wdraża zasoby wyróżnione w niebieskim prostokącie na poniższym diagramie na Twoim koncie AWS. Te zasoby to:
- Reguła EventBridge do przechwytywania wszystkich zdarzeń zmiany stanu alarmów.
- Funkcja Lambda do sprawdzania znacznika alarmu, opisywania aktualnego stanu alarmu i wysyłania powiadomień do istniejących akcji alarmowych SNS dotyczących alarmu.
- Maszyna stanów Step Function z zadaniem oczekiwania, wspomnianą wcześniej funkcją Lambda jako zadaniem i zadaniem wyboru.
- Dwie role AWS Identity and Access Management (IAM) używane przez EventBridge do wywoływania funkcji Step oraz przez Lambdę do wykonywania wymaganych działań.
- (Opcjonalnie) Grupa zasobów oparta na znacznikach zawierająca wszystkie alarmy CloudWatch ze znacznikiem włączenia funkcji.
To rozwiązanie działa w następujący sposób:
1. Alarm CloudWatch zostaje wyzwolony i przechodzi w stan ALARM.
2. Alarm CloudWatch wysyła pierwsze powiadomienie alarmowe do powiązanych akcji alarmowych SNS.
3. Usługa CloudWatch Alarms wysyła zdarzenie zmiany stanu alarmu, które wyzwala regułę EventBridge. Zastosowany wzorzec reguły jest przedstawiony w taki sposób, który przechwytuje wszystkie zmiany stanu alarmów w zdarzeniu ALARM.
4. W przypadku zdarzenia dopasowania, reguła EventBridge wywołuje cel funkcji Step.
5. Po rozpoczęciu wykonywania funkcji Step, najpierw przechodzi ona w stan oczekiwania („Wait X Seconds”, jak pokazano na poniższym rysunku). Okres oczekiwania można skonfigurować w aplikacji CDK i przekazać do definicji automatu skończonego.
6. Następnie funkcja Step wchodzi do zadania Lambda Invocation („Sprawdź tag i status alarmu” na poniższym rysunku).
Zadanie wywołania Lambda:
- Sprawdza, czy alarm ma określony klucz tagu i wartość (np. RepeatedAlarm:true). Jeśli nie, funkcja kończy działanie
- Sprawdza aktualny stan alarmu, wykonując API DescribeAlarms z nazwą alarmu.
- Publikuje status istniejącego alarmu zwrócony z wywołania API DescribeAlarms do wszystkich tematów SNS subskrybowanych w alarmie
- Zwraca aktualny stan alarmu wraz z oryginalnie odebranym zdarzeniem z powrotem do funkcji Step.
- Stan Choice („Czy alarm nadal jest w stanie ALARM?” na rysunku poniżej) sprawdza stan alarmu zwracany przez funkcję Lambda i kieruje przepływ pracy do stanu „Wait”, jeśli stan alarmu to „ALARM”, w przeciwnym razie kończy wykonywanie funkcji kroku.
Powtarzające się powiadomienie o alarmie w ramach powyższego przepływu pracy zatrzymuje się, gdy:
- alarm przechodzi w stan inny niż ALARM;
- alarm został usunięty;
- określona zmienna zostanie usunięta z alarmu.
Procedury
Teraz pora wdrożyć rozwiązanie i sprawdzić, jak działa.
Warunki wstępne
- Konto AWS z dostępem do interfejsu wiersza poleceń AWS (CLI);
- Node.js 10.13 lub późniejszy;
- AWS CDK;
- Usługa Docker (w stanie uruchomionym podczas wykonywania poniższych kroków).
Krok 1: Wdróż rozwiązanie korzystając z AWS CDK
Przed wdrożeniem aplikacji CDK upewnij się, że masz zainstalowany interfejs AWS CDK CLI i uruchomione konto AWS, jak opisano tutaj. Następnie uruchom następujące polecenie z terminala, aby pobrać kod rozwiązania i wdrożyć:
git clone https://github.com/aws-samples/amazon-cloudwatch-alarms-repeated-notification-cdk.git
cd amazon-cloudwatch-alarms-repeated-notification-cdk
npm install
npm run build
cdk bootstrap #Required for first time CDK deployment
cdk deploy --parameters RepeatedNotificationPeriod=300 --parameters TagForRepeatedNotification=RepeatedAlarm:true --parameters RequireResourceGroup=false
Za pomocą polecenia „cdk deploy” możesz również skonfigurować następujące parametry:
- RepeatedNotificationPeriod: czas w sekundach między dwoma kolejnymi powiadomieniami o alarmie. Wartość domyślna to 300 w kodzie CDK.
- TagForRepeatedNotification: Tag używany do włączania wielokrotnego powiadamiania o alarmie. Musi być w parze klucz:wartość. Wartość domyślna tego parametru to RepeatedAlarm:true.
- RequireResourceGroup: określa, czy utworzyć grupę zasobów opartą na znacznikach do monitorowania wszystkich alarmów CloudWatch z włączonym wielokrotnym powiadamianiem. Dozwolone wartości: prawda/fałsz.
Krok 2: Zaczekaj na zakończenie wdrażania
Ze względu na to, że jest to nowe wdrożenie, zobaczysz podsumowanie zasobów uprawnień utworzonych na koncie docelowym. Te zasoby uprawnień są używane przez składniki rozwiązania. Żadne zmiany nie są wprowadzane w żadnych istniejących zasobach uprawnień na Twoim koncie. Możesz przejrzeć zmianę i zaakceptować, wpisując „y”, aby kontynuować wdrażanie.
Następnie zobaczysz postęp wdrażania ze swojego terminala. Poczekaj, aż się skończy. Możesz również zobaczyć postęp wdrożenia z CloudFormation.
Krok 3: Przetestuj rozwiązanie
Po zakończeniu wdrażania możesz przetestować rozwiązanie na alarmie, stosując tag, którego użyłeś.
- Znajdź alarm testowy ze stanem ALARM i powiązanymi akcjami alarmowymi SNS.
- Zastosuj tag do wybranego alarmu za pomocą następującego polecenia AWS CLI:
aws cloudwatch tag-resource --resource-arn arn:aws:cloudwatch:<region>:<account_id>:alarm:<alarm_name> --tags Key=RepeatedAlarm,Value=true
Ręcznie ustaw stan alarmu na OK za pomocą polecenia set-alarm-state CLI:
aws cloudwatch set-alarm-state --alarm-name <alarm_name> --state-value OK --state-reason "test"
- Poczekaj na kolejną ocenę alarmu.W przypadku alarmu standardowego dokona on ponownej oceny w ciągu jednej minuty i przejdzie do swojego aktualnego stanu.
- Sprawdź, czy co pięć minut otrzymujesz powiadomienie ALARM.Ponowne powiadomienie będzie miało temat podobny do następującego:
Krok 4: Wyświetl wszystkie alarmy, dla których włączono powtarzanie powiadomień
Grupy zasobów AWS umożliwiają wyszukiwanie i grupowanie zasobów AWS na podstawie tagów. Autorzy artykułu przedstawią, jak tego użyć, aby mieć scentralizowany widok wszystkich alarmów z włączonym wielokrotnym powiadamianiem.
- Przejdź do konsoli Resource Groups & Tag Editor.
Jeśli wybierzesz „prawda” dla RequireResourceGroup podczas wdrażania kodu CDK, zobaczysz zasób oparty na tagach o nazwie „repeatedAlarmsGroup”.
Możesz teraz przeglądać wszystkie alarmy z włączonym wielokrotnym powiadamianiem.
Krok 5: Wyłącz powtarzające się powiadomienia i odznacz alarm
Uruchom następujące polecenie CLI, aby usunąć tag z alarmu CloudWatch. Powinieneś zobaczyć, jak alarm zniknie również z grupy zasobów utworzonej w poprzednim kroku:
aws cloudwatch untag-resource --resource-arn arn:aws:cloudwatch:<region>:<account_id>:alarm:<alarm_name> --tag-keys RepeatedAlarm
Dalsza lektura
W kwietniu 2021 r. zapewniono obsługę routingu zdarzeń między regionami w EventBridge. Wraz z uruchomieniem tej funkcji wystarczy wdrożyć to rozwiązanie w jednym z obsługiwanych regionów docelowych, aby przetwarzać powtarzający się przepływ powiadomień w przypadku alarmów w dowolnym komercyjnym regionie AWS. Możesz wdrożyć to rozwiązanie w dowolnym z obsługiwanych regionów docelowych wymienionych tutaj. Rozwiązanie pokazano na poniższym schemacie:
Ta struktura umożliwia scentralizowanie zdarzeń zmiany stanu alarmów z dowolnego regionu komercyjnego do jednego obsługiwanego regionu. To z kolei znacznie zmniejsza koszty operacyjne związane z zarządzaniem zasobami i rozwiązywaniem problemów.
Możesz również użyć Amazon EventBridge do przechwytywania zdarzeń zmiany stanu alarmów i organizowania dalszych przepływów pracy w celu wykonywania bardziej zaawansowanych zadań przetwarzania alarmów z wykorzystaniem różnych celów obsługiwanych przez Amazon EventBridge. Na przykład możesz wzbogacić/sformatować/wydrukować komunikat alarmowy lub wykonać playbooki z celem funkcji Lambda lub automatyzacją SSM.
Porządki
By uniknąć dodatkowych kosztów infrastruktury z przykładów opisanych w tym poście, usuń wszystkie utworzone zasoby. Możesz po prostu wyczyścić zasoby, uruchamiając następujące polecenie:
cd amazon-cloudwatch-alarms-repeated-notification-cdk
cdk destroy
Dodatkowo stworzona w tym rozwiązaniu funkcja Lambda będzie logować się do grupy CloudWatch Log z prefiksem „/aws/lambda/RepeatedCloudWatchAlarm”. Pamiętaj, aby usunąć grupę logów, aby uniknąć opłat za przechowywanie CloudWatch Log.
Wnioski
W tym artykule autorzy zaproponowali rozwiązanie, które umożliwia wielokrotne powiadamianie o alarmach CloudWatch z wykorzystaniem zdarzenia zmiany stanu alarmu za pośrednictwem Amazon EventBridge i AWS Step Function. Dzięki temu rozwiązaniu, miejmy nadzieję, nie przeoczysz żadnych alarmów o znaczeniu krytycznym i skrócisz czas reakcji na incydent. Tę samą strukturę można również rozszerzyć w celu obsługi bardziej zaawansowanych zadań przetwarzania alarmów.
źródło: AWS