Paweł Łukasiewicz
2022-04-05
Paweł Łukasiewicz
2022-04-05
Udostępnij Udostępnij Kontakt
Wprowadzenie

Funkcje utworzone jako AWS Lambda są monitorowane przez CloudWatch. Usługa ta pomaga w rejestrowaniu wszystkich żądań kierowanych do funkcji. W tym wpisie omówimy powyższą usługę, spojrzymy na przykładowe logi oraz metryki naszej funkcji.

Podobnie jak w poprzednim wpisie posłużymy się środowiskiem Node.js, aby mieć możliwość modyfikacji kodu z poziomu konsoli AWS. Dla nas, programistów C#, nie będzie to żaden problem ponieważ kod będzie na tyle czytelny i prosty, że byliśmy w stanie bardzo szybko napisać odpowiednik dla naszego języka.

Omówienie zaczniemy od dodania funkcji: AWS: CloudWatch - tworzenie nowej funkcji z poniższym kodem:

exports.handler = async (event, context, callback) => {
	console.log("Monitrowanie funkcji Lambda przy wykorzystaniu CloudWatch.");
	callback(null, "Witajcie z Lambdy");
};

CloudWatch najlepiej znaleźć korzystając z wyszukiwarki usług: AWS: CloudWatch - wyszukiwarka usług

Z poziomu nowo otwartego okna przechodzimy do Log groups dostępnego z panelu nawigacyjnego po lewej stronie: AWS: CloudWatch - grupy logów W tym miejscu znajdziecie dzienniki zdarzeń wg. funkcji utworzonych na Waszych kontach. Jeżeli nie doszło do wywołania danej funkcji, bądź nie ma żadnych logów, nie będzie jej na tej liście: AWS: CloudWatch - grupy logów dla danej funkcji

Na powyższej liście brakuje funkcji cloudWatchTest, którą utworzyliśmy kilka kroków temu. Wszystko dlatego, że nie doszło do żadnego wywołania - chciałem również pokazać inną drogę, którą możemy dostać się do logów funkcji. Wracamy zatem do naszej funkcji, klikamy przycisk Test tworząc nowe zdarzenie: AWS: CloudWatch - nowe zdarzenie

Po poprawnym wywołaniu możemy przejść do zakładki Monitor a następnie kliknąć przycisk View logs in CloudWatch: AWS: CloudWatch - monitoring funkcji Zostaniemy przeniesieni bezpośrednio do logów naszej funkcji gdzie możemy podejrzeć cały dziennik zdarzeń: AWS: CloudWatch - dziennik zdarzeń Dokładnie w taki sposób będziemy sprawdzali czy nasze funkcje działają poprawnie, czy nie są zwracane żadne błędy oraz czy dane zostały przetworzone w sposób w jaki sobie założyliśmy.

Dodajmy wyzwalacz na naszą funkcję i spróbujemy wygenerować jakiś błąd. W pierwszej kolejności, z poziomu ekranu szczegółowego naszej funkcji, klikamy przycisk Add trigger i dodajemy wyzwalacz na utworzony wcześniej kubełek S3: AWS: CloudWatch - wyzwalacz na S3 Następnie dodamy parę linii kodu w którym odniesiemy się do nieistniejącego obiektu:

exports.handler = async (event, context, callback) => {
	console.log("Monitrowanie funkcji Lambda przy wykorzystaniu CloudWatch.");
    
	// W tej linii powiniśmy zobaczyć błąd w naszych logach
	const bucket = event.Records[0].bucket.name;
    
	const filename = event.Records[0].s3.object.key;
	const message = `File is uploaded in - ${bucket} -> ${filename}`;
	console.log(message);
    
	callback(null, "Witajcie z Lambdy");
};

W wyniku wywołania powyższego kodu powinniśmy zobaczyć błąd w dzienniku zdarzeń: AWS: CloudWatch - błąd w dzienniku zdarzeń

Metryki

Usługa CloudWatch daje nam również dostęp do metryk, które wyświetlają szczegóły takie jak czas wykonywania funkcji, ilość wywołań czy liczbę błędów do których doszło w trakcie wykonywania.

Dostęp do metryk możliwy jest z poziomu ekranu szczegółowego naszej funkcji: AWS: CloudWatch - metryki Na powyższym zrzucie ekranu możecie m.in. zobaczyć informację o błędzie, który wygenerowaliśmy pisząc niepoprawny kod. Wykresy te zostały utworzone automatycznie dla naszej funkcji. Nieco inny zestaw danych dostaniecie dla innych usług takich jak chociażby DynamoDB. Jeżeli dane te są dla Was niewystarczające możecie stworzyć swój własny Dashboard, który poza metrykami może zawierać również informacje o aktualnych alarmach (np. liczba błędów przekraczająca wartość 1 w przeciągu ostatniej godziny) oraz wycinki dziennika zdarzeń na słowa kluczowe takie jak Error - w przypadku rozbudowanej architektury nie będziecie musieli obserwować każdego elementu osobno - wystarczy Dashboard z kluczowymi informacjami.

Dasbhoard tworzymy z poziomu usługi CloudWatch klikając na pierwszy element panelu nawigacyjnego dostępnego po lewej stronie (to jednak nie jest tematem tego wpisu): AWS: CloudWatch - dashboard