Freigeben über


Ü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.

Screenshot: Aktivieren des AppInsights-Java-Agents.

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.

Bei Azure Functions in einem Verbrauchstarif sind die verfügbaren Konfigurationsoptionen auf WEBSITE_SITE_NAME, APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL und APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL beschränkt, um den Aufwärmpool des Verbrauchstarifs nutzen zu können. Für eine weitergehende Konfiguration einer Verbrauchstariffunktion stellen Sie einen eigenen Agent bereit und lesen unter Verteilte Ablaufverfolgung für Java-Funktionen nach.

Die Bereitstellung eines eigenen Agents führt zu einer längeren Kaltstartimplikation 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

  1. Überprüfen Sie, ob die folgenden Einstellungen vorhanden sind, und entfernen Sie sie:

    XDT_MicrosoftApplicationInsights_Java -> 1
    ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
    
  2. Aktivieren Sie die aktuelle Version, indem Sie die folgende Einstellung hinzufügen:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Linux Dediziert/Prämium

  1. Überprüfen Sie, ob die folgenden Einstellungen vorhanden sind, und entfernen Sie sie:

    ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
    
  2. 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