Monitorare le Funzioni di Azure con Application Insights di Monitoraggio di Azure

Funzioni di Azure offre l'integrazione predefinita con Azure Application Insights per il monitoraggio delle funzioni. Per i linguaggi diversi da .NET e .NET Core, sono necessari altri ruoli di lavoro/estensioni specifici del linguaggio per ottenere i vantaggi completi della traccia distribuita.

Application Insights raccoglie i dati relativi a log, prestazioni ed errori e rileva automaticamente le anomalie delle prestazioni. Application Insights include strumenti di analisi potenti per diagnosticare i problemi e acquisire informazioni sul modo in cui le funzioni vengono utilizzate. Quando si ha visibilità sui dati dell'applicazione, è possibile migliorare continuamente le prestazioni e l'usabilità. È anche possibile usare Application Insights durante lo sviluppo di un progetto locale di app per le funzioni.

La strumentazione di Application Insights necessaria è incorporata in Funzioni di Azure. L'unico elemento necessario è una stringa di connessione valida per connettere l'app per le funzioni a una risorsa Application Insights. La stringa di connessione deve essere aggiunta alle impostazioni dell'applicazione quando la risorsa dell'app per le funzioni viene creata in Azure. Se l'app per le funzioni non dispone già di questa stringa di connessione, è possibile impostarla manualmente. Per altre informazioni, vedere Monitorare le esecuzioni in Funzioni di Azure e Stringhe di connessione.

Nota

Il 31 marzo 2025, il supporto per l'inserimento delle chiavi di strumentazione terminerà. L'inserimento delle chiavi di strumentazione continuerà a funzionare, ma non saranno più garantiti aggiornamenti o supporto per la funzionalità. Eseguire la transizione alle stringhe di connessione per sfruttare le nuove funzionalità.

Per un elenco degli scenari di strumentazione automatica supportati, vedere Ambienti, lingue e provider di risorse supportati.

Traccia distribuita per le applicazioni Java

Nota

Questa funzionalità è stata usata per avere un'implicazione di avvio a freddo da 8 a 9 secondi, che è stata ridotta a meno di 1 secondo. Se si è stati early adopter di questa funzionalità (ad esempio, prima di febbraio 2023), esaminare la sezione "Risoluzione dei problemi" per eseguire l'aggiornamento alla versione corrente e trarre vantaggio dalla nuova avvio più veloce.

Per visualizzare più dati dalle applicazioni di Funzioni di Azure basate su Java rispetto a raccolte per impostazione predefinita, abilitare l'agente Java 3.x di Application Insights. Questo agente consente ad Application Insights di raccogliere e correlare automaticamente dipendenze, log e metriche dalle librerie più diffuse e dagli SDK (Software Development Kit) di Azure. Questi dati di telemetria si aggiungono ai dati di telemetria delle richieste già acquisiti da Funzioni.

La mappa delle applicazioni e la visualizzazione più completa delle transazioni end-to-end permettono una migliore diagnosi dei problemi. Si ha una visione topologica del modo in cui i sistemi interagiscono con i dati sulle prestazioni medie e sulle percentuali di errore. Sono disponibili anche altri dati per la diagnostica end-to-end. È possibile utilizzare la mappa delle app per trovare la causa radice dei problemi di affidabilità e dei colli di bottiglia delle prestazioni per le singole richieste.

Per casi d'uso più avanzati, è possibile modificare i dati di telemetria aggiungendo intervalli, aggiornando lo stato dell'intervallo e aggiungendo attributi span. È anche possibile inviare dati di telemetria personalizzati usando le API standard.

Abilitare la traccia distribuita per le app per le funzioni Java

Aprire Application Insights dalla pagina Panoramica dell'app per le funzioni. In Livello di raccolta, selezionare Consigliato.

Screenshot che mostra come abilitare l'agente Java di AppInsights.

Impostazione

Per configurare questa funzionalità per un'App per le funzioni di Azure non in un piano a consumo, aggiungere variabili di ambiente nelle impostazioni dell'app. Per visualizzare le configurazioni disponibili, vedere Opzioni di configurazione: Application Insights di Monitoraggio di Azure per Java.

Per Funzioni di Azure in un piano a consumo, le opzioni di configurazione disponibili sono limitate a APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL e APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL. Per creare configurazioni aggiuntive in una funzione del piano a consumo, distribuire il proprio agente, vedere Agente di traccia distribuita personalizzata per Funzioni Java.

La distribuzione del proprio agente comporterà un'implicazione di avvio a freddo più lunga per le Funzioni del piano a consumo.

Risoluzione dei problemi

L’avvio delle funzioni Java potrebbero richiedere più tempo se questa funzionalità è stata adottata prima di febbraio 2023. Nel riquadro Panoramica dell'app per le funzioni, passare a Configurazione nel menu di spostamento sul lato sinistro. Selezionare quindi Impostazioni applicazione e seguire questa procedura per risolvere il problema.

Finestre

  1. Verificare se esistono le impostazioni seguenti e rimuoverle:

    XDT_MicrosoftApplicationInsights_Java -> 1
    ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
    
  2. Abilitare la versione più recente aggiungendo questa impostazione:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Linux dedicato/Premium

  1. Verificare se esistono le impostazioni seguenti e rimuoverle:

    ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
    
  2. Abilitare la versione più recente aggiungendo questa impostazione:

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Nota

Se la versione più recente dell'agente Java di Application Insights non è disponibile in Funzioni di Azure, caricarla manualmente seguendo queste istruzioni.

Testare la connettività tra l'host dell'applicazione e il servizio di inserimento

Gli SDK e gli agenti di Application Insights inviano dati di telemetria per l'inserimento come chiamate REST agli endpoint di inserimento. È possibile testare la connettività dal server Web o dal computer host dell'applicazione agli endpoint del servizio di inserimento usando client REST non elaborati da comandi PowerShell o curl. Vedere Risolvere i problemi di dati di telemetria delle applicazioni mancanti in Application Insights per Monitoraggio di Azure.

Duplicare i log

Se si usa log4j o logback per la registrazione della console, la traccia distribuita per Funzioni Java crea log duplicati. Questi log duplicati vengono quindi inviati ad Application Insights. Per evitare questo comportamento, utilizzare una delle soluzioni alternative seguenti.

Log4j

Aggiungere il filtro seguente al log4j.xml:

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

Esempio:

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

Aggiungere il filtro seguente al logback.xml:

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

Esempio:

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

Traccia distribuita per le app per le funzioni Node.js

Per visualizzare più dati dalle applicazioni di Funzioni di Azure del nodo rispetto a quanto raccolto per impostazione predefinita, instrumentare la funzione usando distribuzione OpenTelemetry di Monitoraggio di Azure.

Traccia distribuita per le app per le funzioni Python

Per raccogliere dati di telemetria da servizi come Richieste, urllib3, httpx, PsycoPG2 e altro ancora, usare distribuzione OpenTelemetry di Monitoraggio di Azure. Le richieste in ingresso rilevate nell'applicazione Python ospitata in Funzioni di Azure non vengono automaticamente correlate ai dati di telemetria rilevati all'interno di essa. È possibile ottenere la correlazione di traccia manualmente estraendo direttamente TraceContext come indicato di seguito:

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

Passaggi successivi