Sdílet prostřednictvím


Shromažďování a interpretace dat o chybách

Data o chybách a událostech se nahrávají do služby Zabezpečení Azure Sphere každý den. Každý, kdo má přístup k určitému katalogu, si pak může stáhnout data pro tento katalog. Sestava obsahuje všechna zařízení v katalogu.

Každá sestava obsahuje maximálně 1 000 událostí nebo 14 dnů dat podle toho, co je dosaženo dříve. Data je možné zapsat do souboru nebo předané 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é mají vliv na vaše zařízení, si můžete stáhnout následujícími způsoby:

Z RTApps se neshromažďují žádná data hlášení chyb. Pokud chcete protokolovat chyby z RTApps, budete muset implementovat komunikaci mezi jádry, která bude předávat chyby z aplikací RTApps do aplikace vysoké úrovně, ze které se data chyb dají protokolovat do síťových služeb.

Dostupné typy dat

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

Dat Popis
ID zařízení ID zařízení, u kterého došlo k události
Typ události Jestli byla událost naplánovaná 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, u které došlo k události: operační systém nebo aplikace.
Počet událostí Kolikrát k události došlo v období odděleném časy 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ě daný. Obsahuje informace o události a pochází z prvního výskytu události v časovém okně.
Počáteční čas Datum a čas (v UTC), od kterého začalo okno události.
Čas ukončení Datum a čas (v UTC), kdy okno události skončilo.

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

Události aplikace

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

Aktualizace aplikací jsou plánované události. V případě události AppUpdate obsahuje AppUpdatepole Popis .

Chybové ukončení 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, u které došlo k události. V následující tabulce jsou uvedena pole, která můžou být v poli Popis neplánované události.

Dat Popis
exit_status nebo exit_code Stav ukončení nebo kód hlášený aplikací
signal_status Celé číslo, které popisuje základní důvod chybového ukončení vrácený operačním systémem. Seznam stavů najdete v dokumentaci k Man 7 nebo v jiných prostředcích linuxu.
signal_code Celé číslo, které označuje podrobný stav chybového ukončení v rámci stavu nadřazeného signálu. Podrobnosti najdete v dokumentaci k Man 7 nebo v jiných zdrojích informací o Linuxu.
component_id IDENTIFIKÁTOR GUID softwarové součásti, 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 chyb 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 selhání aktivuje další data o chybách, 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)

Dat Popis
Pc Čítač programů. Odkazuje na adresu instrukce, která aktivovala chybové ukončení.
Lr Odkaz na registraci. Možná odkazuje na zpáteční adresu ve volající funkci.
Sp Ukazatel zásobníku. Odkazuje na horní část zásobníku volání.
signo Signál POSIX. Označuje typ chyby.
errno POSIX errno. Označuje chybu.
Kód Označuje podrobný stav chybového ukončení v rámci stavu nadřazeného signálu.
component_id IDENTIFIKÁTOR GUID softwarové součásti, která se chybově ukončila.
pc_modulename+posun Název modulu a posun na modul obsahující kód, ve kterém došlo k chybě.
lr_modulename+posun Název modulu a posun na modul, který mohl být volající funkcí.

Interpretovat příkazy AppCrashes

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

  1. Pomocí dokumentace Mana 7 pro signal_status se nejprve podívejte do tabulky označené "Číslování signálů pro standardní signály". Ve sloupci x86/ARM vyhledejte hodnotu přiřazenou signal_status ve zprávě o csvchybách . Po nalezení si poznamenejte odpovídající název signálu ve sloupci úplně vlevo.
  2. Posuňte se nahoru k tabulce označené Standardní signály. Shodujte dříve určený název signálu a pomocí tabulky shromážděte další informace o tom, co signál označuje.
  3. V dokumentaci Man 7 k signal_code a názvu signálu, který jste dříve našli, vyhledejte odpovídající seznam si_codes.
  4. Pomocí hodnoty přiřazené signal_code v souboru zprávy o csv chybách 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 Man 7 můžete zjistit následující další informace o appcrash:

  1. Signály jsou popsány v 10. části popisu stránky Signal man ( Signal man). Signal_status hodnoty 11 odpovídá signálu SIGSEGV.
  2. SIGSEGV označuje, že došlo k neplatnému odkazu na paměť (často se může jednat o nulový ukazatel).
  3. SI_Codes jsou popsány ve 3. části popisu stránky sigAction pro každou signal_status. I když stránka neobsahuje číslo indexu pro každou si_code, můžete spočítat z každé signal_status kategorie počínaje 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ě se vyskytující 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 Využ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)

K appExits může docházet mimo jiné z různých důvodů, jako je aktualizace aplikace, odpojení zařízení nebo použití rozhraní API pro vypnutí napájení. Je důležité implementovat ukončovací kódy , abyste získali přehled o důvodech appexitu.

Pokud chcete interpretovat AppExits, použijte hodnotu exit_code v poli Popis zprávy o chybách. Pokud vaše aplikace vrátí ukončovací kód, můžete pomocí hodnoty exit_code ve zprávě o chybách určit, kde a kdy k chybě došlo. Pomocí této hodnoty vyhledejte v kódu aplikace a zjistěte, která zpráva s ukončovacím kódem odpovídá hodnotě zadané ve zprávě o chybách. Pak se podívejte, která funkce v aplikaci vrátila zprávu s ukončovacím kódem a proč to udělala. Zobrazením příkazu return a jeho kontextu můžete zjistit důvod chyby.

Události operačního systému

Data o chybách zahrnují také základní události operačního systému a hardwaru, které můžou ovlivnit vaši aplikaci tím, že způsobí její 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

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

Prozkoumání údajů o chybách

Pokud plánujete vyvíjet skripty nebo nástroje pro analýzu dat o chybách, ale nemáte k dispozici velký počet zařízení pro hlášení chyb, můžete k vygenerování těchto dat pro účely testování použít ukázkové aplikace Azure Sphere. Ukázka Tutorials/ErrorReporting v úložišti ukázek Azure Sphere vysvětluje, jak analyzovat chyby hlášené při chybovém ukončení aplikace. Postupujte podle pokynů v souboru readme a sestavte ukázku pomocí sady Visual Studio, Visual Studio Code nebo příkazového řádku.

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

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

Generování a stažení zprávy o chybách

Data o chybách a událostech se nahrávají do služby Zabezpečení Azure Sphere každý den. Ujistěte se, že je zařízení Azure Sphere připojené k internetu pomocí Wi-Fi nebo Sítě Ethernet 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:

    az sphere catalog download-error-report --destination error.csv
    
  2. Otevřete stažený soubor CSV a vyhledejte ID komponenty. Měl by se zobrazit popis chyby podobný tomuto:

    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 také použít veřejné rozhraní API Azure Sphere .

Poznámka

  • Může trvat až 24 hodin, než budou nedávno hlášené události dostupné ke stažení.
  • 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ásledné sestavě stažené z AS3. V takovém případě použijte pole EndTime sestavy, které vám pomůže odhadnout, kdy k události došlo. Toto pole obsahuje čas, kdy cloudové služby obdržely nahranou telemetrii, a bude mít vždy platné datum.

Formátování dat o chybách

Časová razítka a datové sloupce v souboru zprávy o chybách jsou naformátované jinak než u typického souboru 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 exportu 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 do samostatných sloupců, postupujte takto a změňte hodnotu buňky F2 tak, aby odpovídala vašemu sloupci a řádku:

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

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

  2. Vytvořte sloupce, ve kterých mají záhlaví řádku1 stejné názvy jako hodnoty parametrů, a do buněk v každém sloupci přidejte 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)))