Miroslav Holec
Premium

Pokročilá diagnostika a monitoring aplikací s Application Insights

Miroslav Holec   9. února 2015  update 10. dubna 2016

Tento článek byl napsán v roce 2015. Vývojářské technologie se neustále inovují a článek již nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Application Insights jsou z mého pohledu velmi perspektivní službou platformy Microsoft Azure, která vývojáři poskytuje detailní pohled na zdraví aplikace. Application Insights umožňují sledovat dostupnost aplikace v čase, responsivitu celého řešení, diagnostikovat chyby na straně serveru a v neposlední řadě i hledat souvislosti mezi chybami díky analýze telemetrií nad uživatelskými relacemi.

Dostupnost Application Insights

S Application Insights se mohli vývojáři setkat už v minulosti v prostředí Visual Studia Online. Microsoft v posledních měsících usilovně vyvíjí nový portál pro správu služeb Azure a tudíž i Application Insights se přesunuli právě do tohoto nového portálu. Na starém je nenajdete a vzhledem ke komplexnosti celé služby ani neočekávám, že by k tomu mělo v blízké době dojít. Služba byla na konferenci Build 2015 oficiálně uvedena do fáze Public Preview a už teď jsou k dispozici různé platební plány (včetně jednoho zdarma). Službu lze aktuálně prohlásit za zcela stabilní. V rámci Public Preview je cena všech plánů účtována s 50 % slevou.

Jak Application Insights fungují

Osobně bych službu rozdělil na 3 části. Tou první je monitoring vybraných stránek formou HTTP requestů z různých lokalit. Druhá část služby nabízí měření na straně klienta (pomocí JS kódu) a nechybí ani část třetí - měření na straně serveru (pomocí SDK). Dobrá zpráva je, že SDK je dostupné i pro alternativní platformy a jazyky - například iOS nebo za předpokladu instalace dodatečného SW i pro jazyk PHP, Java a další. Protože je snahou Microsoftu své cloudové služby zpřístupňovat široké vývojářské komunitě, lze s pohledem do blízké budoucnosti říct, že:

  • Application Insights může používat v podstatě kdokoliv
  • Pro implementaci není nutné své řešení provozovat na platformě MS Azure

Dashboard

Pro jaký jsou typ aplikací

Využití služby je velmi široké a kromě webových aplikací (ASP.NET / J2EE) lze Application Insights nasadit i do mobilních aplikací (Android / iOS / OSX / Win) atd. Jak vyplývá ze způsobu provozu Application Insights (JS kód / SDK), službu lze provozovat prakticky s libovolným hostingem, na vlastním on-premises serveru nebo samozřejmě v prostředí MS Azure (VM, Cloud Services, Web Apps, aj.).

Implementace Application Insights

Vývojář může implementovat klientské nebo serverové měření, případně (nejlépe) obojí. Klientská část funguje podobně jako například Google Analytics, tedy stačí do layoutu stránky před značku HEAD vložit kus JavaScriptového kódu s unikátním ID, které se označuje jako InstrumentationKey. Tento klíč je dohledatelný v nastavení služby v portálu Azure.

Serverová implementace probíhá instalací SDK (ve formě NuGet balíčku) a následným doplněním InstrumentationKey do konfiguračního souboru. Proces instalace a nastavení je popsán přímo na portálu Azure po založení služby. Samotné Visual Studio má v solution nabídce možnost přidat Application Insights do projektu, eventuelně je možné nechat Application Insights nainstalovat společně s nově zakládaným projektem. Tématu implementace budu věnovat příští článek, včetně řešení typických problémů.

Přidání Application Insights ve Visual Studiu

Co Application Insights umí

Popsat možnosti a potenciál služby Application Insights v jednom článku je téměř nemožné. Protože se jedná o nástroj, který dokáže monitorovat kompletní provoz webového projektu, logovat vzniklé chyby a uvést je v souvislosti díky pokročilé telemetrii a custom filtrování, je služba schopna zcela nahradit běžné logovací nástroje (log4net, elmah) i nástroje pro monitoring dostupnosti serveru. V dalších odstavcích jen jmenovitě popíšu nejzajímavější funkce.

Response time

Přehled operací

Dostupnost a responsivita řešení

I bez instalace klientské a serverové části je možné Application Insights použít pro měření dostupnosti webového projektu. Ve své podstatě se jedná o pravidelné requestování určité webové stránky z různých výchozích lokalit (například metodou pingu). Kromě doby odezvy je možné také hlídat, zda se vrací pozitivní odpověď (200) nebo zda vrácený obsah obsahuje určitý řetězec. Pokud je dotazovaná stránka nedostupná, lze si nechat zasílat e-mailové notifikace.

Monitoring

Vývojář má v konečné fázi přehled o celkové dostupnosti aplikace i o dostupnosti a responsivitě řešení v časovém intervalu. Na rozdíl od řady konkurenčních služeb Azure nezobrazuje dostupnost pouze jako průměr, ale z grafu jsou vidět i odchylky v měření. Díky tomu lze sledovat, zda je odpověď dotazované stránky v určitém časovém úseku stabilní, nebo zda dochází k nějaký závažným odchylkám. Na jednotlivé requesty je i detailní pohled, tedy v případě selhání lze vidět i kompletní detaily chyby.

Zajímavou funkcí je i vícekrokový web test (Visual Studio Web Performance and Load Test), který se dá ze solution exportovat a následně importovat do prostředí MS Azure a pravidelně spouštět.

Pokročilá diagnostika chyb

Diagnostika chyb je schopná zcela nahradit běžné nástroje typu log4net nebo například elmah, který sleduje a loguje selhání requestů. Podstatnou výhodou Application Insights je ale možnost hledat souvislosti se vzniklými chybami pomocí sledování telemetrie dané relace. Zatímco běžný logovací nástroj poskytne pouze pohled na stav zásobníku v určitém časovém momentu, Application Insights nabízí pohled i na to, co se těsně před vznikem chyby dělo (v rámci uživatelské relace nebo v rámci celého řešení).

Telemetrie

Application Insights je velmi pokročilý dashboard, který umí navíc sledovat, jak často konkrétní chyba vzniká a zobrazit tyto údaje vizuálně. Díky podrobným filtrům navíc není problém selhání vytřídit například podle assembly, ve které došlo k problému nebo podle uživatelského prohlížeče. Vzniká zde viditelná synergie klientského a serverového měření.

Sledování requestu až ke call stacku

Do Application Insights lze posílat i vlastní chyby, typicky při selhání v blocích try/catch a to nejen v C# kódu ale i v JavaScriptovém kódu. Kouzlo Application Insights je navíc v tom, že k logované chybě lze připojit i doprovodné properties formou dictionary, díky kterým lze chybu později snadno rozklíčovat. Globální trackování chyb na úrovni (například) celého MVC projektu, Web API nebo WCF jsou samozřejmostí.

Diagnostika závislostí v AppInsights

Zcela unikátní je možnost diagnostikovat vzniklé problémy ve spojení s dalšími službami. V případě webových aplikací postavených na ASP.NET je řeč o SQL databázi, Azure DocumentDB nebo Azure Queue / Storage. V případě Java aplikací lze uvést v souvislost komunikaci s databází skrze JDBC (MySQL / SQL / SQLite). Pro IIS je obecně možné doinstalovat extension s názvem Status Monitor, v případě hostování aplikace na MS Azure stačí pouze využít rozšíření (Application Insights + New Relic).

Závislosti lze hledat například při analýze výkonnosti. Application Insights nabízí pohled na dlouhotrvající requesty, ze kterých lze extrahovat informace o vzdálených závislostech (tedy právě například volání SQL serveru a dobu vykonání požadavku). Právě touto cestou lze snadno identifikovat úzká místa aplikace a snadno je odstranit.

Trasování chyb

Diagnostic Search

Skutečným diagnostickým kladivem je diagnostic search, který nabízí dokonalé možnosti filtrování různých položek od zobrazení stránek, přes pohledy na requesty až k podrobné analýze výjimek. Samotné filtry pak umožňují zobrazovat jen položky dle velmi specifických kritérií a tyto položky následně blíže zkoumat (informace o requestech, uživateli, diagnostika závislostí, telemetrie relace aj.). Pro samotné filtrování Application Insights nabízí i silné možnosti dotazování (operátory AND / OR / CONTAINS / NOT, atd.). Takto podrobné filtry a výsledky hledání lze dále ukládat mezi oblíbené a zpřístupnit je tak pro pozdější použití.

Browser analýza

Zkusit nebo ne?

Application Insights nabízí velmi pokročilé možnosti diagnostiky aplikace na jednom jediném místě. Vývojář nemusí mít v prostředí MS Azure spuštěny žádné jiné služby pro to, aby mohl svou aplikaci zdarma diagnostikovat, analyzovat vzniklé chyby nebo monitorovat dostupnost celého řešení. Vzhledem k tomu, že i samotná instalace v případě hladkého průběhu nezabere více než půl hodiny, nelze než doporučit Application Insights vyzkoušet.