Azure Functions bewaken met Azure Monitor Application Insights

Azure Functions biedt ingebouwde integratie met Application Insights voor het bewaken van functies. Voor andere talen dan .NET en .NET Core zijn andere taalspecifieke werkrollen/extensies nodig om de volledige voordelen van gedistribueerde tracering te krijgen.

Application Insights verzamelt logboek-, prestatie- en foutgegevens en detecteert automatisch prestatieafwijkingen. Application Insights bevat krachtige analysehulpprogramma's waarmee u problemen kunt diagnosticeren en inzicht krijgt in hoe uw functies worden gebruikt. Wanneer u inzicht hebt in uw toepassingsgegevens, kunt u de prestaties en bruikbaarheid voortdurend verbeteren. U kunt Application Insights zelfs gebruiken tijdens het ontwikkelen van lokale functie-apps.

De vereiste Application Insights-instrumentatie is ingebouwd in Azure Functions. U hebt alleen een geldige verbindingsreeks om uw functie-app te verbinden met een Application Insights-resource. De verbindingsreeks moet worden toegevoegd aan uw toepassingsinstellingen wanneer uw functie-app-resource wordt gemaakt in Azure. Als uw functie-app nog geen verbindingsreeks heeft, kunt u deze handmatig instellen. Zie Uitvoeringsbewerkingen bewaken in Azure Functions en Verbinding maken iontekenreeksen voor meer informatie.

Notitie

Op 31 maart 2025 eindigt de ondersteuning voor opname van instrumentatiesleutels. Opname van instrumentatiesleutels blijft werken, maar we bieden geen updates of ondersteuning meer voor de functie. Overgang naar verbindingsreeks s om te profiteren van nieuwe mogelijkheden.

Zie Ondersteunde omgevingen, talen en resourceproviders voor een lijst met ondersteunde auto-instrumentatiescenario's.

Gedistribueerde tracering voor Java-toepassingen

Notitie

Deze functie heeft vroeger een koude opstartimplicatie van 8 tot 9 seconden, die is teruggebracht tot minder dan 1 seconde. Als u een vroege adopter van deze functie was (bijvoorbeeld vóór februari 2023), raadpleegt u de sectie Probleemoplossing om bij te werken naar de huidige versie en profiteert u van het nieuwe snellere opstarten.

Als u meer gegevens wilt weergeven uit uw Op Java gebaseerde Azure Functions-toepassingen dan standaard wordt verzameld, schakelt u de Application Insights Java 3.x-agent in. Met deze agent kan Application Insights automatisch afhankelijkheden, logboeken en metrische gegevens verzamelen en correleren van populaire bibliotheken en Azure Software Development Kits (SDK's). Deze telemetrie is naast de aanvraagtelemetrie die al door Functions is vastgelegd.

Door de toepassingstoewijzing te gebruiken en een volledigere weergave van end-to-end transacties te hebben, kunt u problemen beter diagnosticeren. U hebt een topologische weergave van de interactie van systemen, samen met gegevens op gemiddelde prestaties en foutpercentages. U hebt ook meer gegevens voor end-to-end diagnostische gegevens. U kunt de toepassingstoewijzing gebruiken om eenvoudig de hoofdoorzaak van betrouwbaarheidsproblemen en prestatieknelpunten per aanvraag te vinden.

Voor meer geavanceerde use cases kunt u telemetrie wijzigen door spans toe te voegen, de spanstatus bij te werken en spankenmerken toe te voegen. U kunt ook aangepaste telemetrie verzenden met behulp van standaard-API's.

Gedistribueerde tracering inschakelen voor Java-functie-apps

Ga in het deelvenster Overzicht van de functie-app naar Application Insights. Selecteer Aanbevolen onder Verzamelingsniveau.

Schermopname van het inschakelen van de AppInsights Java-agent.

Probleemoplossing

Uw Java-functies kunnen trage opstarttijden hebben als u deze functie hebt aangenomen vóór februari 2023. Ga in het deelvenster Overzicht van de functie-app naar Configuratie in het navigatiemenu aan de linkerkant. Selecteer vervolgens Toepassingsinstellingen en gebruik de volgende stappen om het probleem op te lossen.

Windows

  1. Controleer of de volgende instellingen bestaan en verwijder deze:

    XDT_MicrosoftApplicationInsights_Java -> 1
    ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
    
  2. Schakel de nieuwste versie in door deze instelling toe te voegen:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Linux Dedicated/Premium

  1. Controleer of de volgende instellingen bestaan en verwijder deze:

    ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
    
  2. Schakel de nieuwste versie in door deze instelling toe te voegen:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Notitie

Als de nieuwste versie van de Application Insights Java-agent niet beschikbaar is in Azure Functions, uploadt u deze handmatig door deze instructies te volgen.

Connectiviteit testen tussen uw toepassingshost en de opnameservice

Application Insights SDK's en agents verzenden telemetrie om opgenomen te worden als REST-aanroepen naar onze opname-eindpunten. U kunt de connectiviteit vanaf uw webserver of toepassingshostcomputer testen op de service-eindpunten voor opname met behulp van onbewerkte REST-clients uit PowerShell- of curl-opdrachten. Zie Problemen met ontbrekende toepassingstelemetrie oplossen in Azure Monitor Application Insights.

Dubbele logboeken

Als u log4j gebruikmaakt van of logback voor consolelogboekregistratie, maakt gedistribueerde tracering voor Java Functions dubbele logboeken. Deze dubbele logboeken worden vervolgens verzonden naar Application Insights. Gebruik de volgende tijdelijke oplossingen om dit gedrag te voorkomen.

Log4j

Voeg het volgende filter toe aan uw log4j.xml:

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

Voorbeeld:

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

Voeg het volgende filter toe aan uw logback.xml:

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

Voorbeeld:

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

Gedistribueerde tracering voor Node.js functie-apps

Als u meer gegevens uit uw Node Azure Functions-toepassingen wilt weergeven dan standaard wordt verzameld, instrumenteert u uw functie met behulp van de Azure Monitor OpenTelemetry Distro.

Gedistribueerde tracering voor Python-functie-apps

Als u telemetrie wilt verzamelen van services zoals Aanvragen, URLlib3, httpx, PsycoPG2 en meer, gebruikt u de Azure Monitor OpenTelemetry Distro. Bijgehouden binnenkomende aanvragen die binnenkomen in uw Python-toepassing die wordt gehost in Azure Functions, worden niet automatisch gecorreleerd met telemetrie die erin wordt bijgehouden. U kunt traceringscorrelatie handmatig bereiken door traceringscontext rechtstreeks te extraheren, zoals hieronder wordt weergegeven:

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),
   ):
      ...

Volgende stappen