Condividi tramite


Usare Azure Application Insights in Data API Builder

Azure Application Insights è un servizio application performance monitoring (APM) che acquisisce automaticamente richieste, tracce, eccezioni e metriche delle prestazioni. L'integrazione con Data API Builder (DAB) consente di monitorare il comportamento di runtime, diagnosticare i problemi e ottimizzare le prestazioni nell'ambiente di produzione.

Diagramma che mostra il flusso di telemetria di Application Insights.

Avvertimento

L'integrazione di Application Insights con DAB potrebbe avere limitazioni quando è ospitata nelle app Web del servizio app di Azure a causa di una doppia strumentazione. Application Insights funziona meglio con DAB quando lo si ospita in contenitori, app di Azure Container o servizio Azure Kubernetes. Se è necessario usare il servizio app, testare accuratamente o prendere in considerazione approcci di monitoraggio alternativi.

Prerequisiti

Ottenere la stringa di connessione

Prima di configurare DAB, ottenere la stringa di connessione di Application Insights da Azure.

Portale di Azure

  1. Passare alla risorsa di Application Insights nel portale di Azure.
  2. Passare a Panoramica o Proprietà.
  3. Copiare la stringa di connessione (non la chiave di strumentazione).

Azure CLI

az monitor app-insights component show \
  --app my-app-insights \
  --resource-group my-rg \
  --query connectionString -o tsv

Formato della stringa di connessione

InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://<region>.in.applicationinsights.azure.com/;LiveEndpoint=https://<region>.livediagnostics.monitor.azure.com/

Annotazioni

Usare la stringa di connessione completa (non solo la chiave di strumentazione) per gli endpoint specifici dell'area e prestazioni migliori.

Configurare Application Insights

Aggiungere una sezione application-insights sotto runtime.telemetry nel file di configurazione.

{
  "runtime": {
    "telemetry": {
      "application-insights": {
        "enabled": true,
        "connection-string": "@env('app-insights-connection-string')"
      }
    }
  }
}

Questa configurazione usa una variabile di ambiente per la stringa di connessione. Definirlo in un .env file:

app-insights-connection-string="InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=..."

Avvertimento

Non eseguire mai il commit delle stringhe di connessione nel controllo del codice sorgente. Usare sempre variabili di ambiente o Azure Key Vault.

Command-line

Configurare Application Insights tramite dab add-telemetry.

Opzione Descrizione
--app-insights-enabled Abilitare o disabilitare Application Insights (true o false).
--app-insights-conn-string Stringa di connessione per Application Insights.

Abilita gli Approfondimenti sull'Applicazione

dab add-telemetry \
  --app-insights-enabled true \
  --app-insights-conn-string "@env('app-insights-connection-string')"

Disabilitare Application Insights

dab add-telemetry \
  --app-insights-enabled false

Annotazioni

Le impostazioni di Application Insights usano dab add-telemetry, non dab configure.

Avvia DAB

Avviare DAB con il file di configurazione:

dab start

Controllare i log di avvio per la conferma:

Application Insights telemetry is enabled with connection string from config.

Come funziona

Quando Application Insights è abilitato, DAB:

  1. Registra Application Insights SDK usando AddApplicationInsightsTelemetry().
  2. Registra un inizializzatore di telemetria personalizzato per arricchire tutti i dati di telemetria con proprietà specifiche di DAB.
  3. Configura TelemetryClient con la stringa di connessione dal file di configurazione.
  4. Si integra con il logging di ASP.NET Core per catturare i log della console come tracce.

Flusso di dati

DAB Application
    ↓
ILogger (ASP.NET Core)
    ↓
ApplicationInsightsLoggerProvider
    ↓
AppInsightsTelemetryInitializer (adds custom properties)
    ↓
TelemetryClient
    ↓
Application Insights (Azure)

Cosa viene acquisito

Tipo di telemetria Fonte Esempi
Requests ASP.NET Core middleware Richieste REST/GraphQL, tempi di risposta, codici di stato
Tracce ILogger chiamate in DAB Registri di avvio, registri di esecuzione di query, avvisi
Exceptions Eccezioni non gestite Errori di runtime, errori di configurazione, errori del database
Dipendenze Chiamate al database Query SQL, operazioni di Azure Cosmos DB, durata
Contatori delle prestazioni Runtime Utilizzo della CPU, consumo di memoria, frequenza delle richieste

Arricchimento dei dati di telemetria

DAB arricchisce automaticamente tutti i dati di telemetria di Application Insights con proprietà personalizzate:

Proprietà Descrizione Valore di esempio
ProductName Identificatore agente utente DAB dab-1.2.3
UserAgent Stringa completa dell'agente utente DAB data-api-builder/1.2.3
Cloud.RoleName Nome del ruolo cloud DAB DataApiBuilder
Component.Version Versione DAB 1.2.3
Session.Id Identificatore di sessione univoco guid

Queste proprietà consentono di filtrare e correlare i dati di telemetria specifici di DAB in Application Insights.

Eseguire query sui dati di telemetria in Azure

Tracce (log)

traces
| where customDimensions["ProductName"] startswith "dab-"
| order by timestamp desc
| project timestamp, message, severityLevel

Mapping livello di log:

LogLevel Severità Valore
Traccia/Risoluzione di problemi Verbose 0
Informazione Informazione 1
Avvertimento Avvertimento 2
Errore Errore 3
Critico Critico 4

Requests

requests
| where customDimensions["ProductName"] startswith "dab-"
| order by timestamp desc
| project timestamp, name, duration, resultCode, success

Screenshot dei risultati di una query per le richieste dell'applicazione Generatore API dati in Application Insights.

Exceptions

exceptions
| where customDimensions["ProductName"] startswith "dab-"
| order by timestamp desc
| project timestamp, type, outerMessage, details

Screenshot dei risultati di una query per le eccezioni del generatore di API dati in Application Insights.

Filtrare in base alla versione DAB

traces
| where customDimensions["Component.Version"] == "1.2.3"
| project timestamp, message, severityLevel

Trovare query GraphQL lente

requests
| where name contains "/graphql"
| where duration > 1000
| project timestamp, name, duration, resultCode
| order by duration desc

Frequenza di esito positivo della richiesta

requests
| where customDimensions["ProductName"] startswith "dab-"
| summarize 
    Total = count(),
    Success = countif(success == true),
    Failed = countif(success == false)
| extend SuccessRate = (Success * 100.0) / Total

Principali operazioni lente del database

dependencies
| where type == "SQL" or type == "Azure Cosmos DB"
| top 10 by duration desc
| project timestamp, name, duration, target, data

Metriche in tempo reale

Live Metrics fornisce il monitoraggio in tempo reale con <una latenza di 1 secondo. Viene abilitato automaticamente quando Application Insights è configurato.

Accedere alle metriche in tempo reale

  1. Aprire la risorsa di Application Insights nel portale di Azure.
  2. Passare a Metriche attive nel menu a sinistra.
  3. Avviare l'applicazione DAB.
  4. Entro pochi secondi, i dati in tempo reale verranno visualizzati.

Screenshot della pagina delle metriche live per i dati di Data API builder in Application Insights.

Cosa vedi

Metrica Descrizione
Richieste in arrivo Richieste REST/GraphQL al secondo
Richieste in uscita Chiamate di database al secondo
Integrità complessiva Frequenza di riuscita, errori al secondo
Memoria/CPU Utilizzo di risorse
Frequenza delle eccezioni Eccezioni al secondo

Suggerimento

Usare le metriche attive durante lo sviluppo per visualizzare un feedback immediato sulle richieste API e sulle operazioni del database.

Campionamento e conservazione dei dati

Campionamento adattivo

Application Insights SDK campiona automaticamente i dati di telemetria quando il volume è elevato per ridurre i costi e rimanere entro i limiti di velocità. La frequenza di campionamento viene visualizzata nell'interfaccia utente di Application Insights.

Comportamento predefinito:

  • Traffico basso: tutti i dati di telemetria inviati (100%)
  • Traffico elevato: il campionamento riduce automaticamente il volume
  • Dati rappresentativi mantenuti

Conservazione dei dati

Plan Conservazione predefinita Conservazione massima
Livello gratuito 90 giorni 90 giorni
Pagamento in base al consumo 90 giorni 730 giorni (2 anni)

Configurare la conservazione: Application Insights → Utilizzo e costi stimaticonservazione dei dati.

Considerazioni sulle prestazioni

Sovraccarico dei dati di telemetria

Application Insights aggiunge un sovraccarico minimo:

  • Memoria: ~10-50 MB a seconda del traffico
  • CPU: <1% con carico normale
  • Latenza: <1 ms per richiesta (asincrona)

Procedure consigliate

  • Usare le variabili di ambiente per le stringhe di connessione.
  • Disabilitare in fase di sviluppo locale, se non necessario.
  • Monitorare la frequenza di campionamento nell'ambiente di produzione.
  • Impostare la conservazione dei dati appropriata per gestire i costi.

Disabilitare in fase di sviluppo

{
  "runtime": {
    "telemetry": {
      "application-insights": {
        "enabled": false
      }
    }
  }
}

Esportare e visualizzare

I dati di telemetria vengono esportati tramite Application Insights SDK. L'SDK raggruppa i dati in batch e li invia periodicamente.

Annotazioni

L'SDK controlla la tempistica dell'esportazione. Il comportamento predefinito invia i dati di telemetria in batch ogni pochi secondi.

Avvertimento

I contenitori temporanei che si arrestino rapidamente possono uscire prima del completamento delle esportazioni. Configurare le finestre di arresto normale ed evitare la terminazione aggressiva per garantire lo scaricamento dei dati di telemetria in sospeso.

Stringa di connessione vs. chiave di strumentazione

{
  "connection-string": "InstrumentationKey=...;IngestionEndpoint=https://eastus.in.applicationinsights.azure.com/"
}

Vantaggi:

  • Endpoint specifici dell'area (latenza inferiore)
  • Supporta servizi di cloud di sovranità
  • A prova di futuro (approccio consigliato da Microsoft)

Chiave di strumentazione legacy

Anche se ancora supportato, Microsoft consiglia le stringhe di connessione per le nuove implementazioni.

{
  "connection-string": "InstrumentationKey=00000000-0000-0000-0000-000000000000"
}

Annotazioni

Se si specifica solo una chiave di strumentazione, Application Insights usa l'endpoint di inserimento globale, che potrebbe avere una latenza più elevata.

Risoluzione dei problemi

Errore: "La stringa di connessione di Application Insights non può essere null o vuota se abilitata"

Causa: enabled è impostato su true ma connection-string è mancante o vuoto.

Soluzione: specificare una stringa di connessione valida quando si abilita Application Insights oppure impostare enabled su false.

{
  "runtime": {
    "telemetry": {
      "application-insights": {
        "enabled": true,
        "connection-string": "@env('app-insights-connection-string')"
      }
    }
  }
}

DAB viene avviato ma non viene visualizzata alcuna telemetria

Controllare i log di avvio per questi messaggi:

dab start --LogLevel Information

Messaggio di operazione riuscita:

Application Insights telemetry is enabled with connection string from config.

Messaggi di avviso:

Logs won't be sent to Application Insights because an Application Insights connection string is not available in the runtime config.
Application Insights are disabled.

Messaggio di errore:

Telemetry client is not initialized.

Verificare la variabile di ambiente

echo $app-insights-connection-string

Eseguire il test con la stringa di connessione diretta

Usare temporaneamente una stringa di connessione diretta (non una variabile di ambiente) per verificare che la stringa sia valida:

{
  "connection-string": "InstrumentationKey=...;IngestionEndpoint=..."
}

Se funziona, il problema riguarda il caricamento di variabili di ambiente.