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:
Pomocí příkazu azsphere tenant download-error-report. Stáhne se soubor CSV obsahující informace o chybách a událostech hlášených zařízeními v aktuálním tenantovi.
Pomocí veřejného rozhraní API Azure Sphere pro zasílání zpráv o chybách Koncový bod rozhraní API vrátí objekt JSON, který můžete analyzovat podle svých potřeb.
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 AppUpdate
pole 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ě:
- 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ě
csv
chyb . Po nalezení si poznamenejte odpovídající název signálu ve sloupci úplně vlevo. - 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.
- 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.
- 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:
- Signály jsou popsány v 10. části popisu stránky Man signálu. Signal_status hodnoty 11 odpovídá signálu SIGSEGV.
- SIGSEGV označuje, že došlo k neplatnému odkazu na paměť (často to může být ukazatel null).
- 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.
- 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.
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
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:
Vytvořte nový sloupec časového razítka a vytvořte pro něj vlastní formát:
yyyy/mm/dd hh:mm:ss
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:
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))
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)))