Sdílet prostřednictvím


Doporučení pro instrumentaci aplikace

Platí pro toto doporučení kontrolního seznamu provozní efektivity architektury Azure Well-Architected Framework:

OE:07 Návrh a implementace monitorovacího systému, který ověřuje volby návrhu a informuje budoucí návrh a obchodní rozhodnutí. Tento systém zachycuje a zveřejňuje provozní telemetrii, metriky a protokoly, které generují z infrastruktury a kódu úlohy.

Související průvodce: Doporučení pro návrh a vytvoření monitorovacího systému

Tato příručka popisuje doporučení pro povolení pozorovatelnosti aplikace pomocí instrumentace. Vygenerujte smysluplnou telemetrii, kterou je možné ingestovat a integrovat do monitorovacího systému. Pomocí instrumentace můžete shromáždit informace bez přihlášení ke vzdálenému produkčnímu serveru, abyste mohli ručně provést trasování nebo ladění. Data instrumentace zahrnují metriky a protokoly, které můžete použít k vyhodnocení výkonu, diagnostice problémů a rozhodování o úlohách.

Klíčové strategie návrhu

Pokud chcete optimalizovat telemetrii pro vaši úlohu, instrumentujte aplikaci, aby vygenerovala následující data:

  • Protokoly jsou záznamy o časových razítkech diskrétních událostí. Existují tři formy protokolů: prostý text, strukturovaný a binární.

  • Distribuované protokoly trasování umožňují zobrazit cestu požadavku při procházení různými službami a komponentami.

  • Metriky jsou číselné hodnoty, které popisují aspekt systému v určitém časovém okamžiku.

Poznámka:

K automatickému instrumentaci aplikace můžete použít nástroje, jako jsou Application Insights, Dynatrace a Elastic Application Sledování výkonu. Tyto nástroje usnadňují instrumentaci, ale můžou být také omezeny. Pokud používáte nástroj pro automatickou instrumentaci, můžete podle potřeby přidat další funkce prostřednictvím ruční instrumentace.

Použití strukturovaných protokolů a trasování

Pomocí strukturovaného protokolování můžete snadno integrovat protokoly do monitorovacích a analytických platforem. Instrumentujte aplikaci, aby bylo možné změnit úrovně podrobností. Konstantní podrobné protokolování může ztratit prostředky úložiště, takže by se mělo podle potřeby zapnout a vypnout při řešení potíží.

Protokoly trasování obsahují textová data nebo binární data vytvořená z události trasování, pokud aplikace používá trasování událostí pro Windows (ETW). Systémové protokoly generují obsah protokolu trasování z událostí v infrastruktuře, jako je webový server. Textový obsah protokolu je navržený tak, aby byl čitelný lidmi, ale měli byste zajistit, aby byl napsaný ve formátu, který může automatizovaný systém analyzovat také.

Kategorizace protokolů a použití samostatných protokolů k zaznamenání výstupu trasování z jednotlivých provozních aspektů systému. Pokud protokoly kategorizujete, můžete zprávy protokolu rychle filtrovat místo zpracování jednoho dlouhého souboru. Nikdy nezapisujte informace, které mají různé požadavky na zabezpečení, jako jsou informace o auditu a ladění dat, do stejného protokolu.

Poznámka:

Protokol může být implementován jako soubor v systému souborů nebo se může uchovávat v jiném formátu, například objekt blob v úložišti objektů blob. Informace protokolu se můžou uchovávat také ve strukturovaném úložišti, jako jsou například řádky v tabulce.

Zachycení metrik aplikací

Metriky nebo ukázky jsou počet některých aspektů nebo prostředků v systému v určitém okamžiku s jednou nebo více přidruženými značkami nebo dimenzemi. Jedna instance metriky není užitečná izolovaně, metriky by se měly zachytit v průběhu času. Zvažte, které metriky byste měli zaznamenávat a jak často. Data, která se generují příliš často, můžou způsobit velké zatížení systému, ale občasné zachytávání dat může způsobit vynechání okolností, které vedou k významné události. Vhodná frekvence pro zachytávání dat se může lišit od metriky po metriku. Například využití procesoru na serveru se může výrazně lišit od sekundy po sekundu, ale vysoké využití se stává problémem pouze v případě, že je konzistentní v průběhu mnoha minut.

Usnadnění korelace mezi komponentami

Můžete snadno monitorovat jednotlivé čítače výkonu a čítače výkonu na úrovni systému, zaznamenávat metriky pro prostředky a získávat informace o trasování aplikací z různých souborů protokolu. Některé monitorování vyžadují korelaci dat během fáze analýzy a diagnostiky v kanálu monitorování. Tato data mohou mít několik forem a proces analýzy musí být k dispozici s dostatečnými instrumentačními daty pro mapování těchto různých formulářů. Například na úrovni architektury aplikace může ID vlákna identifikovat úlohu. V rámci aplikace může být stejná práce přidružena k ID uživatele, který tento úkol dokončí.

Není pravděpodobné, že by to byla mapa 1:1 mezi vlákny a požadavky uživatelů, protože asynchronní operace můžou znovu použít stejná vlákna pro více než jednoho uživatele. Kvůli dalšímu komplikování důležitých věcí může jeden požadavek korelovat s více vlákny, protože prochází systémem. Pokud je to možné, přidružte ke každému požadavku jedinečné ID aktivity, které se bude v systému předávat v rámci kontextu požadavku. Technika generování a zahrnutí ID aktivit do informací o trasování závisí na technologii, která se používá k zachycení dat trasování.

Všechna data monitorování by měla být časového razítka stejná. V zájmu konzistence zaznamenávejte data a časy pomocí standardu UTC (Coordinated Universal Time).

Poznámka:

Počítače, které pracují v různých časových pásmech a sítích, nemusí být synchronizované. Nezávisejte jenom na časových razítkech pro korelaci dat instrumentace, která pokrývají více počítačů.

Zachycení relevantních dat

Při rozhodování, která data instrumentace potřebujete shromáždit, zvažte následující body.

Čitelná data pro člověka

Zajistěte, aby informace zachycené událostmi trasování byly strojově i lidské čitelné. Pro tyto informace můžete využít dobře definovaná schémata, která pomáhají implementovat automatizované zpracování dat protokolů napříč systémy a zajistit konzistenci pro provozní a technické pracovníky, kteří protokoly čtou.

Do dat uveďte následující informace o životním prostředí:

  • Prostředí nasazení
  • Stroj pro zpracování
  • Podrobnosti o procesu
  • Zásobník volání

Investice do sledovatelnosti a korelace

Zadejte dostatečný kontext, například ID aktivity přidružené ke konkrétní instanci požadavku, aby vývojář nebo správce mohl určit zdroj každého požadavku.

Kontext dat může obsahovat také informace, které se používají ke korelaci aktivity s výpočetní prací provedenou a použitými prostředky. Tato práce může překračovat hranice procesů a počítačů.

Pro měření by kontext měl přímo nebo nepřímo zahrnovat odkaz na zákazníka, který žádost způsobil. Tento kontext poskytuje cenné informace o stavu aplikace v době zachycení dat monitorování.

Zachycení všech relevantních dat

Zaznamenejte všechny požadavky a umístění nebo oblasti, ve kterých se provádějí. Tyto informace můžete použít k identifikaci hotspotů specifických pro polohu. Tyto informace můžou být užitečné také k určení, jestli se má aplikace předělovat, nebo data, která používá.

Pečlivě zaznamenávejte podrobnosti o výjimkách. Kritické informace o ladění se často ztratí kvůli špatnému zpracování výjimek. Zachyťte všechny podrobnosti o výjimce, které aplikace vyvolá, včetně jakýchkoli vnitřních výjimek nebo jiných kontextových informací, jako je zásobník volání, pokud je to možné.

Úsilí o konzistenci dat

Konzistentní data vám můžou pomoct analyzovat události a korelovat je s požadavky uživatelů. Zvažte použití komplexního a konfigurovatelného balíčku protokolování ke shromažďování informací. Balíčky protokolování vám můžou pomoct vyhnout se závislosti na vývojářích, kteří při implementaci různých částí systému používají váš přístup.

Shromážděte data, jako je vstupní/výstupní svazek, počet požadavků, paměť, využití sítě a procesoru, z klíčových čítačů výkonu. Některé služby infrastruktury poskytují vlastní čítače výkonu, například:

  • Počet připojení k databázi.
  • Transakční sazba.
  • Počet transakcí, které jsou úspěšné nebo neúspěšné.

Aplikace můžou také definovat vlastní čítače výkonu.

Zvážení externích závislostí

Protokolovat všechna volání externích služeb Externí volání můžou být provedena v:

  • Databázové systémy.
  • Webové služby.
  • Další služby na úrovni systému, které jsou součástí infrastruktury.

Zaznamenává informace o době trvání každého volání a úspěšnosti nebo neúspěchu volání. Pokud je to možné, zachytávejte informace o přechodných chybách, ke kterým dojde při všech opakovaných a neúspěšných pokusech.

Zajištění kompatibility systému telemetrie

V mnoha případech se informace o instrumentaci generují jako řada událostí a předávají se samostatnému systému telemetrie pro zpracování a analýzu. Telemetrický systém je obvykle nezávislý na jakékoli konkrétní aplikaci nebo technologii.

Systémy telemetrie používají k analýze informací definovaná schémata. Schéma určuje kontrakt, který definuje datová pole a typy, které může ingestovat systém telemetrie. Zobecněte schéma tak, aby umožňovalo data přicházející z různých platforem a zařízení. Společné schéma by mělo obsahovat pole relevantní pro všechny události instrumentace, například:

  • Název události.
  • Čas události.
  • IP adresa odesílatele.
  • Podrobnosti potřebné pro korelaci událostí, včetně:
    • ID uživatele
    • ID zařízení
    • ID aplikace

Mějte na paměti, že mnoho zařízení může vyvolat události pro stejnou aplikaci, takže schéma by nemělo záviset na typu zařízení. Aplikace by měla podporovat roaming nebo distribuci mezi zařízeními. Schéma může také zahrnovat relevantní pole domény pro konkrétní scénář, který je společný pro aplikace, například:

  • Informace o výjimkách
  • Události spuštění a ukončení aplikace
  • Úspěch nebo selhání volání rozhraní API webové služby

Vytvořte pole domény, která vytvářejí stejnou sadu událostí pro sestavení sady běžných sestav a analýz napříč aplikacemi. Možná budete muset nakonfigurovat schéma tak, aby obsahovalo vlastní pole pro zaznamenání podrobností událostí specifických pro aplikaci.

OpenTelemetry je kolekce rozhraní API, sad SDK a dalších nástrojů neutrálních pro dodavatele. OpenTelemetry můžete použít k instrumentaci aplikací a generování smysluplné telemetrie konzistentně napříč jazyky. OpenTelemetry je nezávislá na nástrojích, takže je kompatibilní s mnoha platformami pozorovatelnosti, včetně opensourcových a komerčních nabídek. Microsoft přijímá OpenTelemetry jako standardní nástroj pro instrumentaci.

Optimalizace kódu instrumentace

Následující seznam shrnuje osvědčené postupy instrumentace distribuované aplikace spuštěné v cloudu:

  • Dbejte na to, aby protokoly umožňovaly snadné čtení a analýzu. Pokud je to možné, použijte strukturované protokolování.

  • Zprávy protokolu by měly být stručné a popisné.

  • Identifikujte zdroj protokolu.

  • Přidejte informace o časovém razítku při zápisu každého záznamu protokolu.

  • Pro všechna časová razítka použijte stejné časové pásmo a formát.

  • Kategorizuje protokoly a zapisuje zprávy na příslušné místo.

  • Nezozorujte citlivé informace o systému nebo osobních údajích o uživatelích. Před zaprotokolovanými informacemi si tyto informace projděte, ale mějte všechny relevantní podrobnosti.

  • Protokolujte všechny kritické výjimky, ale povolte správci zapnout a vypnout protokolování podle potřeby pro méně výjimek a upozornění.

  • Zachyťte a zaznamenejte všechny informace logiky opakování. Tato data jsou užitečná při monitorování přechodného stavu systému.

  • Trasování volání procesů, jako jsou požadavky na externí webové služby nebo databáze.

  • V rámci jednoho souboru protokolu nekombinujte zprávy protokolu s různými požadavky na zabezpečení.

  • Ujistěte se, že všechna volání protokolování jsou operace aktivované a zapomenuté , které neblokují průběh obchodních operací. Vylučte události auditování z tohoto pravidla, protože jsou pro firmu důležité.

  • Ujistěte se, že je protokolování rozšiřitelné a nemá žádné přímé závislosti na konkrétním cíli.

  • Ujistěte se, že je veškeré protokolování bezpečné a neaktivuje kaskádové chyby.

  • Zacházejte s instrumentací jako s probíhajícím iterativním procesem a pravidelně kontrolujte protokoly.

Použití profilace aplikací

  • Profilaci implementujte pouze v případě potřeby, protože může v systému představovat významnou režii. Při použití instrumentace profilace zaznamenává událost, například volání metody, při každém výskytu. Vzorkování však zaznamenává pouze vybrané události.

  • Výběry profilace můžou být založené na čase, například jednou za n sekund nebo na základě frekvence, například jednou za každých n požadavků. Pokud se události vyskytují často, profilace může způsobit příliš velkou zátěž systému a ovlivnit celkový výkon. V takovém případě je vhodnější přístup k vzorkování. Pokud je ale frekvence událostí nízká, vzorkování je nemusí zaznamenat. V tomto případě může být profilace lepším přístupem.

Usnadnění azure

Automatická příprava je dostupná pro mnoho typů Azure a místních aplikací monitorovaných pomocí Application Insights. Automaticky konfiguruje vaši aplikaci tak, aby poskytovala bohatou telemetrii application Insights a poskytuje snadný přístup k prostředím, jako je řídicí panel aplikace a mapa aplikace. Podporované hostitelské platformy a vývojové jazyky najdete v tématu Podporovaná prostředí, jazyky a poskytovatelé prostředků.

Kontrolní seznam pro efektivitu provozu

Projděte si kompletní sadu doporučení.