Analysieren von Azure Functions-Telemetriedaten in Application Insights

Die Integration von Azure Functions mit Application Insights ermöglicht Ihnen ein besseres Überwachen Ihrer Funktions-Apps. Application Insights sammelt von Ihrer Funktions-App generierte Telemetriedaten, einschließlich Informationen, die diese App in Protokolle schreibt. Die Application Insights-Integration wird in der Regel beim Erstellen Ihrer Funktions-App aktiviert. Wenn für Ihre Funktions-App kein Instrumentierungsschlüssel festgelegt ist, müssen Sie die Application Insights-Integration zunächst aktivieren.

Standardmäßig werden die von Ihrer Funktions-App gesammelten Daten in Application Insights gespeichert. Im Azure-Portal stellt Application Insights eine umfangreiche Sammlung von Visualisierungen für Ihre Telemetriedaten bereit. Sie können Drilldowns für Fehlerprotokolle, Abfrageereignisse und Metriken ausführen. Dieser Artikel enthält einfache Beispiele für das Anzeigen und Abfragen der gesammelten Daten. Weitere Informationen zum Untersuchen Ihrer Funktions-App-Daten in Application Insights finden Sie unter Was ist Application Insights?

Um Application Insights-Daten aus einer Funktions-App anzeigen zu können, müssen Sie mindestens über Berechtigungen der Rolle „Mitwirkender“ für die Funktions-App verfügen. Sie müssen auch über die Berechtigung Überwachungsleser für die Application Insights-Instanz verfügen. Sie verfügen über diese Berechtigungen standardmäßig für jede Funktions-App und Application Insights-Instanz, die Sie erstellen.

Wenn Sie mehr über Datenaufbewahrung und mögliche Speicherkosten erfahren möchten, lesen Sie den Artikel Datenerfassung, -aufbewahrung und -speicherung in Application Insights.

Anzeigen von Telemetriedaten auf der Registerkarte „Überwachen“

Bei aktivierter Application Insights-Integration können Sie Telemetriedaten auf der Registerkarte Überwachung einsehen.

  1. Wählen Sie auf der Seite der Funktions-App eine Funktion aus, die nach der Konfiguration von Application Insights mindestens einmal ausgeführt wurde. Wählen Sie dann im linken Bereich Überwachen aus. Wählen Sie wiederholt die Option Aktualisieren aus, bis die Liste der Funktionsaufrufe angezeigt wird.

    Liste der Funktionsaufrufe

    Hinweis

    Es kann bis zu 5 Minuten dauern, bis die Liste angezeigt wird, während der Telemetrieclient Daten zur Übermittlung an den Server in Batches zusammenfasst. Diese Verzögerung gilt nicht für Live Metrics Stream. Bei diesem Dienst wird eine Verbindung mit dem Functions-Host hergestellt, wenn Sie die Seite laden, sodass Protokolle direkt an die Seite gestreamt werden.

  2. Wählen Sie zum Anzeigen der Protokolle für einen bestimmten Funktionsaufruf den Link für diesen Aufruf in der Spalte Datum (UTC) aus. Die Protokollausgabe für diesen Aufruf wird auf einer neuen Seite angezeigt.

    Aufrufdetails

  3. Wählen Sie In Application Insights ausführen aus, um die Quelle der Abfrage anzuzeigen, mit der die Azure Monitor-Protokolldaten in das Azure-Protokoll abgerufen werden. Wenn Sie Azure Log Analytics zum ersten Mal in Ihrem Abonnement verwenden, werden Sie aufgefordert, es zu aktivieren.

  4. Nachdem Sie Log Analytics aktiviert haben, wird folgende Abfrage angezeigt. Sie können erkennen, dass die Abfrageergebnisse auf die letzten 30 Tage beschränkt sind (where timestamp > ago(30d)) und nicht mehr als 20 Zeilen der Ergebnisse angezeigt werden (take 20). Im Gegensatz dazu, zeigt die Liste der Aufrufdetails für Ihre Funktion die letzten 30 Tage ohne Beschränkung an.

    Application Insights Analytics-Aufrufliste

Weitere Informationen finden Sie weiter unten in diesem Artikel unter Abfragen von Telemetriedaten.

Anzeigen von Telemetriedaten in Application Insights

So öffnen Sie Application Insights in einer Funktions-App im Azure-Portal

  1. Navigieren Sie im Portal zu Ihrer Funktions-App.

  2. Klicken Sie auf der linken Seite unter Einstellungen auf Application Insights.

  3. Wenn Sie Application Insights mit Ihrem Abonnement zum ersten Mal verwenden, werden Sie aufgefordert, das Feature zu aktivieren. Klicken Sie hierzu auf Application Insights aktivieren und dann auf der nächsten Seite auf Übernehmen.

Öffnen von Application Insights auf der Seite „Übersicht“ von Funktions-Apps

Informationen zur Verwendung von Application Insights finden Sie in der Application Insights-Dokumentation. In diesem Abschnitt sind einige Beispiele für das Anzeigen von Daten in Application Insights enthalten. Falls Sie mit Application Insights bereits vertraut sind, können Sie direkt zu den Abschnitten zur Konfiguration und Anpassung der Telemetriedaten springen.

Application Insights-Registerkarte „Übersicht“

Die folgenden Bereiche von Application Insights können bei der Bewertung des Verhaltens, der Leistung und der Fehler in Ihren Funktionen hilfreich sein:

Untersuchen BESCHREIBUNG
Fehler Hier können Sie Diagramme und Warnungen basierend auf Funktionsfehlern und Serverausnahmen erstellen. Der Vorgangsname ist der Funktionsname. Fehler in Abhängigkeiten werden nur angezeigt, wenn Sie die benutzerdefinierte Telemetrie für Abhängigkeiten implementieren.
Leistung Hier können Sie Leistungsprobleme analysieren, indem Sie die Ressourcennutzung und den Durchsatz pro Cloud-Rolleninstanz anzeigen. Diese Leistungsdaten können nützlich für Debugszenarios sein, in denen Ihre zugrunde liegenden Ressourcen durch Funktionen beeinträchtigt werden.
Metriken Hier können Sie Diagramme und Warnungen auf der Grundlage von Metriken erstellen. Metriken enthalten die Anzahl der Funktionsaufrufe, die Ausführungsdauer und die Erfolgsquote.
Livemetriken Hiermit können Sie Metrikdaten während ihrer Erstellung in Quasi-Echtzeit anzeigen.

Abfragen von Telemetriedaten

Mit Application Insights Analytics haben Sie Zugriff auf alle Telemetriedaten in Form von Tabellen in einer Datenbank. Analytics stellt eine Abfragesprache zum Extrahieren, Bearbeiten und Visualisieren der Daten bereit.

Klicken Sie auf Protokolle, um protokollierte Ereignisse zu durchsuchen oder abzufragen.

Analytics-Beispiel

Diese Abfragebeispiel zeigt Verteilung von Anforderungen pro Worker in den letzten 30 Minuten.

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

Die verfügbaren Tabellen werden links auf der Registerkarte Schema angezeigt. Daten, die durch Funktionsaufrufe generiert wurden, sind in den folgenden Tabellen enthalten:

Tabelle BESCHREIBUNG
traces Von der Runtime und dem Skalierungscontroller erstellte Protokolle und Ablaufverfolgungen für Ihren Funktionscode Für das Hosten mit dem Flex-Verbrauchstarif enthält traces auch Protokolle, die während der Codebereitstellung erstellt wurden.
requests Jeweils eine Anforderung pro Funktionsaufruf.
exceptions Alle Ausnahmen, die von der Laufzeit ausgelöst werden.
customMetrics Die Anzahl von erfolgreichen und nicht erfolgreichen Aufrufen, Erfolgsrate und Dauer.
customEvents Ereignisse, die von der Runtime verfolgt werden, z. B.: HTTP-Anforderungen, die eine Funktion auslösen.
performanceCounters Informationen zur Leistung der Server, auf denen die Funktionen ausgeführt werden.

Die anderen Tabellen sind für Verfügbarkeitstests und Client/Browser-Telemetrie bestimmt. Sie können die benutzerdefinierte Telemetrie implementieren, um Daten hinzuzufügen.

In jeder Tabelle befinden sich einige der Functions-spezifischen Daten im Feld customDimensions. Mit der folgenden Abfrage werden beispielsweise alle Ablaufverfolgungen mit der Protokollebene Error abgerufen.

traces 
| where customDimensions.LogLevel == "Error"

Die Runtime stellt die Felder customDimensions.LogLevel und customDimensions.Category zur Verfügung. Sie können zusätzliche Felder in Protokollen angeben, die Sie in Ihren Funktionscode schreiben. Ein Beispiel in C# finden Sie unter Strukturierte Protokollierung im Entwicklerleitfaden für .NET-Klassenbibliotheken.

Abfragen von Funktionsaufrufen

Jedem Funktionsaufruf wird eine eindeutige ID zugewiesen. InvocationId ist in der benutzerdefinierten Dimension enthalten und kann verwendet werden, um alle Protokolle einer bestimmten Funktionsausführung zu korrelieren.

traces
| project customDimensions["InvocationId"], message

Telemetriekorrelation

Protokolle aus verschiedenen Funktionen können mit operation_Idkorreliert werden. Verwenden Sie die folgende Abfrage, um alle Protokolle für einen bestimmten logischen Vorgang zurückzugeben.

traces
| where operation_Id == '45fa5c4f8097239efe14a2388f8b4e29'
| project timestamp, customDimensions["InvocationId"], message
| order by timestamp

Prozentsatz für die Stichprobenentnahme

Durch das Konfigurieren der Stichprobenentnahme können Sie die Menge der Telemetriedaten verringern. Ermitteln Sie anhand der folgenden Abfrage, ob die Stichprobenentnahme betriebsbereit ist oder nicht. Wenn Sie sehen, dass RetainedPercentage für einen beliebigen Typ kleiner als 100 ist, werden für diesen Telemetrietyp Stichproben erstellt.

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

Abfragen von Skalierungscontrollerprotokollen

Dieses Feature befindet sich in der Vorschauphase.

Nachdem Sie sowohl die Protokollierung des Skalierungscontrollers als auch die Application Insights-Integration aktiviert haben, können Sie mithilfe der Protokollsuche von Application Insights die ausgegebenen Skalierungscontrollerprotokolle abfragen. Die Skalierungscontrollerprotokolle werden in der Sammlung traces unter der Kategorie ScaleControllerLogs gespeichert.

Mit der folgenden Abfrage können Sie nach allen Skalierungscontrollerprotokollen für die aktuelle Funktions-App im angegebenen Zeitraum suchen:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"

Die folgende Abfrage erweitert die vorherige Abfrage, um zu veranschaulichen, wie Sie nur Protokolle anzeigen, die auf eine Änderung der Skalierung hinweisen:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"
| where message == "Instance count changed"
| extend Reason = CustomDimensions.Reason
| extend PreviousInstanceCount = CustomDimensions.PreviousInstanceCount
| extend NewInstanceCount = CustomDimensions.CurrentInstanceCount

Abfragen von Codebereitstellungsprotokollen mit Flex-Verbrauch

Wichtig

Der Flex-Verbrauchstarif befindet sich derzeit in der Vorschau.

Mit der folgenden Abfrage können Sie nach allen Codebereitstellungsprotokollen für die aktuelle Funktions-App im angegebenen Zeitraum suchen:

traces
| extend deploymentId = customDimensions.deploymentId
| where deploymentId != ''
| project timestamp, deploymentId, message, severityLevel, customDimensions, appName

Verbrauchstarifspezifische Metriken

Beim Ausführen mit einem Verbrauchstarif werden die Ausführungskosten einer einzelnen Funktionsausführung in GB-Sekunden gemessen. Die Ausführungskosten werden berechnet, indem die Speichernutzung mit der Ausführungsdauer kombiniert wird. Weitere Informationen finden Sie unter Abschätzen der Kosten des Verbrauchstarifs.

Die folgenden Telemetrieabfragen sind spezifisch für Metriken, die sich im Verbrauchstarif auf die Kosten für das Ausführen von Funktionen auswirken.

Arbeitsspeichernutzung ermitteln

Wählen Sie unter Überwachung den Eintrag Protokolle (Analytics) aus, kopieren Sie dann die folgende Telemetrieabfrage, fügen Sie sie in das Abfragefenster ein, und wählen Sie Ausführen aus. Diese Abfrage gibt die Gesamtarbeitsspeichernutzung zu jedem Stichprobenzeitpunkt zurück.

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

Die Ergebnisse sehen ungefähr wie folgt aus:

Zeitstempel [UTC] name value
12.9.2019, 1:05:14,947 Uhr Private Bytes 209.932.288
12.9.2019, 1:06:14,994 Uhr Private Bytes 212.189.184
12.9.2019, 1:06:30,010 Uhr Private Bytes 231.714.816
12.9.2019, 1:07:15,040 Uhr Private Bytes 210.591.744
12.9.2019, 1:12:16,285 Uhr Private Bytes 216.285.184
12.9.2019, 1:12:31,376 Uhr Private Bytes 235.806.720

Bestimmen der Dauer

Azure Monitor erfasst Metriken auf Ressourcenebene, wobei es sich für Functions um die Funktions-App handelt. Application Insights-Integration gibt Metriken pro Funktion aus. Im Folgenden finden Sie ein Beispiel für eine Analytics-Abfrage, mit der die durchschnittliche Dauer einer Funktion abgefragt wird:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name averageDurationMilliseconds
QueueTrigger AvgDurationMs 16,087
QueueTrigger MaxDurationMs 90,249
QueueTrigger MinDurationMs 8,522

Nächste Schritte

Weitere Informationen zur Überwachung in Azure Functions finden Sie unter: