Övervaka Azure Functions med Azure Monitor Application Insights

Azure Functions erbjuder inbyggd integrering med Application Insights för att övervaka funktioner. För andra språk än .NET och .NET Core behövs andra språkspecifika arbetare/tillägg för att få de fullständiga fördelarna med distribuerad spårning.

Application Insights samlar in logg-, prestanda- och feldata och identifierar automatiskt prestandaavvikelser. Application Insights innehåller kraftfulla analysverktyg som hjälper dig att diagnostisera problem och förstå hur dina funktioner används. När du har insyn i dina programdata kan du kontinuerligt förbättra prestanda och användbarhet. Du kan till och med använda Application Insights under projektutvecklingen för lokala funktionsappar.

Den nödvändiga Application Insights-instrumentationen är inbyggd i Azure Functions. Allt du behöver är en giltig anslutningssträng för att ansluta funktionsappen till en Application Insights-resurs. Anslutningssträng ska läggas till i dina programinställningar när funktionsappresursen skapas i Azure. Om funktionsappen inte redan har en anslutningssträng kan du ange den manuellt. Mer information finns i Övervaka körningar i Azure Functions och Anslut ionssträngar.

Kommentar

Stödet för inmatning av instrumentationsnycklar upphör den 31 mars 2025. Inmatningen av instrumenteringsnyckeln fortsätter att fungera, men vi kommer inte längre att tillhandahålla uppdateringar eller stöd för funktionen. Övergå till anslutningssträng för att dra nytta av nya funktioner.

En lista över scenarier med automatisk instrumentering som stöds finns i Miljöer, språk och resursprovidrar som stöds.

Distribuerad spårning för Java-program

Kommentar

Den här funktionen brukade ha en 8-till 9-sekunders kall start implikation, som har reducerats till mindre än 1 sekund. Om du var en tidig användare av den här funktionen (till exempel före februari 2023) läser du avsnittet "Felsökning" för att uppdatera till den aktuella versionen och dra nytta av den nya snabbare starten.

Om du vill visa mer data från dina Java-baserade Azure Functions-program än vad som samlas in som standard aktiverar du Application Insights Java 3.x-agenten. Med den här agenten kan Application Insights automatiskt samla in och korrelera beroenden, loggar och mått från populära bibliotek och Azure Software Development Kits (SDK:er). Den här telemetrin är utöver den telemetri för begäran som redan har samlats in av Functions.

Genom att använda programkartan och få en mer fullständig vy över transaktioner från slutpunkt till slutpunkt kan du bättre diagnostisera problem. Du har en topologisk vy över hur system interagerar tillsammans med data om genomsnittliga prestanda- och felfrekvenser. Du har också mer data för diagnostik från slutpunkt till slutpunkt. Du kan använda programkartan för att enkelt hitta rotorsaken till tillförlitlighetsproblem och flaskhalsar för prestanda per begäran.

För mer avancerade användningsfall kan du ändra telemetri genom att lägga till intervall, uppdatera span-status och lägga till spanattribut. Du kan också skicka anpassad telemetri med hjälp av standard-API:er.

Aktivera distribuerad spårning för Java-funktionsappar

Gå till Application Insights i funktionsappens översiktsfönster. Under Samlingsnivå väljer du Rekommenderas.

Skärmbild som visar hur du aktiverar AppInsights Java-agenten.

Felsökning

Dina Java-funktioner kan ha långsamma starttider om du antog den här funktionen före februari 2023. Från funktionsappens översiktsfönster går du till Konfiguration i navigeringsmenyn till vänster. Välj sedan Programinställningar och använd följande steg för att åtgärda problemet.

Windows

  1. Kontrollera om följande inställningar finns och ta bort dem:

    XDT_MicrosoftApplicationInsights_Java -> 1
    ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
    
  2. Aktivera den senaste versionen genom att lägga till den här inställningen:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Linux Dedicated/Premium

  1. Kontrollera om följande inställningar finns och ta bort dem:

    ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
    
  2. Aktivera den senaste versionen genom att lägga till den här inställningen:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Kommentar

Om den senaste versionen av Application Insights Java-agenten inte är tillgänglig i Azure Functions laddar du upp den manuellt genom att följa dessa instruktioner.

Testa anslutningen mellan programvärden och inmatningstjänsten

Application Insights SDK:er och agenter skickar telemetri för att matas in som REST-anrop till våra inmatningsslutpunkter. Du kan testa anslutningen från webbservern eller programvärddatorn till slutpunkterna för inmatningstjänsten med hjälp av råa REST-klienter från PowerShell- eller curl-kommandon. Se Felsöka programtelemetri som saknas i Azure Monitor Application Insights.

Duplicerade loggar

Om du använder log4j eller logback för konsolloggning skapar distribuerad spårning för Java Functions dubbletter av loggar. Dessa dubblettloggar skickas sedan till Application Insights. Undvik det här beteendet genom att använda följande lösningar.

Log4j

Lägg till följande filter i log4j.xml:

<Filters>
  <ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>

Exempel:

<?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>
Tillbakaloggning

Lägg till följande filter i logback.xml:

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  <level>OFF</level>
</filter>  

Exempel:

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

Distribuerad spårning för Node.js funktionsappar

Om du vill visa mer data från dina Node Azure Functions-program än vad som samlas in som standard kan du instrumentera funktionen med hjälp av Azure Monitor OpenTelemetry Distro.

Distribuerad spårning för Python-funktionsappar

Om du vill samla in telemetri från tjänster som Begäranden, urllib3, httpx, PsycoPG2 med mera använder du Azure Monitor OpenTelemetry Distro. Spårade inkommande begäranden som kommer till ditt Python-program som finns i Azure Functions korreleras inte automatiskt med telemetri som spåras i det. Du kan uppnå spårningskorrelation manuellt genom att extrahera TraceContext direkt enligt nedan:

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ästa steg