Sdílet prostřednictvím


Doporučení pro instrumentaci aplikace

Platí pro toto doporučení kontrolního seznamu pro efektivitu provozu azure Well-Architected Framework:

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

Související příručka: 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, která se dá ingestovat a integrovat do monitorovacího systému. Pomocí instrumentace můžete shromažďovat informace bez přihlášení ke vzdálenému produkčnímu serveru a ručně provádět trasování nebo ladění. Data instrumentace zahrnují metriky a protokoly, které můžete použít k posouzení výkonu, diagnostice problémů a rozhodování o úlohách.

Klíčové strategie návrhu

Pokud chcete optimalizovat telemetrii pro úlohy, instrumentujte aplikaci tak, aby vygenerovala následující data:

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

  • Distribuované protokoly trasování umožňují zobrazit cestu požadavku, který prochází různými službami a komponentami.

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

Poznámka

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

Protokoly a protokoly distribuovaného trasování

Pomocí strukturovaného protokolování můžete snadno integrovat protokoly do monitorovacích a analytických platforem. Instrumentujte aplikaci tak, aby bylo možné změnit úrovně podrobností. Neustálé podrobné protokolování může plýtvat prostředky úložiště, takže by se mělo podle potřeby zapínat a vypínat pro ř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. Obsah textového protokolu je navržený tak, aby byl čitelný pro lidi, ale měli byste zajistit, aby byl napsaný ve formátu, který může analyzovat i automatizovaný systém.

Kategorizovat protokoly a použít samostatné protokoly 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 data ladění, do stejného protokolu.

Poznámka

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

Metriky

Metriky neboli ukázky představují počet určitých aspektů nebo prostředků v systému v určitém čase s jednou nebo více přidruženými značkami nebo dimenzemi. Jedna instance metriky není izolovaně užitečná, metriky by se měly zaznamenávat 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 systém zatěžovat, 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 u jednotlivých metrik lišit. Například využití procesoru na serveru se může v jednotlivých sekundách výrazně lišit, ale vysoké využití se stává problémem pouze v případě, že je konzistentní po mnoho minut.

Informace pro korelaci dat

Můžete snadno monitorovat jednotlivé čítače výkonu a čítače na úrovni systému, zaznamenávat metriky prostředků a získávat informace o trasování aplikací z různých souborů protokolů. Některé monitorování vyžaduje korelaci dat během fáze analýzy a diagnostiky v kanálu monitorování. Tato data mohou mít několik podob a proces analýzy musí mít k dispozici dostatek instrumentačních dat pro mapování těchto různých forem. 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 pro uživatele, který tento úkol dokončí.

Je nepravděpodobné, že by šlo o mapování 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. Aby se situace ještě více zkomplikovala, může jeden požadavek při průchodu systémem korelovat s více než jedním vláknem. 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 trasovacích informací závisí na technologii, která se používá k zachycení dat trasování.

Všechna data monitorování by měla mít stejné časové razítko. 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é. Nespoléhejte pouze na časová razítka pro korelaci instrumentačních dat, která zahrnují více počítačů.

Informace, které mají být součástí dat instrumentace

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

Data čitelná pro člověka

Ujistěte se, že informace zachycené událostmi trasování jsou strojově i lidsky čitelné. Přijmout dobře definovaná schémata pro tyto informace, která pomůžou implementovat automatizované zpracování dat protokolů napříč systémy a zajistit konzistenci pro provozní a technické pracovníky, kteří si protokoly čtou.

Do svých dat zahrňte následující informace o životním prostředí:

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

Investovat 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 mohli určit zdroj každého požadavku.

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

V případě 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í.

Zachytávání všech relevantních dat

Zaznamenejte všechny požadavky a umístění nebo oblasti, ve kterých jsou vytvořené. Tyto informace můžete použít k identifikaci hotspotů specifických pro konkrétní polohu. Tyto informace můžou být užitečné také k určení, jestli chcete znovu rozdělit aplikaci nebo data, která používá.

Pečlivě zaznamenávejte podrobnosti o výjimkách. Důležité informace o ladění se často ztratí kvůli špatnému zpracování výjimek. Zaznamenejte všechny podrobnosti o výjimce, které aplikace vyvolá, včetně všech 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í. Protokolovací balíčky vám můžou pomoct vyhnout se závislosti na vývojářích, kteří při implementaci různých částí systému osvojují váš přístup.

Z klíčových čítačů výkonu můžete shromažďovat data, jako je vstupní/výstupní svazek, počet požadavků a využití paměti, sítě a procesoru. 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 úspěšných nebo neúspěšných transakcí.

Aplikace mohou také definovat vlastní čítače výkonu.

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

Protokolujte všechna volání externí služby. Externí volání můžou být provedena na:

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

Zaznamenejte informace o délce každého hovoru a úspěšnosti nebo selhání hovoru. 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 vygenerují jako řada událostí a předávají se do samostatného telemetrických systémů ke zpracování a analýze. Telemetrický systém je obvykle nezávislý na konkrétní aplikaci nebo technologii.

Telemetrické systémy používají k parsování informací definovaná schémata. Schéma určuje kontrakt, který definuje datová pole a typy, které může telemetrický systém ingestovat. 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 požadované pro korelaci událostí, mezi které patří:
    • ID uživatele
    • ID zařízení
    • ID aplikace

Mějte na paměti, že události pro stejnou aplikaci může vyvolat mnoho zařízení, 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é obsahovat příslušná pole domény pro konkrétní scénář, který je společný napříč aplikacemi, například:

  • Informace o výjimkách
  • Počáteční a koncové události aplikace.
  • Úspěch nebo selhání volání rozhraní API webové služby

Vytvořte doménová pole, která generují stejnou sadu událostí, a vytvořte sadu běžných sestav a analýz napříč aplikacemi. Možná budete muset nakonfigurovat schéma tak, aby obsahovalo vlastní pole pro zachytávání podrobností událostí specifických pro aplikaci.

OpenTelemetry je kolekce rozhraní API, sad SDK a dalších nástrojů neutrální z hlediska dodavatele. Pomocí OpenTelemetry můžete instrumentovat aplikace a konzistentně generovat smysluplnou telemetrii napříč jazyky. OpenTelemetry je nezávislá na nástrojích, takže je kompatibilní s mnoha pozorovatelnými platformami, včetně opensourcových a komerčních nabídek. Microsoft přijímá OpenTelemetry jako standardní nástroj pro instrumentaci.

Osvědčené postupy instrumentace aplikací

Následující seznam shrnuje osvědčené postupy pro instrumentaci 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ři zápisu každého záznamu protokolu přidejte informace o časovém razítku.

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

  • Kategorizovat protokoly a psát zprávy na příslušném místě.

  • Neodhalujte citlivé informace o systému ani osobní údaje o uživatelích. Před zaprotokolujte tyto informace, ale zachovejte všechny relevantní podrobnosti.

  • Protokolujte všechny kritické výjimky, ale umožněte správci zapnout a vypnout protokolování podle potřeby kvůli menšímu počtu výjimek a upozornění.

  • Zaznamenejte a zaznamenejte všechny informace o logice 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 aktivace a zapomenutí , které neblokují průběh obchodních operací. Vylučte z tohoto pravidla události auditování, protože jsou pro firmu důležité.

  • Ujistěte se, že protokolování je 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é pro selhání a neaktivuje kaskádové chyby.

  • Nakládat s instrumentací jako s průběžným iterativním procesem a pravidelně kontrolovat protokoly.

Požadavky

  • Profilaci implementujte jenom v případě potřeby, protože může znamenat značné režijní náklady na systém. Pomocí instrumentace profilace zaznamenává událost, například volání metody, pokaždé, když k ní dojde. Vzorkování ale zaznamenává jenom 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ě četnosti, například jednou za n požadavků. Pokud k událostem dochází často, může profilace příliš zatěžovat systém a ovlivnit celkový výkon. V tomto případě je vhodnější přístup k odběru vzorků. Pokud je ale frekvence událostí nízká, vzorkování je nemusí zaznamenat. V takovém případě může být lepším přístupem profilace.

Usnadnění Azure

Automatická příprava je k dispozici pro mnoho typů aplikací Azure a místních aplikací monitorovaných pomocí Application Insights. Funkce autoinstrumentation automaticky nakonfiguruje aplikaci tak, aby poskytovala bohatou telemetrii do Application Insights, a poskytuje snadný přístup k prostředím, jako je řídicí panel aplikace a mapa aplikace. Informace o podporovaných hostitelských platformách a vývojových jazycích najdete v tématu Podporovaná prostředí, jazyky a poskytovatelé prostředků.

Kontrolní seznam efektivity provozu

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