Azure: Definiowanie alertu w oparciu o metryki w PowerShell

19-Wrz-2022

Azure Monitor pozwala na konfigurację alertów, które zostaną wyzwolone w przypadku zwiększonego wykorzystania zasobów wybranego obiektu infrastruktury, np. przeciążonego CPU, dysku sieci, ale także w oparciu o przekroczenie licznika pewnych zdarzeń, jak np. liczba nieudanych logowań w określonym czasie. Poniżej możesz zobaczyć, jak stworzyć taki alert przy pomocy powershella.

Na początek należy się zalogować do Azure i w razie potrzeby wybrać subskrypcję:

Przyda się też kilka zmiennych przechowujących pomocnicze dane:

Teraz pora na zdefiniowanie kilku metryk. Dla własnej wygody robię to poprzez zdefiniowanie listy słowników:

Mamy tutaj informacje o metryce, którą należy zmierzyć, o progowej wartości tej metryki oraz jak ją mierzyć. Pomiaru dokonuje się w określonym czasie (window_size), z określoną częstością (frequency) i w zależności od metryki dokonuje się pewnej agregacji (aggregation). Mając różne warunki, można tworzyć alerty o różnych priorytetach, stąd w słowniku zapisuję też severity.
Alerty będą skonfigurowane dla określonego obiektu, dlatego potrzebne też są zmienne definiujące ten obiekt. Tutaj jest to nazwa grupy zasobów i nazwa serwera z tej grupy zasobów:
Teraz pora na zabawę – przechodzimy przez każdy warunek, który powinien mieć zdefiniowany alert i uruchamiamy funkcję definiującą alert:
Fajnie wygląda, ale funkcję set-metric_alert trzeba zdefiniować. Oto definicja funkcji, a jej opis umieszczam poniżej:

Oto komentarz do poszczególnych kroków:
  • Na początku przyjmujemy parametry. Na uwagę zasługuje ewentualnie adres email – u nas jest to lista napisów [string[]]
  • Dla wygody wyciągam definicję warunku wyzwolenia alertu do zmiennych lokalnych
  • Każdy alert musi mieć nazwę i musi być umieszczony w jakiejś grupie zasobów. Tutaj założyłem, że alert powstanie w tej samej grupie zasobów, co monitorowany zasób, a nazwa będzie ustalona dynamicznie
  • Alert będzie wysyłał powiadomienia, a tych powiadomień może być więcej. Wszystkie one będą umieszczone w action group. Dlatego:
    • definiuję ‚action group receiver’ polegającą na powiadomieniu administratora o sytuacji zaistniałej na serwerze. Tutaj jest to zrobione dla adresu email, ale możliwe jest dodanie także powiadomienia przez SMS, a idąc jeszcze dalej zamiast zwykłego powiadamiania, możnaby uruchamiać job-a, który być może zaistniały problem jest w stanie rozwiązać
    • tworzę  ‚action group’, który łączy w sobie aktywności, które należy wykonać. Ze względów technicznych potrzebny jest obiekt w pamięci wskazujący na action group. Można go uzyskać za pomocą polecenia New-AzActionGroup
  • W oparciu o przesłane warunki, budujemy obiekt Alert Rule. Podczas tworzenia tego obiektu, może być wyświetlany dodatkowy komunikat o zależnościach między obiektami, które są ukryte przed nami. Jeśli nie chcesz widzieć tych ostrzeżeń, dodaj do polecenia WarningAction
  • Kluczowa sprawa – utworzenie alertu. Jedno polecenie, które łączy w sobie warunki wyzwolenia alertu z action group, obiektem, który ma być monitorowany, sposobem pomiaru wartości

I to w sumie tyle – od tej pory, gdy zostanie przekroczona wartość metryki, wyzwoli się alert, który wyśle maila. Oto cała zawartość skryptu:

Komentarze są wyłączone

Autor: Rafał Kraik