Sdílet prostřednictvím


Shromažďování a interpretace chybových dat

Důležité

Toto je dokumentace k Azure Sphere (starší verze). Azure Sphere (starší verze) se vyřazuje 27. září 2027 a uživatelé musí do této doby migrovat do Azure Sphere (integrované). K zobrazení dokumentace k Azure Sphere (integrované) použijte selektor verzí umístěný nad obsahem.

Data o chybách a událostech se denně nahrají do služby zabezpečení Azure Sphere. Každý, kdo má přístup k určitému tenantovi, si pak může stáhnout data pro tohoto tenanta. Sestava pokrývá všechna zařízení v tenantovi.

Každá sestava obsahuje maximálně 1 000 událostí nebo 14 dnů dat, podle toho, co nastane dříve. Data se dají zapsat do souboru nebo přes kanály do skriptu nebo aplikace. Rozhraní příkazového řádku může vrátit pouze 1 000 událostí. Pomocí veřejného rozhraní API Azure Sphere určete maximální počet událostí vrácených na stránce.

Data o chybách a dalších událostech, které ovlivňují vaše zařízení, si můžete stáhnout následujícími způsoby:

Z rtApps se neshromažďují žádná data o chybách. Pokud chcete protokolovat chyby z APLIKACÍ RTApps, budete muset implementovat inter-core komunikaci, která bude komunikovat chyby z RTApps do aplikace vysoké úrovně, ze kterých se data o chybách dají protokolovat do síťových služeb. Podrobnosti najdete v tématu Komunikace s aplikací vysoké úrovně a Komunikace s aplikací podporující v reálném čase.

Dostupné typy dat

Data vrácená pro každou chybu nebo událost zahrnují následující:

Data Popis
ID zařízení ID zařízení, ve které došlo k události.
Event Type Bez ohledu na to, jestli byla událost naplánována nebo neplánovaná. Aktualizace operačního systému a aplikací se považují za plánované události, zatímco chyby jsou neplánované události.
Event – třída Softwarová komponenta, která narazila na událost: operační systém nebo aplikace.
Počet událostí Počet výskytů události v období odděleném časem StartTime a EndTime
Popis Informace o události Toto pole je obecné a liší se v závislosti na události a jejím zdroji. U aplikací může obsahovat ukončovací kód, stav signálu a kód signálu, ale přesný obsah pole není pevný. Obsahuje informace o události a pochází z prvního výskytu události v časovém intervalu.
Čas spuštění Datum a čas (ve standardu UTC), na kterém začalo okno události.
Koncový čas Datum a čas (ve standardu UTC), kdy okno události skončilo.

Počáteční a koncový čas definují časové období, během kterého se agregují data událostí. Okno pro libovolnou agregovanou skupinu událostí může být až 24 hodin a maximální počet výskytů je 8 výskytů v časovém intervalu.

Události aplikace

Události aplikací zahrnují aktualizace aplikací načtené do cloudu spolu s chybami, ukončeními a dalšími typy selhání aplikace.

Aktualizace aplikací jsou plánované události. Pro událost AppUpdate obsahuje AppUpdatepole Popis .

Selhání aplikace, ukončení, selhání spuštění a podobné události jsou neplánované události. U neplánované události závisí obsah pole Popis na aplikaci, která událost zjistila. Následující tabulka uvádí pole, která mohou být v poli Popis pro neplánovanou událost.

Data Popis
exit_status nebo exit_code Ukončete stav nebo kód nahlášený aplikací.
signal_status Celé číslo, které popisuje důvod chybového ukončení vysoké úrovně vrácený operačním systémem. Seznam stavů najdete v dokumentaci k Man 7 nebo v jiných linuxových prostředcích.
signal_code Celé číslo, které označuje podrobný stav chybového ukončení v rámci nadřazeného stavu signálu. Podrobnosti najdete v dokumentaci k Man 7 nebo jiných linuxových prostředcích.
component_id IDENTIFIKÁTOR GUID softwarové komponenty, která se chybově ukončila.
image_id IDENTIFIKÁTOR GUID image, která byla spuštěna v době chyby.

Konkrétní informace v popisu AppCrash závisí na zdroji chybového ukončení. U většiny chybových ukončení vypadá popis přibližně takto:

AppCrash (exit_status=11; signal_status=11; signal_code=3; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; image_id=7053e7b3-d2bb-431f-8d3a-173f52db9675)

V některých případech se při chybovém ukončení aktivují další chybová data, například následující, která doplňují data v předchozím příkladu:

AppCrash (pc=BEEED2EE; lr=BEEED2E5; sp=BEFFDE58; signo=11; errno=0; code=0; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; pc_modulename+offset=appname+80000; lr_modulename+offset=app+100CC)

Data Popis
osobní počítač Čítač programu. Odkazuje na adresu instrukce, která aktivovala chybové ukončení.
Lr Registrace odkazu. Možná odkazuje na zpáteční adresu ve volající funkci.
Sp Ukazatel zásobníku Odkazuje na začátek zásobníku volání.
signo Signál POSIX. Označuje typ chyby.
errno POSIX errno. Označuje chybu.
code Označuje podrobný stav chybového ukončení v rámci stavu nadřazeného signálu.
component_id IDENTIFIKÁTOR GUID softwarové komponenty, která se chybově ukončila.
pc_modulename + posun Název modulu a posun do modulu, který obsahuje kód, ve kterém došlo k chybě.
lr_modulename + posun Název modulu a posun do modulu, který mohl být volající funkcí.

Interpretace appCrashes

Většinu informací o AppCrash najdete v signal_status a signal_code. Postupujte následovně:

  1. V dokumentaci k man 7 pro signal_status se nejprve podívejte na tabulku s popiskem "Signal Numbering for Standard Signals" (Číslování signálu pro standardní signály). Ve sloupci x86/ARM vyhledejte hodnotu přiřazenou signal_status v sestavě csvchyb . Po nalezení si poznamenejte odpovídající název signálu ve sloupci úplně vlevo.
  2. Posuňte se nahoru k tabulce označené jako Standardní signály. Porovná dříve určený název signálu a pomocí tabulky shromáždí další informace o tom, co signál označuje.
  3. V dokumentaci man 7 pro signal_code a název signálu, který jste dříve našli, vyhledejte odpovídající seznam si_codes.
  4. Pomocí hodnoty přiřazené k signal_code v souboru sestavy csv chyb určete, který kód odpovídá chybové zprávě.

Představte si například následující popis AppCrash:

AppCrash (exit_status=11; signal_status=11; signal_code=3; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; image_id=7053e7b3-d2bb-431f-8d3a-173f52db9675)

Pomocí dokumentace k Man 7 můžete zjistit následující další informace o AppCrash:

  1. Signály jsou popsány v 10. části popisu stránky Man signálu. Signal_status hodnoty 11 odpovídá signálu SIGSEGV.
  2. SIGSEGV označuje, že došlo k neplatnému odkazu na paměť (často to může být ukazatel null).
  3. SI_Codes jsou popsány v třetí části popisu stránky man SigAction pro každou signal_status. I když stránka neobsahuje číslo indexu pro každou si_code, můžete počítat z každé signal_status kategorie začínající indexem 1. Když se podíváte na seznam si_codes pro SIGSEGV (počínaje indexem 1), uvidíte, že třetí odpovídá SEGV_BNDERR.
  4. SEGV_BNDERR značí, že došlo k neúspěšné kontrole vazby adresy.

Poznámka:

Běžně zjištěný AppCrash obsahuje signal_status hodnotu 9, což je signál SIGKILL spolu s SEND_SIG_PRIV si_code. Tento stav označuje, že operační systém aplikaci zabil, protože překročil limit využití paměti. Další informace o limitech paměti aplikací najdete v tématu Použití paměti v aplikacích vysoké úrovně.

Interpretace appExits

Když se aplikace ukončí bez chyby, pole signal_status a signal_code nejsou k dispozici a místo exit_status obsahuje popis ukončovací kód:

AppExit (exit_code=0; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; image_id=0a7cc3a2-f7c2-4478-8b02-723c1c6a85cd)

AppExits může nastat z řady důvodů, jako je aktualizace aplikace, zařízení, které se odpojí, nebo použití rozhraní API pro vypnutí mimo jiné. Je důležité implementovat ukončovací kódy , abyste mohli získat přehled o důvodech pro AppExit.

K interpretaci AppExits použijte hodnotu exit_code v poli Popis zprávy o chybě. Pokud vaše aplikace vrátí ukončovací kód, můžete pomocí hodnoty exit_code v sestavě chyb určit, kde nebo kdy k chybě došlo. Pomocí této hodnoty vyhledejte v kódu aplikace, abyste zjistili, která zpráva o ukončení kódu odpovídá hodnotě zadané v sestavě chyb. Pak vyhledejte, která funkce v aplikaci vrátila zprávu ukončovací kód a proč tak učinila. Zobrazením příkazu Return a jeho kontextu můžete zjistit důvod chyby.

Události operačního systému

Data chyb také zahrnují základní události operačního systému a hardwaru, které můžou ovlivnit vaši aplikaci tím, že způsobí selhání nebo restartování. Tyto události můžou zahrnovat následující:

  • Neplánované restartování zařízení způsobené chybami jádra
  • Aktualizace cloudového operačního systému
  • Přechodné problémy s hardwarem

Události operačního systému jsou součástí dat, které vám pomůžou určit, jestli jsou chyby aplikace výsledkem problému s operačním systémem nebo hardwarem nebo odrážejí problémy se samotnou aplikací. Pokud data události ukazují, že zařízení se spustilo v nouzovém režimu, nemusí se vaše aplikace spustit.

Prozkoumání chybových dat

Pokud plánujete vyvíjet skripty nebo nástroje pro analýzu chybových dat, ale nemáte k dispozici velký počet zařízení pro hlášení chyb, můžete tato data vygenerovat k testování pomocí ukázkových aplikací Azure Sphere. V úložišti ukázek Azure Sphere se dozvíte, jak analyzovat chyby hlášené při chybovém ukončení aplikace. Podle pokynů v souboru readme sestavte ukázku pomocí sady Visual Studio, Visual Studio Code nebo příkazového řádku.

Když nasadíte aplikaci z příkazového řádku bez ladicího programu, operační systém ji pokaždé, když selže, restartuje ji. Podobné události jsou agregované tak, aby jedno často selhávající zařízení nezamaskovala chyby od ostatních a maximální počet výskytů je osm výskytů za časové období. Ukázku můžete nasadit z příkazového řádku bez ladění následujícím způsobem:

azsphere device sideload deploy --image-package <path to image package for the app>

Generování a stahování zprávy o chybách

Data o chybách a událostech se denně nahrají do služby zabezpečení Azure Sphere. Ujistěte se, že je zařízení Azure Sphere připojené k internetu pomocí Wi-Fi nebo Ethernetu pro komunikaci se službou zabezpečení Azure Sphere.

  1. Spuštěním následujícího příkazu stáhněte sestavu do souboru CSV:

    azsphere tenant download-error-report --destination error.csv
    
  2. Otevřete stažený soubor CSV a vyhledejte ID součásti. Měl by se zobrazit popis chyby podobný následujícímu:

    AppExit (exit_code=0; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; image_id=6d2646aa-c0ce-4e55-b7d6-7c206a7a6363)

K zasílání zpráv o chybách můžete použít také veřejné rozhraní API Azure Sphere.

Poznámka:

  • Stažení nedávno ohlášených událostí může trvat až 24 hodin.
  • Pokud dojde k události nebo chybě před tím, než se zařízení připojí k serveru NTP, může být nesprávné časové razítko události obsažené v telemetrii nahrané do AS3. To se projeví v nesprávné položce ve sloupci StartTime v následující sestavě stažené z AS3. V této situaci použijte pole EndTime sestavy k pomoci při odhadování, kdy došlo k události. Toto pole obsahuje čas, kdy cloudové služby obdržely nahranou telemetrii a vždy budou mít platné datum.

Formátování chybových dat

Časové razítka a datové sloupce v souboru sestavy chyb jsou formátovány jinak než typický soubor CSV. Pokud chcete zobrazit výsledky v Excelu, můžete data přeformátovat tak, že vytvoříte nové sloupce a přidáte vlastní vzorce.

Formátování časových razítek v exportovaného souboru CSV pro práci s Excelem:

  1. Vytvořte nový sloupec časového razítka a vytvořte pro něj vlastní formát:

    yyyy/mm/dd hh:mm:ss

  2. Do buněk v novém sloupci časového razítka přidejte následující vzorec a změňte hodnotu buňky F2 tak, aby odpovídala vašemu sloupci a řádku:

    =(DATEVALUE(LEFT(RawErrorReport!F2,10))+TIMEVALUE(RIGHT(RawErrorReport!F2,8)))

Pokud chcete pole Popis rozdělit na samostatné sloupce, postupujte podle těchto kroků a změňte hodnotu buňky F2 tak, aby odpovídala sloupci a řádku:

  1. Vytvořte nový sloupec s názvem Shortname nebo něco podobného a přidejte do buněk následující vzorec:

    =TRIM(LEFT(F2,FIND("(",F2)-1))

  2. Vytvořte sloupce, ve kterých záhlaví řádku1 mají stejné názvy jako hodnoty parametrů, a přidejte do buněk v každém sloupci následující vzorec:

    =IF(ISERROR(FIND("; " & H$1 & "=", SUBSTITUTE($F2,"(","; "))), "", MID($F2, FIND("; " & H$1 & "=", SUBSTITUTE($F2,"(","; ")) + (LEN(H$1) + 2), FIND("; ", SUBSTITUTE($F2,")","; "), FIND("; " & H$1 & "=", SUBSTITUTE($F2,"(","; "))) - FIND("; " & H$1 & "=", SUBSTITUTE($F2,"(","; ")) - (LEN(H$1) + 2)))