Post stanowi rozszerzenie informacji, jakie zawarłem w poprzednim poście traktującym o wzorcach Try-Catch w Microsoft Flow. W tym skupiam się na opisaniu, jak rejestrować błędy występujące w przepływach Microsoft Flow, w jednym miejscu, korzystając z usługi Azure Application Insights.

Zobacz nagranie demo, pokazujące jak działa opisywane tutaj rozwiązanie:

Konfigurowanie Application Insights

Microsoft Docs opisuje tę usługę jako rozszerzalną usługę zarządzania wydajnością aplikacji (APM) dla web developerów, dla wielu platform. Można jej używać do monitorowania aplikacji internetowej na żywo. Automatycznie wykryje anomalie wydajności. Zawiera zaawansowane narzędzia analityczne, które pomagają diagnozować problemy i zrozumieć, co użytkownicy robią z aplikacją. Została zaprojektowana, aby pomóc stale poprawiać wydajność i użyteczność.

Aby stworzyć własną usługę, po prostu wpisz „Application Insights” w wyszukiwarce po kliknięciu na „Create a resource” i następnie kliknij „Create”.

Po utworzeniu pamiętaj o skopiowaniu Instrumentation Key – konieczne jest dla autoryzowania połączeń z serwisem:

Teraz jesteś gotów do zbudowania swojej własnej usługi logowania błędów.

Ważne! Na dzień dzisiejszy usługa Application Insights nie posiada żadnych interfejsów API, co pozwoliłoby nam wywoływać ją bezpośrednio z Flow. Ponieważ jednak posiada wiele SDK: .NET, Node.JS, Java EE i inne, dlatego można wywoływać ją za pomocą własnych funkcji.

Azure Function

Jak wspomniałem powyżej: usługa Application Insights nie ma interfejsu API, ale ma zestaw SDK. Dlatego, aby wywołać ją z Flow, musimy faktycznie utworzyć Azure Function, która będzie działać jako proxy między Flow, a usługą.

Ja napisałem moją funkcję w Node.JS. Zrobiłem to bezpośrednio przez interfejs portalu Azure, korzystając z dokumentacji znajdującej się tu: https://github.com/Microsoft/ApplicationInsights-node.js/ i tu: https://docs.microsoft.com/en-us/azure/azure-monitor/app/nodejs.

Na początku kodu funkcji musisz zdefiniować używane solucje (czyli App Insights SDK z npm) i następnie podać Instrumentation Key, o którym wspomniałem powyżej:

const appInsights = require("applicationinsights");
appInsights.setup(process.env["InsightsKey"]);
const client = appInsights.defaultClient;

Teraz, w zależności od konkretnych wymagań, utwórz funkcję wywoływaną bezpośrednio przez żądanie HTTP lub przez Azure Queue. Niezależnie od tego, jak to zrobisz, dodanie nowego zdarzenia do logu usługi Application Insights jest bardzo proste:

function RegisterFlowError (contents) {
    try {
        var propertiesData = JSON.parse(contents);
        var error = new FlowError(propertiesData["Correlation Id"]);
        error.Source = "Error in Flow";

        client.trackException({ exception: new Error("Error in Flow"), properties: propertiesData });
    }
    catch (e) {
        return false;
    }
    return true;
}

W moim przypadku funkcja jest uruchamiana przez żądanie HTTP. W body żądania znajduje się tablica JSON śledzonych właściwości (propertiesData) dotyczących złapanego wyjątku. Powyższa funkcja pobiera dane i tworzy nowy wpis w usłudze Application Insights.

Naturalnie istnieją inne typy, poza wyjątkami, możliwych do rejestrowania zdarzeń: https://docs.microsoft.com/en-us/azure/azure-monitor/app/nodejs#telemetryclient-api.

Logowanie błędów w Microsoft Flow z Application Insights

Robię to, wywołując po prostu moją funkcję Azure przy użyciu akcji żądania HTTP, umieszczonej w bloku „Catch” opisanego tutaj wzorca „Try-Catch”, dla każdego znalezionego działania zakończonego niepowodzeniem:

Przeglądanie logów w Application Insights

Ważne! Zarejestrowanie nowego wpisu w logu i udostępnienie go do analizy zajmuje do 5 minut!

By przejrzeć wszystkie, złapane błędy, po prostu przejdź do wyszukiwarki w konsoli Application Insights i otwórz jeden, z pokazanych wyjątków:

Application Insights custom exception entry

W moim przypadku każdy wpis zawiera domyślne informacje o błędzie (Exception Properties) oras zestaw customowych (Custom Properties) przesłanych z Flow do funkcji Azure poprzez body żądania http. Dodatkowo, w przypadku monitorowania wyjątków, przydatnym narzędziem może okazać się strona „Failures”, która pozwala na przegląd błędów wg typu i w czasie:

Application Insights failures page

Gdzie jeszcze mogę monitorować błędy?

Jeśli nie jesteś programistą, nadal możesz uzyskać dostęp do dwóch usług wchodzących w skład „pudełka” Power Platform, w których możesz sprawdzić, jak działają Twoje przepływy:

Flow analytics

Pulpit nawigacyjny z analizą określonego przepływu. Aby uzyskać do niego dostęp, kliknij ikonę „Analytics” na stronie szczegółów przepływu:

Daje przegląd wszystkich przebiegów do 30 dni, a także szczegółowe informacje na temat błędów, akcji i przyczyn:

Całkiem przydatne, ale niestety tylko dla ostatnich 30 dni i odświeżane raz / dwa razy dziennie.

PowerPlatform Admin Center

To jest druga opcja. Jest nadal w wersji zapoznawczej (preview), dostępna za pośrednictwem adresu URL: https://admin.powerplatform.microsoft.com/analytics/. Zapewnia ogólny obraz stanu i wydajności platformy. Jedną z analiz dostępnych dla Flow jest „Errors”:

Jednak podobnie jak w przypadku danych analitycznych Flow – aktualizowane są do 2 razy dziennie i dostępne jedynie dla ostatnich 28 dni, bez konkretnych szczegółów – po prostu dostarcza informację, że coś może być nie tak, ale nadal wymaga sprawdzenia źródła, co faktycznie nie działa.

Dziękuję za dotarcie do końca! Mam nadzieję, że zainspirował Cię ten post. Jeśli masz jakieś pytania lub potrzebujesz mojego wsparcia, nie wahaj się i zostaw mi komentarz lub wyślij wiadomość e-mail.