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.
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.
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.
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.
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.
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.
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
Navigieren Sie im Portal zu Ihrer Funktions-App.
Klicken Sie auf der linken Seite unter Einstellungen auf Application Insights.
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.
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.
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.
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_Id
korreliert 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
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: