Aktivieren und Konfigurieren der App Service-Anwendungsprotokollierung
In dieser Lerneinheit zeigen wir Ihnen, wie die App-Protokollierung bei Ihren Web-Apps helfen kann und wie Sie App-Protokolle aktivieren.
Was sind App-Protokolle?
Azure bietet integrierte Diagnosen mit App-Protokollierung. App-Protokolle sind die Ausgabe der Runtimeablaufverfolgungsanweisungen im App-Code. Einige Beispiele: Sie möchten eine bestimmte Logik in Ihrem Code überprüfen, indem Sie eine Ablaufverfolgung einfügen, die zeigt, wann eine bestimmte Funktion verarbeitet wird. Oder Sie möchten eine protokollierte Meldung nur dann anzeigen, wenn eine bestimmte Fehlerstufe auftritt. Die App-Protokollierung ist primär für Apps in der Vorproduktionsphase und besonders schwierige Probleme konzipiert, da sehr umfangreiche Protokolle die Leistung beeinträchtigen und schnell viel Speicher verbrauchen. Aus diesem Grund wird die Protokollierung im Dateisystem nach 12 Stunden automatisch deaktiviert.
Für die App-Protokollierung gelten Skalierungseinschränkungen, vor allem, weil Dateien zum Speichern der protokollierten Ausgabe verwendet werden. Wenn Sie über mehrere Instanzen einer App verfügen und derselbe Speicherplatz für alle Instanzen freigegeben wird, können sich Meldungen von verschiedenen Instanzen überlappen, was die Problembehandlung erschwert. Wenn jede Instanz über eine eigene Protokolldatei verfügt, entstehen sehr viele Protokolle, was es wiederum erschweren kann, instanzspezifische Probleme zu beheben.
Die Arten der Protokollierung, die über Azure App Service verfügbar sind, hängen vom Codeframework der App und davon ab, ob die App auf einem Windows-App- oder Linux-App-Host ausgeführt wird.
ASP.NET
ASP.NET-Apps lassen sich nur in Windows-App-Diensten ausführen. Sie verwenden die Klasse System.Diagnostics.Trace
, um Informationen im App-Diagnoseprotokoll aufzuzeichnen. Es gibt vier Ablaufverfolgungsebenen, die mit den im Azure-Portal gezeigten Protokollierungsgraden error
, warning
, information
und verbose
korrelieren:
- Trace.TraceError("Message"); // Gibt eine Fehlermeldung aus
- Trace.TraceWarning("Message"); // Gibt eine Warnmeldung aus
- Trace.TraceInformation("Message"); // Gibt eine Informationsmeldung aus
- Trace.WriteLine("Message"); // Gibt eine ausführliche Meldung aus
ASP.NET Core-Apps
ASP.NET Core-Apps können unter Windows und Linux ausgeführt werden. Sie müssen die logger factory-Klasse und dann eine von sechs Protokollebenen verwenden, um Informationen in Azure-App-Protokollen zu protokollieren:
- logger.LogCritical("Message"); // Schreibt eine kritische Meldung auf Protokollebene 5
- logger.LogError("Message"); // Schreibt eine Fehlermeldung auf Protokollebene 4
- logger.LogWarning("Message"); // Schreibt eine Warnmeldung auf Protokollebene 3
- logger.LogInformation("Message"); // Schreibt eine Informationsmeldung auf Protokollebene 2
- logger.LogDebug("Message"); // Schreibt eine Debugmeldung auf Protokollebene 1
- logger.LogTrace("Message"); // Schreibt eine detaillierte Ablaufverfolgungsmeldung auf Protokollebene 0
Bei ASP.NET Core-Apps unter Windows beziehen sich diese Meldungen auf folgende Weise auf die Filter im Azure-Portal:
- Die Ebenen 4 und 5 sind Fehlermeldungen.
- Ebene 3 ist eine Warnmeldung.
- Ebene 2 ist eine Informationsmeldung.
- Die Ebenen 0 und 1 sind ausführliche Meldungen.
Bei ASP.NET Core-Apps unter Linux werden nur Fehlermeldungen (Ebenen 4 und 5) protokolliert.
Node.js-Apps
Für skriptbasierte Web-Apps, wie z. B. Node.js-Apps unter Windows oder Linux, wird die App-Protokollierung mithilfe der console()-Methode aktiviert:
- console.error("Message"); // Schreibt eine Meldung in STDERR.
- console.log("Message"); // Schreibt eine Meldung in STDOUT.
Beide Arten von Meldungen werden in die Azure-App-Dienstprotokolle auf Fehlerebene geschrieben.
Unterschiede bei der Protokollierung zwischen Windows- und Linux-Hosts
Um Nachrichten an Protokolldateien weiterzuleiten, verwenden Azure Web Apps den IIS-Webserver (Internet Information Services). Da Windows-basierte Web-Apps ein etablierter Azure-Dienst sind und das Messaging für ASP.NET-Apps eng in den zugrunde liegenden IIS-Dienst integriert ist, profitieren Windows-Apps von einer umfassenden Protokollierungsinfrastruktur. Bei anderen Apps sind die Protokollierungsoptionen durch die Entwicklungsplattform eingeschränkt, auch wenn sie in einem Windows-App-Dienst ausgeführt werden.
Das Docker-Image, das für den Container der App verwendet wird, bestimmt die Protokollierungsfunktionalität, die Linux-basierten Apps auf Skriptbasis zur Verfügung steht, z. B. Node. Für die Standardprotokollierung – z. B. Verwendung von Umleitungen zu STDERR oder STDOUT – werden die Docker-Protokolle genutzt. Eine umfangreichere Protokollierungsfunktionalität richtet sich nach dem zugrunde liegenden Image und danach, ob PHP, Perl oder Ruby usw. ausgeführt werden. Sie müssen möglicherweise über SSH eine Verbindung mit Ihrem Container herstellen, um eine gleichwertige Webanwendungsprotokollierung herunterzuladen, wie sie von IIS für Windows-Apps bereitgestellt wird.
In der folgenden Tabelle ist die Protokollierungsunterstützung für gängige App-Umgebungen und -Hosts zusammengefasst.
App-Umgebung | Host | Protokollebenen | Speicherort |
---|---|---|---|
ASP.NET | Windows | Fehler, Warnung, Information, ausführlich | Dateisystem, Blobspeicher |
ASP.NET Core | Windows | Fehler, Warnung, Information, ausführlich | Dateisystem, Blobspeicher |
ASP.NET Core | Linux | Fehler | Dateisystem |
Node.js | Windows | Fehler (STDERR), Informationen (STDOUT), Warnung, ausführlich | Dateisystem, Blobspeicher |
Node.js | Linux | Fehler | Dateisystem |
Java | Linux | Fehler | Dateisystem |
Alternativen zur App-Diagnose
Azure Application Insights ist eine Websiteerweiterung, die weitere Features für die Leistungsüberwachung bietet, wie etwa detaillierte Daten zu Verbrauch und Leistung. Application Insights ist für App-Bereitstellungen in der Produktion konzipiert und ein potenziell nützliches Entwicklungstool. Es arbeitet mit einer Reihe von Anwendungsentwicklungsumgebungen zusammen und bietet die gleiche Menge an umfangreichen Telemetrie- und Leistungsdaten, unabhängig davon, ob es sich bei der App um eine ASP.NET- oder Node.js-App handelt. Um Application Insights nutzen zu können, müssen Sie jedoch Ihrer App mit dem App Insights SDK bestimmten Code hinzufügen. Der Application Insights-Dienst wird in Rechnung gestellt. Daher müssen Sie je nach Umfang Ihrer App-Bereitstellungen und der Menge an gesammelten Daten möglicherweise regelmäßige Kosten einplanen.
Sie können auch Metriken für Ihre App anzeigen, was nützlich sein kann, wenn Sie ein Profil für die Leistungsfähigkeit und Funktionsweise Ihrer App erstellen möchten. Diese Indikatoren sind in der Produktion und Entwicklung nützlich. Sie können die CPU-, Arbeitsspeicher-, Netzwerk- und Dateisystemnutzung einsehen und Warnmeldungen einrichten, wenn ein Zähler einen bestimmten Schwellenwert erreicht. Die Abrechnung für Metriken erfolgt gemäß dem Tarif für den App Service-Plan.
Aktivieren der Protokollierung im Azure-Portal
Im Portal wird die App-Protokollierung im Bereich „Diagnoseprotokolle“ der Web-App verwaltet.
Legen Sie Anwendungsprotokollierung (Dateisystem) auf Ein fest, um die App-Protokollierung im Dateisystem der Web-App zu aktivieren. Legen Sie dann Ebene auf „Fehler“, „Warnung“, „Information“ oder „Ausführlich“ fest. Die Protokollierung im Dateisystem wird nach 12 Stunden automatisch auf Aus zurückgesetzt.
Um die App-Protokollierung in einem Blobspeichercontainer zu aktivieren, legen Sie Anwendungsprotokollierung (Blob) auf Ein fest, und wählen Sie dann ein Speicherkonto und einen Speichercontainer aus. Das Speicherkonto und die Web-App müssen in derselben Azure-Region erstellt werden. Legen Sie dann Ebene auf „Fehler“, „Warnung“, „Information“ oder „Ausführlich“ fest.
Hinweis
Linux-App-Protokolle können nicht in Blobspeicher gespeichert werden.
Bei Protokollierung im Blobspeicher müssen Sie auch einen Aufbewahrungszeitraum festlegen. Im Gegensatz zu den Dateisystemprotokollen werden Blobprotokolle standardmäßig nie gelöscht. Die Option für den Aufbewahrungszeitraum bedeutet, dass alle Protokolle, die älter sind als die angegebene Anzahl von Tagen, gelöscht werden.
Wählen Sie nach dem Konfigurieren der Protokolle Speichern aus.
Aktivieren der Protokollierung über die Azure CLI
Führen Sie diesen Befehl aus, um die App-Protokollierung im Dateisystem zu aktivieren.
az webapp log config --application-logging filesystem --level verbose --name <app-name> --resource-group <resource-group-name>
Führen Sie diesen Befehl aus, um beispielsweise die Protokollierung im Dateisystem für eine App namens contosofashions123 zu aktivieren und alle Meldungen zu erfassen.
az webapp log config --application-logging filesystem --level verbose --name contosofashions123 --resource-group contosofashionsRG
Es gibt derzeit keine Möglichkeit, die Anwendungsprotokollierung mithilfe von Azure CLI-Befehlen zu deaktivieren. Der folgende Befehl setzt die Dateisystemprotokollierung jedoch nur auf Fehlerebene zurück.
az webapp log config --application-logging off --name <app-name> --resource-group <resource-group-name>
Um den aktuellen Protokollierungsstatus für eine App anzuzeigen, wählen Sie diesen Befehl.
az webapp log show --name <app-name> --resource-group <resource-group-name>