Konfigurieren der Überwachung für Azure Functions

Die Integration von Azure Functions mit Application Insights ermöglicht Ihnen eine bessere Überwachung Ihrer Funktions-Apps. Application Insights, ein Feature von Azure Monitor, ist ein erweiterbarer Dienst für die Steuerung der Anwendungsleistung (Application Performance Management, APM), mit dem von Ihrer Funktions-App generierte Daten gesammelt werden (z. B. auch Informationen, die von Ihrer App in Protokolle geschrieben werden). Die Application Insights-Integration wird in der Regel beim Erstellen Ihrer Funktions-App aktiviert. Wenn für Ihre App kein Instrumentierungsschlüssel festgelegt ist, müssen Sie die Application Insights-Integration zunächst aktivieren.

Sie können Application Insights ganz ohne benutzerdefinierte Konfiguration verwenden. Die Standardkonfiguration kann zu großen Datenmengen führen. Wenn Sie ein Visual Studio Azure-Abonnement verwenden, erreichen Sie unter Umständen Ihr Datenlimit für Application Insights. Weitere Informationen zu den Application Insights-Kosten finden Sie unter Verwalten der Nutzung und der Kosten für Application Insights.

Später in diesem Artikel erfahren Sie, wie Sie die Daten konfigurieren und anpassen, die Ihre Funktionen an Application Insights senden. Für eine Funktions-App wird die Protokollierung in der Datei host.json konfiguriert.

Hinweis

Sie können speziell konfigurierte Anwendungseinstellungen verwenden, um bestimmte Einstellungen in der Datei „host.json“ für eine bestimmte Umgebung darzustellen. Hierdurch können Sie Einstellungen der Datei „host.json“ auf effektive Weise ändern, ohne dass Sie diese Datei erneut in Ihrem Projekt veröffentlichen müssen. Weitere Informationen finden Sie unter Außerkraftsetzung der Werte in der Datei „host.json“.

Konfigurieren von Kategorien

Die Azure Functions-Protokollierung enthält eine Kategorie für jedes Protokoll. Mit der Kategorie wird angegeben, von welchem Teil des Laufzeitcodes bzw. Ihres Funktionscodes das Protokoll geschrieben wurde. Kategorien unterscheiden sich für Version 1.x und höhere Versionen. In der folgenden Tabelle werden die Hauptkategorien der Protokolle beschrieben, die von der Laufzeit erstellt werden.

Kategorie Tabelle BESCHREIBUNG
Function.<YOUR_FUNCTION_NAME> dependencies Abhängigkeitsdaten werden für einige Dienste automatisch gesammelt. Bei erfolgreichen Ausführungen befinden sich diese Protokolle auf der Stufe Information. Weitere Informationen finden Sie unter Abhängigkeiten. Ausnahmen werden auf der Stufe Error protokolliert. Von der Runtime werden auch Protokolle mit der Stufe Warning erstellt, z. B. wenn Warteschlangennachrichten an die Warteschlange für nicht verarbeitete Nachrichten gesendet werden.
Function.<YOUR_FUNCTION_NAME> customMetrics
customEvents
Mit C#- und JavaScript-SDKs können Sie benutzerdefinierte Metriken erfassen und benutzerdefinierte Ereignisse protokollieren. Weitere Informationen finden Sie unter Benutzerdefinierte Telemetriedaten.
Function.<YOUR_FUNCTION_NAME> traces Enthält die gestartete Funktion und abgeschlossene Protokolle für bestimmte Funktionsausführungen. Bei erfolgreichen Ausführungen befinden sich diese Protokolle auf der Stufe Information. Ausnahmen werden auf der Stufe Error protokolliert. Von der Runtime werden auch Protokolle mit der Stufe Warning erstellt, z. B. wenn Warteschlangennachrichten an die Warteschlange für nicht verarbeitete Nachrichten gesendet werden.
Function.<YOUR_FUNCTION_NAME>.User traces Vom Benutzer generierte Protokolle mit einer beliebigen Protokollstufe. Weitere Informationen zum Schreiben in Protokolle aus Ihren Funktionen finden Sie unter Schreiben in Protokolle.
Host.Aggregator customMetrics Diese von der Runtime generierten Protokolle enthalten die Anzahl und Durchschnittswerte von Funktionsaufrufen für einen konfigurierbaren Zeitraum. Der Standardzeitraum beträgt 30 Sekunden oder 1.000 Ergebnisse, je nachdem, was früher eintritt. Beispiele hierfür sind die Ausführungsanzahl, die Erfolgsrate und die Dauer. Alle diese Protokolle werden auf der Stufe Information geschrieben. Wenn Sie nach Warning oder höheren Stufen filtern, finden Sie keine dieser Daten.
Host.Results requests Diese von der Runtime generierten Protokolle enthalten einen Hinweis zum Erfolg bzw. Misserfolg einer Funktion. Alle diese Protokolle werden auf der Stufe Information geschrieben. Wenn Sie nach Warning oder höheren Stufen filtern, finden Sie keine dieser Daten.
Microsoft traces Vollständig qualifizierte Protokollkategorie, die eine vom Host aufgerufene .NET-Runtimekomponente widerspiegelt.
Worker traces Protokolle, die vom Sprachworkerprozess für nicht zu .NET gehörende Sprachen generiert werden. Sprachworkerprotokolle können auch in einer Kategorie vom Typ Microsoft.* protokolliert werden, z. B. Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcFunctionInvocationDispatcher. Diese Protokolle werden auf der Stufe Information geschrieben.

Hinweis

Für .NET-Klassenbibliotheksfunktionen wird bei diesen Kategorien davon ausgegangen, dass Sie ILogger verwenden und nicht ILogger<T>. Weitere Informationen finden Sie in der ILogger-Dokumentation von Functions.

In der Spalte Tabelle ist angegeben, in welche Tabelle in Application Insights das Protokoll geschrieben wird.

Konfigurieren von Protokollstufen

Jedem Protokoll wird eine Protokollebene zugewiesen. Der Wert ist eine ganze Zahl, die die relative Wichtigkeit angibt:

LogLevel Code BESCHREIBUNG
Trace 0 Protokolle, die die ausführlichsten Meldungen enthalten. Diese Meldungen enthalten möglicherweise sensible Anwendungsdaten. Sie sind standardmäßig deaktiviert und sollten nie in einer Produktionsumgebung aktiviert werden.
Debuggen 1 Protokolle, die für interaktive Untersuchungen während der Entwicklung verwendet werden. Diese Protokolle sollten hauptsächlich für das Debuggen hilfreiche Informationen enthalten. Sie besitzen keinen langfristigen Nutzen.
Information 2 Protokolle, die den allgemeinen Ablauf der Anwendung nachverfolgen. Diese Protokolle sollten einen langfristigen Nutzen besitzen.
Warnung 3 Dies sind Protokolle, die ein ungewöhnliches oder unerwartetes Ereignis im Anwendungsfluss hervorheben, jedoch nicht bewirken, dass die Anwendung beendet wird.
Fehler 4 Dies sind Protokolle, die hervorheben, wenn der aktuelle Ausführungsfluss aufgrund eines Fehlers beendet wird. Diese Fehler sollten auf einen Fehler im Zusammenhang mit der aktuellen Aktivität und nicht auf einen anwendungsweiten Fehler hinweisen.
Kritisch 5 Protokolle, die einen nicht behebbaren Anwendungs- oder Systemabsturz beschreiben oder einen schwerwiegenden Fehler, der unmittelbare Aufmerksamkeit erfordert.
Keine 6 Hiermit wird die Protokollierung für die angegebene Kategorie deaktiviert.

Durch die Konfiguration der host.json-Datei wird bestimmt, welcher Protokollierungsgrad von einer Funktions-App an Application Insights gesendet wird.

Für jede Kategorie geben Sie zu sendende Mindestprotokollebene an. Die Einstellungen für „host.json“ variieren je nach Version der Functions-Runtime.

Im folgenden Beispiel wird die Protokollierung anhand der folgenden Regeln definiert:

  • Für Protokolle von Host.Results oder Function werden nur Ereignisse der Stufe Error oder höher protokolliert.
  • Für Protokolle von Host.Aggregator werden alle generierten Metriken protokolliert (Trace).
  • Für alle anderen Protokolle, einschließlich der Benutzerprotokolle, werden nur Ereignisse der Stufe Information und höher protokolliert.
{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host.Results": "Error",
      "Function": "Error",
      "Host.Aggregator": "Trace"
    }
  }
}

Wenn host.json mehrere Protokolle enthält, die mit der gleichen Zeichenfolge beginnen, werden zuerst die stärker definierten Protokolle abgeglichen. Sehen Sie sich das folgende Beispiel an, bei dem alle Elemente der Runtime, mit Ausnahme von Host.Aggregator, mit der Stufe Error protokolliert werden:

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host": "Error",
      "Function": "Error",
      "Host.Aggregator": "Information"
    }
  }
}

Sie können die Protokollstufeneinstellung None verwenden, um zu verhindern, dass Protokolle für eine Kategorie geschrieben werden.

Konfigurieren des Aggregators

Wie im vorherigen Abschnitt erwähnt, werden von der Laufzeit Daten zu den Funktionsausführungen in einem bestimmten Zeitraum aggregiert. Der Standardzeitraum beträgt 30 Sekunden oder 1.000 Ausführungen, je nachdem, was früher eintritt. Sie können diese Einstellung in der Datei host.json konfigurieren. Hier sehen Sie ein Beispiel:

{
    "aggregator": {
      "batchSize": 1000,
      "flushTimeout": "00:00:30"
    }
}

Konfigurieren des Samplings

Application Insights verfügt über ein Feature zur Stichprobenentnahme als Schutz davor, dass bei Spitzenlast zu viele Telemetriedaten für erfolgte Vorgänge produziert werden. Wenn die Rate der eingehenden ausgeführten Vorgänge einen bestimmten Schwellenwert übersteigt, beginnt Application Insights, einige der eingehenden ausgeführten Vorgänge nach dem Zufallsprinzip zu ignorieren. Die Standardeinstellung für die maximale Anzahl ausgeführter Vorgänge pro Sekunde ist 20 (5 in Version 1.x). Sie können das Sampling in der Datei host.json konfigurieren. Hier sehen Sie ein Beispiel:

{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20,
        "excludedTypes": "Request;Exception"
      }
    }
  }
}

Sie können bestimmte Arten von Telemetriedaten aus der Stichprobenentnahme ausschließen. In diesem Beispiel werden Daten vom Typ Request und Exception aus der Stichprobenentnahme ausgeschlossen. Hierdurch wird sichergestellt, dass alle Funktionsausführungen (Anforderungen) und Ausnahmen protokolliert werden, während für andere Arten von Telemetriedaten weiterhin die Stichprobenentnahme verwendet wird.

Weitere Informationen finden Sie unter Stichprobenentnahme in Application Insights.

Konfigurieren von Skalierungscontrollerprotokollen

Dieses Feature befindet sich in der Vorschauphase.

Der Skalierungscontroller von Azure Functions kann Protokolle an Application Insights oder an den Blobspeicher ausgeben, damit sie die Entscheidungen, die der Skalierungscontroller für Ihre Funktions-App trifft, besser nachvollziehen können.

Um dieses Feature zu aktivieren, fügen Sie den Einstellungen Ihrer Funktions-App eine Anwendungseinstellung mit dem Namen SCALE_CONTROLLER_LOGGING_ENABLED hinzu. Der Wert dieser Einstellung muss das Format <DESTINATION>:<VERBOSITY> haben und auf Folgendem basieren:

Eigenschaft BESCHREIBUNG
<DESTINATION> Das Ziel, an das Protokolle gesendet werden. Gültige Werte sind AppInsights und Blob.
Wenn Sie AppInsights verwenden, vergewissern Sie sich, dass Application Insights in der Funktions-App aktiviert ist.
Wenn Sie das Ziel auf Blob festgelegt haben, werden Protokolle in einem Blobcontainer mit dem Namen azure-functions-scale-controller in dem Standardspeicherkonto erstellt, das in der Anwendungseinstellung AzureWebJobsStorage festgelegt ist.
<VERBOSITY> Gibt die Protokollierungsstufe an. Unterstützte Werte sind None, Warning und Verbose.
Wenn diese Einstellung auf Verbose festgelegt ist, protokolliert der Skalierungscontroller einen Grund für jede Änderung an der Workeranzahl sowie Informationen zu den Triggern, die diese Entscheidungen beeinflussen. Ausführliche Protokolle enthalten Triggerwarnungen und die Hashes, die von den Triggern vor und nach dem Ausführen des Skalierungscontrollers verwendet werden.

Tipp

Beachten Sie, dass es Auswirkungen auf die potenziellen Kosten für die Überwachung Ihrer Funktions-App haben kann, wenn die Protokollierung des Skalierungscontrollers weiterhin aktiviert ist. Erwägen Sie, die Protokollierung zu aktivieren, bis Sie genügend Daten gesammelt haben, um das Verhalten des Skalierungscontrollers nachzuvollziehen, und deaktivieren Sie sie dann.

Mit dem folgenden Azure CLI-Befehl wird beispielsweise die ausführliche Protokollierung des Skalierungscontrollers in Application Insights aktiviert:

az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:Verbose

Ersetzen Sie in diesem Beispiel <FUNCTION_APP_NAME> und <RESOURCE_GROUP_NAME> durch den Namen Ihrer Funktions-App bzw. durch den Namen der Ressourcengruppe.

Durch den folgenden Azure CLI-Befehl wird die Protokollierung deaktiviert, indem die Ausführlichkeit auf None festgelegt wird:

az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:None

Sie können die Protokollierung auch deaktivieren, indem Sie die Einstellung SCALE_CONTROLLER_LOGGING_ENABLED mithilfe des folgenden Azure CLI-Befehls entfernen:

az functionapp config appsettings delete --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--setting-names SCALE_CONTROLLER_LOGGING_ENABLED

Wenn die Skalierungscontrollerprotokollierung aktiviert ist, können Sie jetzt Ihre Skalierungscontrollerprotokolle abfragen.

Aktivieren der Application Insights-Integration

Damit eine Funktionen-App Daten an Application Insights senden kann, muss sie den Instrumentierungsschlüssel einer Application Insights-Ressource kennen. Der Schlüssel muss in der App-Einstellung APPINSIGHTS_INSTRUMENTATIONKEY angegeben werden.

Unabhängig davon, ob Sie Ihre Funktions-App im Azure-Portal, über die Befehlszeile mithilfe der Azure Functions Core Tools oder mit Visual Studio Code erstellen, wird die Integration mit Application Insights automatisch aktiviert. Die Application Insights-Ressource hat den gleichen Namen wie Ihre Funktions-App und wird entweder in der gleichen oder nächstgelegenen Region erstellt.

Neue Funktions-App im Azure-Portal

Zum Überprüfen der Application Insights-Ressource, die erstellt wird, wählen Sie sie aus, um das Fenster Application Insights zu erweitern. Sie können den neuen Ressourcennamen ändern oder einen anderen Standort in einer Azure-Region wählen, in der Sie Ihre Daten speichern möchten.

Aktivieren von Application Insights beim Erstellen einer Funktionen-App

Wenn Sie auf Erstellen klicken, wird eine Application Insights-Ressource mit Ihrer Funktions-App erstellt, bei der APPINSIGHTS_INSTRUMENTATIONKEY in den Anwendungseinstellungen festgelegt ist. Alles ist betriebsbereit.

Ergänzen einer vorhandenen Funktions-App

Verwenden Sie die folgenden Schritte zum Erstellen der entsprechenden Ressource, falls für Ihre Funktions-App keine Application Insights-Ressource erstellt wurde. Sie können dann den Instrumentierungsschlüssel dieser Ressource Ihrer Funktions-App als Anwendungseinstellung hinzufügen.

  1. Suchen Sie im Azure-Portal nach Funktions-App, und wählen Sie diese Option und dann Ihre Funktions-App aus.

  2. Wählen Sie oben im Fenster das Banner Application Insights ist nicht konfiguriert aus. Sollte dieses Banner nicht angezeigt werden, ist Application Insights möglicherweise bereits für Ihre App aktiviert.

    Aktivieren von Application Insights über das Portal

  3. Erweitern Sie Ressource ändern, und erstellen Sie eine Application Insights-Ressource. Verwenden Sie dazu die Einstellungen, die in der folgenden Tabelle angegeben sind.

    Einstellung Vorgeschlagener Wert BESCHREIBUNG
    Name der neuen Ressource Eindeutiger App-Name Es ist am einfachsten, den gleichen Namen wie für Ihre Funktionen-App zu verwenden, der in Ihrem Abonnement eindeutig sein muss.
    Location Europa, Westen Verwenden Sie nach Möglichkeit dieselbe Region wie für Ihre Funktions-App (oder eine Region in der Nähe).

    Erstellen Sie eine Application Insights-Ressource .

  4. Wählen Sie Übernehmen.

    Die Application Insights-Ressource wird in derselben Ressourcengruppe und unter demselben Abonnement wie Ihre Funktionen-App erstellt. Schließen Sie nach der Erstellung der Ressource das Application Insights-Fenster.

  5. Wählen Sie in Ihrer Funktions-App unter Einstellungen die Option Konfiguration und dann Anwendungseinstellungen aus. Wenn die Einstellung APPINSIGHTS_INSTRUMENTATIONKEY angezeigt wird, bedeutet dies, dass die Application Insights-Integration für Ihre unter Azure ausgeführte Funktions-App aktiviert ist. Falls diese Einstellung aus irgendeinem Grund nicht vorhanden ist, müssen Sie sie mit Ihrem Application Insights-Instrumentierungsschlüssel als Wert hinzufügen.

Hinweis

In früheren Versionen von Azure Functions wurde die integrierte Überwachung verwendet, was nicht mehr empfohlen wird. Wenn Sie die Application Insights-Integration für eine solche Funktions-App aktivieren, müssen Sie auch die integrierte Protokollierung deaktivieren.

Deaktivieren der integrierten Protokollierung

Wenn Sie Application Insights aktivieren, deaktivieren Sie die integrierte Protokollierung mit Verwendung von Azure Storage. Die integrierte Protokollierung ist für Tests mit einfachen Workloads hilfreich, aber sie ist nicht für die Nutzung in der Produktion mit hohen Auslastungen bestimmt. Für die Produktionsüberwachung empfehlen wir die Verwendung von Application Insights. Bei Nutzung der integrierten Protokollierung in der Produktion kann der Protokollierungsdatensatz aufgrund einer Drosselung von Azure Storage ggf. unvollständig sein.

Löschen Sie die App-Einstellung AzureWebJobsDashboard, um die integrierte Protokollierung zu deaktivieren. Informationen zum Löschen von App-Einstellungen im Azure-Portal finden Sie im Abschnitt Anwendungseinstellungen unter Verwalten einer Funktionen-App im Azure-Portal. Stellen Sie vor dem Löschen der App-Einstellung sicher, dass sie nicht für vorhandene Funktionen in derselben Funktions-App für Azure Storage-Trigger oder -Bindungen verwendet wird.

Nächste Schritte

Weitere Informationen zur Überwachung finden Sie unter folgenden Themen: