Erfassen und Interpretieren von FehlerdatenCollect and interpret error data

Fehler-und Ereignisdaten werden täglich in den Azure Sphere-Sicherheitsdienst hochgeladen.Error and event data is uploaded to the Azure Sphere Security Service daily. Jeder Benutzer, der Zugriff auf einen bestimmten Mandanten hat, kann dann die Daten für diesen Mandanten herunterladen.Anyone who has access to a particular tenant can then download the data for that tenant. Im Bericht werden alle Geräte im Mandanten behandelt.The report covers all the devices in the tenant. Zurzeit enthält jeder Bericht maximal 1.000 Ereignisse oder 14 Tage Daten, je nachdem, welcher Wert zuerst erreicht wird.Currently, each report contains a maximum of 1,000 events or 14 days of data, whichever is reached first. Daten können in eine Datei geschrieben oder an ein Skript oder eine Anwendung weitergeleitet werden.Data can be written to a file or piped to a script or application.

Sie können Daten zu den Fehlern und anderen Ereignissen, die Ihre Geräte betreffen, wie folgt herunterladen:You can download data about the errors and other events that affect your devices in the following ways:

  • Mithilfe des Befehls " azsphere Tenant Download-Error-Report ".By using the azsphere tenant download-error-report command. Eine CSV-Datei mit Informationen zu Fehlern und Ereignissen, die von Geräten im aktuellen Mandanten gemeldet werden, wird heruntergeladen.A CSV file containing information on errors and events reported by devices within the current tenant is downloaded.

  • Mithilfe der Azure Sphere öffentlichen API für die Fehlerberichterstattung.By using the Azure Sphere Public API for error reporting. Der API-Endpunkt gibt ein JSON-Objekt zurück, das Sie nach Ihren Anforderungen analysieren können.The API endpoint returns a JSON object that you can parse according to your needs.

Von rtapps werden keine Fehler Berichterstattungs Daten gesammelt.No error reporting data is collected from RTApps. Wenn Sie Fehler von rtapps protokollieren möchten, müssen Sie zwischen Kern Kommunikation implementieren, um Fehler von den rtapps an die allgemeine Anwendung zu übermitteln, von der die Fehler Daten an Netzwerkdienste protokolliert werden können.If you want to log errors from RTApps, you'll need to implement inter-core communications to communicate errors from the RTApps to the high-level application, from which the error data can be logged to network services. Weitere Informationen finden Sie unter kommunizieren mit einer Anwendung auf hoher Ebene und kommunizieren mit einer echt Zeit fähigen Anwendung .See Communicate with a high-level application and Communicate with a real-time capable application for details.

Verfügbare DatentypenTypes of data available

Die für jeden Fehler oder jedes Ereignis zurückgegebenen Daten umfassen Folgendes:The data returned for each error or event includes the following:

DatenData BESCHREIBUNGDescription
Geräte-IDDevice ID ID des Geräts, auf dem das Ereignis aufgetreten ist.ID of the device that encountered the event.
EreignistypEvent Type Gibt an, ob das Ereignis geplant oder ungeplant war.Whether the event was planned or unplanned. Betriebssystem-und APP-Updates gelten als geplante Ereignisse, während Fehler ungeplante Ereignisse sind.OS and app updates are considered planned events, whereas errors are unplanned events.
EreignisklasseEvent Class Software Komponente, auf der das Ereignis aufgetreten ist: Betriebssystem oder Anwendung.Software component that encountered the event: OS or application.
EreignisanzahlEvent Count Häufigkeit, mit der das Ereignis innerhalb des durch "StartTime" und "EndTime" getrennten Zeitraums aufgetreten ist.Number of times the event occurred within the period delimited by StartTime and EndTime.
BeschreibungDescription Informationen zum Ereignis.Information about the event. Dieses Feld ist generisch und variiert abhängig vom Ereignis und seiner Quelle.This field is generic and varies depending on the event and its source. Für-Anwendungen kann es den Exitcode, den Signal Status und den Signal Code enthalten, aber der genaue Inhalt des Felds ist nicht korrigiert.For applications, it may contain the exit code, signal status, and signal code, but the exact contents of the field are not fixed.
StartzeitStart Time Datum und Uhrzeit (in UTC), zu denen das Ereignisfenster begonnen hat.Date and time (in UTC) at which the event window began.
BeendigungszeitEnd Time Datum und Uhrzeit (in UTC), zu denen das Ereignisfenster beendet wurde.Date and time (in UTC) at which the event window ended.

Die Startzeit und Endzeit definieren ein Zeitfenster, in dem die Ereignisdaten aggregiert werden.The Start Time and End Time define a window of time during which event data are aggregated. Das Fenster für eine aggregierte Gruppe von Ereignissen kann bis zu 24 Stunden betragen.The window for any aggregated group of events can be up to 24 hours.

AnwendungsereignisseApplication events

Anwendungs Ereignisse umfassen in der Cloud geladene APP-Updates sowie Abstürze, Beendigungen und andere Arten von Anwendungsfehlern.Application events include cloud-loaded app updates along with crashes, exits, and other types of application failures.

Anwendungs Updates sind geplante Ereignisse.Application updates are planned events. Das Beschreibungsfeld für ein appupdate-Ereignis enthält AppUpdate .For an AppUpdate event, the Description field contains AppUpdate.

Anwendungs Abstürze, Beendigungen, Start Fehler und ähnliche Ereignisse sind ungeplante Ereignisse.Application crashes, exits, start-up failures, and similar events are unplanned events. Bei einem ungeplanten Ereignis hängt der Inhalt des Beschreibungs Felds von der Anwendung ab, in der das Ereignis aufgetreten ist.For an unplanned event, the contents of the Description field depend on the application that encountered the event. In der folgenden Tabelle sind die Felder aufgeführt, die im Feld Beschreibung für ein nicht geplantes Ereignis enthalten sein können.The following table lists the fields that may be present in the Description field for an unplanned event.

DatenData BESCHREIBUNGDescription
exit_status oder exit_codeexit_status or exit_code Der Beendigungs Status oder der von der Anwendung gemeldete Code.Exit status or code reported by the application.
signal_statussignal_status Ganze Zahl, die den Grund für den Absturz beschreibt, der vom Betriebssystem zurückgegeben wird.Integer that describes the high-level reason for the crash, returned by the OS. Eine Liste der Status finden Sie in der man 7 -Dokumentation oder anderen Linux-Ressourcen.You can find a list of statuses in the Man 7 documentation or other Linux resources.
signal_codesignal_code Eine ganze Zahl, die den detaillierten Absturz Status innerhalb des übergeordneten Signal Status angibt.Integer that indicates the detailed crash status within the parent signal status. Ausführliche Informationen finden Sie in der man 7 -Dokumentation oder in anderen Linux-Ressourcen.See the Man 7 documentation or other Linux resources for details.
component_idcomponent_id GUID der Softwarekomponente, die abgestürzt ist.GUID of the software component that crashed.
image_idimage_id GUID des Abbilds, das zum Zeitpunkt des Fehlers ausgeführt wurde.GUID of the image that was running at the time of the error.

Die spezifischen Informationen in einer APPCRASH-Beschreibung hängen von der Quelle des Absturzes ab.The specific information in an AppCrash description depends on the source of the crash. Bei den meisten abstürzen sieht die Beschreibung etwa wie folgt aus:For most crashes, the description looks similar to the following:

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

In einigen Fällen löst ein Absturz zusätzliche Fehler Daten aus, z. b. die folgende, mit der die Daten im vorherigen Beispiel ergänzt werden:In some cases, a crash triggers additional error data, such as the following, which supplements the data in the previous example:

AppCrash (pc=BEEED2EE; lr=BEEED2E5; sp=BEFFDE58; signo=11; errno=0; code=0; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8)

Interpretieren von appabstürzenInterpret AppCrashes

Die meisten Informationen zu einem APPCRASH finden Sie in den signal_status und signal_code.You can find most of the information about an AppCrash in the signal_status and signal_code. Führen Sie die folgenden Schritte durch:Follow these steps:

  1. Überprüfen Sie in der " man 7 "-Dokumentation für signal_status zuerst die Tabelle mit der Bezeichnung "Signal Nummerierung für Standard Signale".Using the Man 7 documentation for signal_status, first look at the table labeled "Signal Numbering for Standard Signals." Suchen Sie in der Spalte x86/Arm nach dem Wert, der dem signal_status im Fehlerbericht zugewiesen ist csv .In the x86/ARM column, search for the value assigned to the signal_status in the error report csv. Beachten Sie, dass der entsprechende Signal Name in der Spalte ganz links angezeigt wird.Once found, note the corresponding Signal name in the leftmost column.
  2. Scrollen Sie nach oben zur Tabelle mit der Bezeichnung "Standard Signale".Scroll up to the table labeled "Standard Signals." Vergleichen Sie den zuvor ermittelten Signalnamen, und verwenden Sie die Tabelle, um weitere Informationen über das Signal anzuzeigen.Match the previously determined Signal name and use the table to gather more information about what the signal indicates.
  3. Suchen Sie in der "man 7"-Dokumentation für signal_code und den zuvor gefundenen Signalnamen nach der entsprechenden Liste si_codes.In the Man 7 documentation for signal_code and the Signal name you previously found, locate the corresponding list of si_codes.
  4. Verwenden Sie den Wert, der dem signal_code in der Fehlerberichts Datei zugewiesen ist csv , um zu bestimmen, welcher Code mit der Fehlermeldung übereinstimmt.Use the value assigned to the signal_code in the error report csv file to determine which code matches the error message.

Sehen Sie sich beispielsweise die folgende APPCRASH-Beschreibung an:For example, consider the following AppCrash description:

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

Mithilfe der man 7-Dokumentation können Sie die folgenden zusätzlichen Informationen über den APPCRASH ermitteln:Using the Man 7 documentation, you can discover the following additional information about the AppCrash:

  1. Eine signal_status des Werts 11 entspricht einem SIGSEGV-Signal.A signal_status of value 11 corresponds to a SIGSEGV signal.
  2. SIGSEGV gibt an, dass ein ungültiger Speicher Verweis aufgetreten ist (Dies kann häufig ein NULL-Zeiger sein).SIGSEGV indicates that an invalid memory reference occurred (this can often be a null pointer).
  3. Wenn Sie sich die Liste der si_codes für SIGSEGV (beginnend bei Index 1) ansehen, sehen Sie, dass der dritte mit einem SEGV_BNDERR übereinstimmt.By looking at the list of si_codes for SIGSEGV (beginning at index 1), you can see that the third matches a SEGV_BNDERR.
  4. SEGV_BNDERR gibt an, dass eine fehlerhafte Überprüfung der Adresse aufgetreten ist.SEGV_BNDERR indicates that a failed address bound check occurred.

Hinweis

Ein häufig auftretende APPCRASH umfasst den signal_status Wert 9, bei dem es sich um ein SIGKILL-Signal handelt, zusammen mit dem SEND_SIG_PRIV si_code .A commonly encountered AppCrash includes a signal_status value of 9, which is a SIGKILL signal, along with the SEND_SIG_PRIV si_code. Dieser Status gibt an, dass das Betriebssystem die Anwendung abgebrochen hat, weil die Speicherauslastung überschritten wurde.This status indicates that the OS killed the application because it exceeded its memory usage limit. Weitere Informationen zu Grenzwerten für Anwendungs Arbeitsspeicher finden Sie unter Arbeitsspeicher Nutzung in Anwendungen auf hoher Ebene.To learn more about application memory limits see Memory use in high-level applications.

Appbeendigungen interpretierenInterpret AppExits

Wenn eine APP ohne Fehler beendet wird, sind die Felder signal_status und signal_code nicht vorhanden, und anstelle eines exit_status enthält die Beschreibung einen Exitcode:When an app exits without error, the signal_status and signal_code fields are not present, and instead of an exit_status, the Description contains an exit code:

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

Appbeendigungen können aus verschiedenen Gründen erfolgen, wie z. b. ein Anwendungs Update, ein Gerät, das getrennt wird, oder die Verwendung der Einschalt-API.AppExits can occur for a number of reasons, such as an application update, a device being unplugged, or the use of the power down API, among others. Es ist wichtig, dass Sie Exitcodes implementieren, damit Sie Einblick in die Gründe für eine AppExit erhalten können.It is important to implement exit codes so that you can gain insight into the reasons for an AppExit.

Verwenden Sie zum Interpretieren von appbeendigungen den exit_code Wert im Feld Beschreibung des Fehlerberichts.To interpret AppExits, use the exit_code value in the Description field of the error report. Wenn Ihre APP einen Exitcode zurückgibt, können Sie den Wert des exit_code im Fehlerbericht verwenden, um zu bestimmen, wo oder wann der Fehler aufgetreten ist.If your app returns an exit code, you can use the value of the exit_code in the error report to determine where or when the error occurred. Wenn Sie diesen Wert verwenden, suchen Sie im Anwendungscode, welche exitcodemeldung dem im Fehlerbericht angegebenen Wert entspricht.Using this value, search within the application code to see which exit code message corresponds to the value provided in the error report. Suchen Sie anschließend, welche Funktion in der Anwendung die exitcodenachricht zurückgegeben hat und warum dies der Fall war.Then, look to find which function in the application returned the exit code message and why it did so. Durch Anzeigen der Return-Anweisung und ihres Kontexts können Sie möglicherweise die Ursache des Fehlers ermitteln.By viewing the return statement and its context, you may be able to discover the reason for the error.

Betriebssystem EreignisseOS events

Fehler Daten umfassen auch zugrunde liegende Betriebssystem-und Hardware Ereignisse, die sich auf die Anwendung auswirken können, weil Sie fehlschlagen oder neu gestartet wird.Error data also includes underlying OS and hardware events that may impact your application by causing it to fail or restart. Diese Ereignisse können Folgendes umfassen:Such events can include the following:

  • Nicht geplante Neustarts von Geräten aufgrund von Kernel FehlernUnplanned device reboots caused by kernel errors
  • Cloud OS UpdatesCloud OS updates
  • Vorübergehende HardwareproblemeTransient hardware issues

Betriebssystem Ereignisse sind in den Daten enthalten, damit Sie bestimmen können, ob Anwendungsfehler das Ergebnis eines Betriebssystem-oder Hardware Problems sind oder Probleme mit der Anwendung selbst widerspiegeln.OS events are included in the data to help you determine whether application errors are the result of an OS or hardware problem or reflect issues with the application itself. Wenn in den Ereignisdaten angezeigt wird, dass ein Gerät im abgesicherten Modus gestartet wurde, können Ihre apps möglicherweise nicht gestartet werden.If the event data shows that a device booted to Safe Mode, your apps might be unable to start.

Untersuchen von Fehler DatenExplore error data

Wenn Sie Skripts oder Tools zum Analysieren von Fehler Daten entwickeln möchten, aber nicht über eine große Anzahl von Geräten zum Melden von Fehlern verfügen, können Sie die Azure Sphere Beispielanwendungen verwenden, um solche Daten für Tests zu generieren.If you plan to develop scripts or tools for analyzing error data, but you don't have a large number of devices available to report errors, you can use the Azure Sphere sample applications to generate such data for testing. Das Beispiel Tutorials/ERRORREPORTING im Repository Azure Sphere-Beispiele erläutert, wie Fehler analysiert werden, die beim Absturz der Anwendung gemeldet werden.The Tutorials/ErrorReporting sample in the Azure Sphere samples repo explains how to analyze errors reported when the application crashes. Befolgen Sie die Anweisungen in der Info, um das Beispiel mithilfe von Visual Studio, Visual Studio Code oder der Befehlszeile zu erstellen.Follow the instructions in the readme to build the sample using Visual Studio, Visual Studio Code, or the command line.

Wenn Sie die APP über die Befehlszeile ohne Debugger bereitstellen, wird Sie von dem Betriebssystem bei jedem Ausfall neu gestartet.When you deploy the app from the command line without a debugger, the OS restarts it each time it fails. Ähnliche Ereignisse werden aggregiert, sodass ein häufig fehlerhaftes Gerät Fehler von anderen nicht maskiert.Similar events are aggregated so that one frequently failing device doesn't mask errors from others. Sie können das Beispiel wie folgt über die Befehlszeile ohne Debuggen bereitstellen:You can deploy the sample from the command line without debugging, as follows:

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

Fehlerbericht generieren und herunterladenGenerate and download error report

  1. Die Komponenten-ID der Beispielanwendung erhalten Sie:Get the component ID of the sample application:

    azsphere device image list-installed

  2. Löschen Sie die Beispielanwendung vom Gerät:Delete the sample application from the device:

    azsphere device sideload delete -i <component-id>

  3. Setzen Sie das Gerät zurück, indem Sie die Schaltfläche Zurücksetzen oder den folgenden Befehl ausführen:Reset the device by pressing the Reset button or running the following command:

    azsphere device restart

  4. Stellen Sie sicher, dass das Gerät mit dem Netzwerk verbunden ist, bevor Sie den Fehlerbericht von Azure Sphere-Sicherheits Diensts herunterladen.Make sure that your device is connected to the network before downloading the error report from Azure Sphere Security Service. Warten Sie einige Minuten, bis der Fehlerbericht verfügbar ist, und führen Sie dann den folgenden Befehl aus, um ihn in eine CSV-Datei herunterzuladen:Wait for a few minutes for the error report to become available, and then run the following command to download it to a CSV file:

    azsphere tenant download-error-report --output error.csv

  5. Öffnen Sie die heruntergeladene CSV-Datei, und suchen Sie nach ihrer Komponenten-ID.Open the downloaded CSV file and look for your component ID. Es sollte eine Fehlerbeschreibung angezeigt werden, die der folgenden ähnelt:You should see an error description similar to the following:

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

Formatieren von Fehler DatenFormat error data

Die Zeitstempel und die Datenspalten in der Fehlerberichts Datei sind anders formatiert als eine typische CSV-Datei.The timestamps and data columns in the error report file are formatted differently from a typical CSV file. Wenn Sie die Ergebnisse in Excel anzeigen möchten, können Sie die Daten neu formatieren, indem Sie neue Spalten erstellen und benutzerdefinierte Formeln hinzufügen.If you want to view the results in Excel, you can reformat the data by creating new columns and adding custom formulas.

So formatieren Sie die Zeitstempel in der exportierten CSV-Datei für die Arbeit mit Excel:To format the timestamps in the exported CSV file to work with Excel:

  1. Erstellen Sie eine neue timestamp-Spalte, und erstellen Sie ein benutzerdefiniertes Format:Create a new Timestamp column and create a custom format for it:

    yyyy/mm/dd hh:mm:ss

  2. Fügen Sie den Zellen in der neuen timestamp-Spalte die folgende Formel hinzu, und ändern Sie den Zellwert F2 entsprechend ihrer Spalte und Zeile:Add the following formula to the cells in the new Timestamp column, changing the F2 cell value to match your column and row:

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

Um das Beschreibungsfeld in separate Spalten aufzuteilen, führen Sie die folgenden Schritte aus, und ändern Sie den Zellwert F2 entsprechend ihrer Spalte und Zeile:To split the Description field into separate columns, follow these steps, changing the F2 cell value to match your column and row:

  1. Erstellen Sie eine neue Spalte mit dem Namen ShortName oder etwas ähnliches, und fügen Sie den Zellen die folgende Formel hinzu:Create a new column named Shortname or something similar, and add the following formula to the cells:

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

  2. Erstellen Sie Spalten, in denen die row1-Header dieselben Namen wie die Parameterwerte aufweisen, und fügen Sie den Zellen in den einzelnen Spalten die folgende Formel hinzu:Create columns in which the row1 headers have the same names as the parameter values and add the following formula to the cells in each of the columns:

    =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)))