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: 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:
Z poziomu nowo otwartego okna przechodzimy do Log groups dostępnego z panelu nawigacyjnego po lewej stronie: 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:
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:
Po poprawnym wywołaniu możemy przejść do zakładki Monitor a następnie kliknąć przycisk View logs in CloudWatch: Zostaniemy przeniesieni bezpośrednio do logów naszej funkcji gdzie możemy podejrzeć cały 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: 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ń: