Hloubková diagnostika webových aplikací a služeb pomocí Application Insights

Tento článek vysvětluje, jak Application Insights zapadá do cyklu DevOps.

Proč potřebuji Application Insights?

Application Insights monitoruje spuštěnou webovou aplikaci. Informuje o chybách a problémech s výkonem a pomáhá analyzovat, jak vaši aplikaci používají zákazníci. Funguje pro aplikace běžící na platformách, jako jsou ASP.NET, Java EE a Node.js. Hostuje se v cloudu nebo místně.

Obrázek znázorňující aspekty složitosti doručování webových aplikací

Je nezbytné monitorovat moderní aplikaci, když je spuštěná. Chcete detekovat selhání dříve, než to zákazníci udělají. Chcete také zjistit a opravit problémy s výkonem, které zpomalují věci nebo způsobují nepříjemnosti uživatelům. Když systém funguje k vaší spokojenosti, chcete také vědět, co s ním uživatelé dělají. Používají například nejnovější funkci? Daří se jim to?

Moderní webové aplikace se vyvíjejí v cyklu průběžného doručování:

  • Uvolněte novou funkci nebo vylepšení.
  • Sledujte, jak dobře funguje pro uživatele.
  • Na základě těchto znalostí naplánujte další přírůstek vývoje.

Klíčovou součástí tohoto cyklu je fáze pozorování. Application Insights poskytuje nástroje pro monitorování výkonu a využití webové aplikace.

Nejdůležitějším aspektem tohoto procesu je diagnostika a diagnostika. Pokud aplikace selže, dojde ke ztrátě obchodních údajů. Hlavní rolí monitorovací architektury je:

  • Spolehlivě zjišťujte chyby.
  • Okamžitě vás o tom informujte.
  • Předvádění informací potřebných k diagnostice problému.

Application Insights provádí tyto úlohy.

Odkud pocházejí chyby?

K selháním ve webových systémech obvykle dochází kvůli problémům s konfigurací nebo špatným interakcím mezi jejich mnoha komponentami. Prvním úkolem při řešení živého incidentu na webu je identifikovat hlavní část problému. Která komponenta nebo vztah je příčinou?

V jednodušší době běžel počítačový program na jednom počítači. Vývojáři ho před odesláním důkladně otestovali a po odeslání ho málokdy viděli nebo o něm znovu přemýšleli. Uživatelé se museli po mnoho let vymýšlet se všemi zbytkovými chybami.

Teď se proces výrazně liší. Vaše aplikace má velké množství různých zařízení, na kterých můžete běžet, a může být obtížné zaručit naprosto stejné chování u každého z nich. Hostování aplikací v cloudu znamená, že chyby je možné rychle opravit. Zároveň to ale znamená, že v častých intervalech existuje nepřetržitá konkurence a očekávání nových funkcí.

Za těchto podmínek je jediným způsobem, jak si zachovat pevnou kontrolu nad počtem chyb, automatizované testování částí. Není možné ručně znovu otestovat všechno při každém doručení. Test jednotek je teď běžnou součástí procesu sestavení. Nástroje, jako je Xamarin Test Cloud, pomáhají tím, že poskytují automatizované testování uživatelského rozhraní ve více verzích prohlížečů. Tyto testovací režimy nám umožňují doufat, že rychlost chyb nalezených v aplikaci bude možné udržet na minimu.

Typické webové aplikace mají mnoho živých komponent. Spolu s klientem (v prohlížeči nebo aplikaci zařízení) a webovým serverem bude pravděpodobně docházet k podstatnému back-endu zpracování. Back-end je možná kanál komponent nebo volná kolekce spolupracujících částí. Mnohé z nich nebudete mít pod kontrolou. Jedná se o externí služby, na kterých závisíte.

V takových konfiguracích může být obtížné a neekonomické testovat nebo předvídat všechny možné režimy selhání kromě samotného aktivního systému.

Dotazy

Tady je několik otázek, které byste si měli položit při vývoji webového systému:

  • Dochází k chybovému ukončení vaší aplikace?
  • Co se přesně stalo? Pokud žádost selhala, chcete vědět, jak se tam dostala. Potřebujete trasování událostí.
  • Je vaše aplikace dostatečně rychlá? Jak dlouho trvá reakce na typické požadavky?
  • Dokáže server zvládnout zatížení? Když se rychlost požadavků zvýší, je doba odezvy stabilní?
  • Jak reagují vaše závislosti, jako jsou rozhraní REST API, databáze a další komponenty, které vaše aplikace volá? Konkrétně pokud je systém pomalý, je to vaše komponenta nebo dostáváte pomalé odpovědi od někoho jiného?
  • Je vaše aplikace spuštěná nebo mimo provoz? Je to vidět z celého světa? Musíš vědět, jestli se to zastaví.
  • Co je původní příčinou? Došlo k selhání ve vaší komponentě, nebo o závislost? Jedná se o problém s komunikací?
  • Kolika uživatelů se to týká? Pokud potřebujete vyřešit více než jeden problém, který je nejdůležitější?

Co je Application Insights?

Obrázek znázorňující základní pracovní postup Application Insights

  1. Application Insights používá vaši aplikaci a odesílá o ní telemetrii, když je spuštěná. Buď můžete sadu Application Insights SDK sestavit do aplikace, nebo můžete instrumentaci použít za běhu. První metoda je flexibilnější, protože do běžných modulů můžete přidat vlastní telemetrii.
  2. Telemetrie se odesílá na portál Application Insights, kde se ukládá a zpracovává. I když je Služba Application Insights hostovaná v Azure, může monitorovat všechny webové aplikace, nejen aplikace Azure.
  3. Telemetrie je prezentována ve formě grafů a tabulek událostí.

Existují dva hlavní typy telemetrie: agregované a nezpracované instance.

  • Data instancí můžou obsahovat sestavu požadavku přijatého vaší webovou aplikací. Podrobnosti žádosti můžete vyhledat a zkontrolovat pomocí nástroje Hledání na portálu Application Insights. Instance může obsahovat data, například jak dlouho vaší aplikaci trvalo odpověď na požadavek, požadovanou adresu URL a přibližné umístění klienta.
  • Agregovaná data zahrnují počty událostí za jednotku času, abyste mohli porovnat míru požadavků s dobou odezvy. Zahrnuje také průměry metrik, jako jsou doby odezvy na požadavky.

Hlavní kategorie dat jsou:

  • Požadavky na vaši aplikaci (obvykle požadavky HTTP) s daty o adrese URL, době odezvy a úspěchu nebo selhání
  • Závislosti, jako jsou volání REST a SQL provedená vaší aplikací, také s identifikátorem URI, dobou odezvy a úspěchem.
  • Výjimky, včetně trasování zásobníku.
  • Data zobrazení stránky, která pocházejí z prohlížečů uživatelů.
  • Metriky, jako jsou čítače výkonu a metriky, které si sami napíšete.
  • Vlastní události, které můžete použít ke sledování obchodních událostí.
  • Trasování protokolů používaná k ladění.

Případová studie: Real Madrid F.C.

Webová služba fotbalového klubu Real Madrid slouží asi 450 milionů fanoušků po celém světě. Fanoušci k němu mají přístup prostřednictvím webových prohlížečů a klubových mobilních aplikací. Fanoušci si mohou rezervovat vstupenky a také získat informace a videoklipy k výsledkům, hráčům a nadcházejícím zápasům. Můžou vyhledávat pomocí filtrů, jako jsou počty vstřelených gólů. Existují také odkazy na sociální média. Uživatelské prostředí je vysoce přizpůsobené a je navržené jako obousměrná komunikace, která zapojuje fanoušky.

Řešením je systém služeb a aplikací v Azure. Klíčovým požadavkem je škálovatelnost. Provoz je proměnlivý a může dosáhnout velkých objemů během shody a kolem zápasů.

Pro Real Madrid je důležité sledovat výkon systému. Application Insights poskytuje komplexní přehled v celém systému, který zajišťuje spolehlivou a vysokou úroveň služeb.

Klub také do hloubky rozumí svým fanouškům, například kde se nacházejí (pouze 3 % jsou ve Španělsku), jaký mají zájem o hráče, historické výsledky a nadcházející zápasy a jak reagují na výsledky zápasů.

Většina těchto telemetrických dat se shromažďuje automaticky bez přidaného kódu, což zjednodušuje řešení a snižuje provozní složitost. V případě Realu Madrid služba Application Insights každý měsíc vyhodí 3,8 miliardy telemetrických bodů.

Real Madrid používá k zobrazení telemetrie modul Power BI.

Snímek obrazovky znázorňující zobrazení telemetrie Application Insights v Power BI

Inteligentní zjišťování

Proaktivní diagnostika je nejnovější funkce. Bez vaší speciální konfigurace Application Insights automaticky detekuje a upozorní vás na neobvyklé zvýšení míry selhání ve vaší aplikaci. Je dostatečně inteligentní, aby ignorovala pozadí občasných selhání a také nárůsty, které jsou jednoduše úměrné nárůstu požadavků.

Může například dojít k selhání některé ze služeb, na které závisíte. Nebo možná nový build, který jste nasadili, nefunguje dobře. Poznáte to hned, jak se podíváte na svůj e-mail. K dispozici jsou také webhooky, abyste mohli aktivovat další aplikace.

Dalším aspektem této funkce je každodenní podrobná analýza telemetrie, která hledá neobvyklé vzorce výkonu, které se obtížně objevují. Může například zjistit nízký výkon související s konkrétní geografickou oblastí nebo konkrétní verzí prohlížeče.

V obou případech výstraha informuje o zjištěných příznačích. Poskytuje také data, která potřebujete k diagnostice problému, například relevantní zprávy o výjimce.

Snímek obrazovky znázorňující e-maily z proaktivní diagnostiky

Zákazník Samtec uvedl: "Během nedávné přímé migrace funkcí jsme zjistili, že databáze je nedostatečně škálovaná, která dosáhla limitů prostředků a způsobovala vypršení časových limitů. Upozornění proaktivního zjišťování prošla doslova, když jsme problém roztáhli podle priorit, a to téměř v reálném čase, jak bylo inzerováno. Toto upozornění spolu s upozorněními platformy Azure nám pomohlo problém téměř okamžitě vyřešit. Celkový výpadek <10 minut."

Live Metrics Stream

Nasazení nejnovějšího buildu může být nervózní. Pokud máte nějaké problémy, chcete o nich vědět hned, abyste mohli v případě potřeby ustoupit. Live Metrics Stream poskytuje klíčové metriky s latencí přibližně jedné sekundy.

Snímek obrazovky zobrazící živé metriky

Umožňuje okamžitě zkontrolovat vzorek všech selhání nebo výjimek.

Snímek obrazovky znázorňující živé události selhání

Mapa aplikace

Mapa aplikace automaticky zjistí topologii vaší aplikace. Umístí informace o výkonu na mapě, abyste mohli snadno identifikovat kritické body výkonu a problematické toky napříč distribuovaným prostředím. Mapa aplikace umožňuje zjistit závislosti aplikací na službách Azure.

Pokud chcete zjistit, jestli problém souvisí s kódem nebo závislostí, můžete ho určit podle dostupnosti zdrojů. Z jednoho místa můžete přejít k podrobnostem souvisejícího prostředí diagnostiky. Vaše aplikace může například selhát kvůli snížení výkonu na úrovni SQL. S mapou aplikace ji můžete okamžitě zobrazit a přejít k podrobnostem v prostředí SQL Index Advisor nebo Query Insights.

Snímek obrazovky znázorňující mapu aplikace

Application Insights Log Analytics

S Log Analytics můžete psát libovolné dotazy v výkonném jazyce podobném SQL. Diagnostika v celém zásobníku aplikací je díky propojení různých perspektiv snadná. Pak můžete položit správné otázky ke korelaci výkonu služby s obchodními metrikami a zkušenostmi zákazníků.

Můžete se dotazovat na veškerou instanci telemetrie a nezpracovaná data metrik uložených na portálu. Jazyk zahrnuje operace filtrování, spojení, agregace a další operace. Můžete počítat pole a provádět statistickou analýzu. K dispozici jsou tabulkové a grafické vizualizace.

Snímek obrazovky znázorňující graf analytických dotazů a výsledků

Můžete například snadno provést:

  • Segmentujte data o výkonu požadavků vaší aplikace podle úrovní zákazníků, abyste porozuměli jejich zkušenostem.
  • Vyhledejte konkrétní kódy chyb nebo názvy vlastních událostí během živého prověřování webu.
  • Přejděte k podrobnostem o využití aplikací konkrétními zákazníky, abyste pochopili, jak se funkce získávají a využívají.
  • Sledujte relace a doby odezvy pro konkrétní uživatele, abyste týmům podpory a provozním týmům umožnili okamžitou zákaznickou podporu.
  • Určení často používaných funkcí aplikace pro odpovědi na otázky týkající se stanovení priorit funkcí

Zákazník DNN uvedl: "Application Insights nám poskytla chybějící část rovnice, abychom mohli podle potřeby kombinovat, řadit, dotazovat a filtrovat data. Díky tomu, aby náš tým našel data pomocí výkonného dotazovacího jazyka pomocí vlastní vynalézavosti a zkušeností, nám to umožnilo najít přehledy a řešit problémy, o kterých jsme ani nevěděli. Mnoho zajímavých odpovědí pochází z otázek začínajících na "Zajímalo by mě, jestli...".

Integrace vývojových nástrojů

Application Insights se integruje s vývojářskými nástroji.

Konfigurace Application Insights

Visual Studio a Eclipse mají nástroje ke konfiguraci správných balíčků SDK pro projekt, který vyvíjíte. K dispozici je příkaz nabídky pro přidání Application Insights.

Pokud používáte architekturu protokolování trasování, jako je Log4N, NLog nebo System.Diagnostics.Trace, máte možnost odeslat protokoly do Application Insights spolu s dalšími telemetrii, abyste mohli trasování snadno korelovat s požadavky, voláními závislostí a výjimkami.

Hledání telemetrie v sadě Visual Studio

Při vývoji a ladění funkce můžete zobrazit a vyhledat telemetrii přímo v sadě Visual Studio. Můžete použít stejné vyhledávací funkce jako na webovém portálu.

Když Application Insights zaznamená výjimku, můžete zobrazit datový bod v sadě Visual Studio a přejít přímo na příslušný kód.

Snímek obrazovky znázorňující hledání v sadě Visual Studio

Během ladění můžete zachovat telemetrii ve vývojovém počítači. Můžete ho zobrazit v sadě Visual Studio bez odeslání na portál. Tato místní možnost zabraňuje kombinování ladění s produkční telemetrií.

Pracovní položky

Při vyvolání výstrahy může Application Insights automaticky vytvořit pracovní položku ve vašem systému sledování práce.