Überwachen von Azure Functions mit Azure Monitor Application Insights
Azure Functions bietet eine standardmäßige Integration in Application Insights für die Überwachung von Funktionen. Für andere Sprachen als .NET und .NET Core sind weitere sprachspezifische Worker/Erweiterungen erforderlich, um den gesamten Nutzen der verteilten Ablaufverfolgung zu erhalten.
Application Insights sammelt Protokoll-, Leistungs- und Fehlerdaten und erkennt automatisch Leistungsanomalien. Application Insights verfügt über leistungsstarke Analysetools, mit denen Sie Probleme untersuchen und die Verwendung Ihrer Funktionen nachvollziehen können. Wenn Sie Einblick in Ihre Anwendungsdaten haben, können Sie die Leistung und Benutzerfreundlichkeit kontinuierlich verbessern. Sie können Application Insights auch während der lokalen Entwicklung an Funktions-App-Projekten verwenden.
Die erforderliche Application Insights-Instrumentierung ist in Azure Functions integriert. Sie benötigen lediglich eine gültige Verbindungszeichenfolge, um Ihre Funktions-App mit einer Application Insights-Ressource zu verbinden. Die Verbindungszeichenfolge sollte Ihren Anwendungseinstellungen hinzugefügt werden, wenn ihre Funktions-App-Ressource in Azure erstellt wird. Wenn Ihre Funktions-App noch nicht über eine Verbindungszeichenfolge verfügt, können Sie diese manuell festlegen. Weitere Informationen finden Sie unter Überwachen von Ausführungen in Azure Functions sowie unter Verbindungszeichenfolgen.
Hinweis
Am 31. März 2025 wird der Support für die auf Instrumentierungsschlüsseln basierende Erfassung eingestellt. Die Erfassung von Instrumentierungsschlüsseln funktioniert zwar weiterhin, wir stellen jedoch keine Updates und keinen Support mehr für das Feature bereit. Wechseln Sie zu Verbindungszeichenfolgen, damit Sie neue Funktionen nutzen können.
Eine Liste der unterstützten Szenarien für die automatische Instrumentierung finden Sie unter Unterstützte Umgebungen, Sprachen und Ressourcenanbieter.
Verteilte Ablaufverfolgung für Java-Anwendungen
Hinweis
Dieses Feature hatte früher eine Kaltstart-Auswirkung von acht bis neun Sekunden, die auf weniger als eine Sekunde reduziert wurde. Wenn Sie ein Early Adopter dieses Features waren (es also beispielsweise vor Februar 2023 eingeführt haben), lesen Sie den Abschnitt zur Problembehandlung, um auf die aktuelle Version zu aktualisieren und vom neuen schnelleren Startprozess zu profitieren.
Um mehr Daten aus Ihren Java-basierten Azure Functions-Anwendungen anzuzeigen, als standardmäßig gesammelt werden, können Sie den Application Insights Java 3.x-Agent aktivieren. Mit diesem Agent kann Application Insights automatisch Abhängigkeiten, Protokolle und Metriken aus beliebten Bibliotheken und Azure-SDKs sammeln und korrelieren. Diese Telemetriedaten werden zusätzlich zu den bereits von Functions erfassten Anforderungstelemetriedaten gesammelt.
Dank der Anwendungsübersicht und einem umfassenderen Überblick über End-to-End-Transaktionen können Sie Probleme besser diagnostizieren. Sie verfügen über eine topologische Ansicht der Interaktionen von Systemen sowie über Daten zur durchschnittlichen Leistung und zu Fehlerraten. Außerdem verfügen Sie über mehr Daten für End-to-End-Diagnosen. Mithilfe der Anwendungsübersicht können Sie mühelos die Grundursache von Zuverlässigkeitsproblemen und Leistungsengpässen für einzelne Anforderungen ermitteln.
Für komplexere Anwendungsfälle können Sie Telemetriedaten ändern, indem Sie Spannen hinzufügen, den Spannenstatus aktualisieren und Spannenattribute hinzufügen. Außerdem können Sie Standard-APIs verwenden, um benutzerdefinierte Telemetriedaten zu senden.
Aktivieren der verteilten Ablaufverfolgung für Java-Funktions-Apps
Wechseln Sie im Bereich Übersicht der Funktions-App zu Application Insights. Wählen Sie unter Sammlungsebene die Option Empfohlen aus.
Konfiguration
Um dieses Feature für eine Azure-Funktions-App zu konfigurieren, die nicht in einem Verbrauchstarif enthalten ist, fügen Sie Umgebungsvariablen in den App-Einstellungen hinzu. Weitere Informationen zum Überprüfen der verfügbaren Konfigurationen finden Sie unter Konfigurationsoptionen: Azure Monitor Application Insights für Java.
Für Azure Functions in einem Verbrauchstarif sind nur die Konfigurationsoptionen APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL und APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL verfügbar. Für zusätzliche Konfigurationen für eine Verbrauchstariffunktion stellen Sie einen eigenen Agent bereit. Weitere Informationen finden Sie unter Benutzerdefinierter verteilter Ablaufverfolgungs-Agent für Java-Funktionen.
Die Bereitstellung eines eigenen Agents führt zu einer längeren Kaltstartzeit für Verbrauchstariffunktionen.
Problembehandlung
Ihre Java-Funktionen starten möglicherweise nur langsam, wenn Sie dieses Feature vor Februar 2023 eingeführt haben. Navigieren Sie im Bereich Übersicht der Funktions-App im linken Navigationsmenü zu Konfiguration. Wählen Sie dann Anwendungseinstellungen aus und führen Sie die folgenden Schritte aus, um das Problem zu beheben.
Windows
Überprüfen Sie, ob die folgenden Einstellungen vorhanden sind, und entfernen Sie sie:
XDT_MicrosoftApplicationInsights_Java -> 1 ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
Aktivieren Sie die aktuelle Version, indem Sie die folgende Einstellung hinzufügen:
APPLICATIONINSIGHTS_ENABLE_AGENT: true
Linux Dediziert/Prämium
Überprüfen Sie, ob die folgenden Einstellungen vorhanden sind, und entfernen Sie sie:
ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
Aktivieren Sie die aktuelle Version, indem Sie die folgende Einstellung hinzufügen:
APPLICATIONINSIGHTS_ENABLE_AGENT: true
Hinweis
Wenn die aktuelle Version des Application Insights Java-Agents in Azure Functions nicht verfügbar ist, laden Sie sie manuell hoch, wie hier beschrieben.
Testen der Konnektivität zwischen Ihrem Anwendungshost und dem Erfassungsdienst
Application Insights SDKs und -Agents senden Telemetriedaten, die als REST-Aufrufe unserer Erfassungsendpunkte erfasst werden sollen. Sie können die Konnektivität Ihres Webservers oder Anwendungshostcomputers mit den Endpunkten des Erfassungsdiensts testen, indem Sie unformatierte REST-Clients über PowerShell- oder cURL-Befehle verwenden. Weitere Informationen finden Sie unter Problembehandlung bei fehlender Anwendungstelemetrie in Azure Monitor Application Insights.
Doppelte Protokolle
Wenn Sie log4j
oder logback
für die Konsolenprotokollierung verwenden, erstellt die verteilte Ablaufverfolgung für Java Functions doppelte Protokolle. Diese doppelten Protokolle werden dann an Application Insights gesendet. Mit den folgenden Mitteln können Sie dieses Verhalten vermeiden.
Log4j
Fügen Sie Ihrer log4j.xml-Datei den folgenden Filter hinzu:
<Filters>
<ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
Beispiel:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Filters>
<ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Logback
Fügen Sie Ihrer logback.xml-Datei den folgenden Filter hinzu:
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>OFF</level>
</filter>
Beispiel:
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>OFF</level>
</filter>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Verteilte Ablaufverfolgung für Node.js-Funktions-Apps
Um mehr Daten aus Ihren Azure Functions-Apps für Node anzuzeigen als standardmäßig gesammelt werden, instrumentieren Sie Ihre Funktion mithilfe der OpenTelemetry-Distribution von Azure Monitor.
Verteilte Ablaufverfolgung für Python-Funktions-Apps
Um Telemetriedaten von Diensten wie Anforderungen, urllib3, httpx
, PsycoPG2 usw. zu sammeln, verwenden Sie die Azure Monitor OpenTelemetry-Distribution. Nachverfolgte eingehende Anfragen, die in Ihrer in Azure Functions gehosteten Python-Anwendung eingehen, werden nicht automatisch mit den darin nachverfolgten Telemetriedaten korreliert. Sie können die Ablaufverfolgungskorrelation manuell einrichten, indem Sie den TraceContext direkt wie folgt extrahieren:
import azure.functions as func
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.propagate import extract
# Configure Azure monitor collection telemetry pipeline
configure_azure_monitor()
def main(req: func.HttpRequest, context) -> func.HttpResponse:
...
# Store current TraceContext in dictionary format
carrier = {
"traceparent": context.trace_context.Traceparent,
"tracestate": context.trace_context.Tracestate,
}
tracer = trace.get_tracer(__name__)
# Start a span using the current context
with tracer.start_as_current_span(
"http_trigger_span",
context=extract(carrier),
):
...
Nächste Schritte
- Weitere Anleitungen und Informationen zur Überwachung von Azure Functions finden Sie hier.
- Verschaffen Sie sich einen Überblick über die verteilte Ablaufverfolgung.
- Informieren Sie sich über die Möglichkeiten der Anwendungsübersicht für Ihr Unternehmen.
- Erfahren Sie mehr über Anforderungen und Abhängigkeiten für Java-Apps.
- Informieren Sie sich ausführlicher über Azure Monitor und Application Insights.