Strumentare automaticamente app AKS con Application Insights di Monitoraggio di Azure

Questa guida illustra come abilitare Monitoraggio di Azure Application Insights per i carichi di lavoro Servizio Azure Kubernetes (AKS) senza modificare il codice sorgente.

Illustra la preparazione di un cluster, l'onboarding delle distribuzioni, il riavvio delle distribuzioni e la visualizzazione delle metriche delle prestazioni dell'applicazione. Questi passaggi strumentano automaticamente i pod dell'applicazione iniettando la distribuzione OpenTelemetry di Monitoraggio di Azure per generare telemetria. Per altre informazioni sulla strumentazione automatica e sui relativi vantaggi, vedere Che cos'è la strumentazione automatica per Application Insights di Monitoraggio di Azure?

Annotazioni

Per partecipare all'anteprima pubblica limitata dell'autoinstrumentazione per .NET o Python, consultare Abilitare l'autoinstrumentazione AKS per Python e .NET (anteprima limitata).

Prerequisiti

Avviso

Questa funzionalità supporta solo i pool di nodi Linux. I pool di nodi Windows non sono supportati.

Preparare un cluster

È possibile preparare un cluster usando il portale di Azure o interfaccia della riga di comando di Azure.

Usare il portale di Azure per preparare un cluster.

  1. Selezionare il riquadro Monitoraggio.
  2. Selezionare la casella Abilita supporto per la strumentazione automatica .
  3. Selezionare Rivedi e abilita.
    Screenshot della scheda Capacità delle impostazioni del monitor con la casella di controllo Abilita supporto per la strumentazione automatica attivata.

Distribuzioni a bordo

È possibile eseguire l'onboarding delle distribuzioni in uno di due modi: a livello di spazio dei nomi o per distribuzione. Usare il metodo a livello di spazio dei nomi per eseguire l'onboarding di tutte le distribuzioni all'interno di uno spazio dei nomi. Per l'onboarding selettivo o configurato in modo variabile su più distribuzioni, utilizzare l'approccio per distribuzione.

Onboarding a livello di spazio dei nomi

Utilizzare il portale di Azure per l'onboarding della distribuzione a livello di namespace.

  1. Nel riquadro Spazi dei nomi selezionare lo spazio dei nomi da strumentare.
    Screenshot del riquadro Namespace di AKS che elenca i namespace disponibili con le risorse Kubernetes e i Namespace evidenziati.
  2. Selezionare Monitoraggio applicazioni.
    Screenshot del pannello Configura monitoraggio dell'applicazione con l'elenco a discesa Tipo di strumentazione espanso mostrando le opzioni di lingua.
  3. Selezionare le lingue da instrumentare.
  4. Lasciare deselezionata la casella Esegui il riavvio di tutte le implementazioni. È consigliabile riavviare manualmente le distribuzioni in un secondo momento.
  5. Seleziona Configura.
    Screenshot del pannello Configura monitoraggio applicazioni con Java selezionato e la casella di controllo Rollout restart deselezionata.
  6. Osservare lo stato di avanzamento del monitoraggio delle applicazioni e attendere il completamento.
    Screenshot della sezione Distribuzioni che mostra la distribuzione con stato Strumentato.

    Annotazioni

  7. Rivedere la sezione Monitoraggio applicazioni .
  8. Verificare lo stato "instrumentato" per ciascun spazio dei nomi nella distribuzione.
    Screenshot del pannello Configura monitoraggio applicazioni con la sezione Distribuzioni espansa che mostra lo stato strumentato.

Onboarding per singola distribuzione

Usare l'onboarding per singola distribuzione per assicurarsi che le distribuzioni siano dotate di linguaggi specifici o per indirizzare i dati di telemetria a risorse separate di Application Insights.

  1. Creare una risorsa personalizzata di Strumentazione univoca per ogni scenario. Evitare di usare il nome default, che viene utilizzato per l'onboarding a livello di spazio dei nomi.

    Creare risorse personalizzate Instrumentation per configurare Application Insights in ogni namespace. Aggiorna applicationInsightsConnectionString in modo che contenga la stringa di connessione della tua risorsa di Application Insights.

    Suggerimento

    È possibile recuperare il stringa di connessione dalla pagina di panoramica della risorsa di Application Insights.

    apiVersion: monitor.azure.com/v1
    kind: Instrumentation
    metadata:
      name: cr1
      namespace: mynamespace1
    spec:
      settings:
        autoInstrumentationPlatforms: []
      destination: # required
        applicationInsightsConnectionString: "InstrumentationKey=11111111-1111-1111-1111-111111111111;IngestionEndpoint=https://eastus2-3.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus2.livediagnostics.monitor.azure.com/"
    

    Come minimo, è necessaria la configurazione seguente:

    • spec.destination.applicationInsightsConnectionString: la stringa di connessione di una risorsa di Application Insights.
  2. Associare ogni distribuzione alla risorsa personalizzata appropriata usando le annotazioni. L'annotazione sostituisce l'impostazione della lingua nella risorsa personalizzata.

    Importante

    Per evitare di aggiungerli alle annotazioni della distribuzione per errore, aggiungere annotazioni al spec.template.metadata.annotations livello della distribuzione.

    Esempi:

    • Java: instrumentation.opentelemetry.io/inject-java: "cr1"
    • Node.js: instrumentation.opentelemetry.io/inject-nodejs: "cr1"

    Inserire le annotazioni come indicato di seguito.

    apiVersion: apps/v1
    kind: Deployment
    ...
    spec:
      template:
        metadata:
          annotations:
            instrumentation.opentelemetry.io/inject-nodejs: "cr1"
    

    Suggerimento

    Riavviare le distribuzioni per rendere effettive le impostazioni.

Onboarding in modalità mista

Usare la modalità mista quando la maggior parte delle distribuzioni usa una configurazione predefinita e alcune distribuzioni richiedono configurazioni diverse.

  1. Implementare l'onboarding a livello di spazio dei nomi per definire la configurazione predefinita.
  2. Creare configurazioni di onboarding per singola distribuzione per sostituire la configurazione predefinita per risorse specifiche.

Riavviare la distribuzione

È possibile riavviare una distribuzione usando il portale di Azure o la riga di comando di Kubernetes (kubectl).

Eseguire il comando seguente dopo aver creato tutte le risorse personalizzate e facoltativamente annotare le distribuzioni.

kubectl rollout restart deployment <deployment-name> -n mynamespace1

Questo comando attiva la strumentazione automatica, abilitando Application Insights. È possibile verificare che Application Insights sia abilitato generando traffico e passando alla risorsa. La tua app è rappresentata come un ruolo cloud nelle esperienze di Application Insights. È possibile usare tutte le esperienze di Application Insights, ad eccezione delle metriche attive e delle Code Analysis. Per altre informazioni sulle esperienze di Application Insights disponibili, vedere Esperienze di Application Insights.

Visualizzare le metriche delle prestazioni dell'applicazione in AKS

Quando si strumentano automaticamente i carichi di lavoro, le metriche delle prestazioni dell'applicazione vengono visualizzate direttamente all'interno dei pannelli delle risorse del servizio Azure Kubernetes. È possibile vedere come viene eseguita l'applicazione senza uscire dal cluster. Queste visualizzazioni mostrano un numero ristretto di metriche altamente indicative per il triage. Usare Application Insights per il monitoraggio completo delle prestazioni delle applicazioni.Use Application Insights for full Application Performance Monitoring (APM).

Ogni ambito mostra tre metriche:

  • Tempo di risposta del server: latenza e velocità di risposta delle richieste in ingresso.
  • Richieste server: carico dell'applicazione e volume di traffico.
  • Errori: errori e richieste non riuscite.

Queste metriche vengono visualizzate in tre ambiti:

  • Spazio dei nomi: il riquadro Metriche delle prestazioni dell'applicazione nella panoramica dello spazio dei nomi aggrega per carico di lavoro, con il tempo medio di risposta del server superiore, le richieste principali del server e le richieste non riuscite più elevate.
  • Carico di lavoro (distribuzione): la panoramica della distribuzione mostra le serie temporali relative a tutti i pod del carico di lavoro, con il collegamento diretto Visualizza in Application Insights per il monitoraggio delle prestazioni applicative completo.
  • Pod: la panoramica del pod mostra gli stessi grafici delle serie temporali limitati a un singolo pod.

Visualizzare le metriche nell'ambito dello spazio dei nomi

  1. Dal cluster del servizio Azure Kubernetes, selezionare nel riquadro di spostamento a sinistra Risorse Kubernetes>Spazi dei nomi.
  2. Selezionare lo spazio dei nomi che contiene i carichi di lavoro strumentati.
  3. Individuare il riquadro Metriche delle prestazioni dell'applicazione nella panoramica dello spazio dei nomi.

Schermata della panoramica del namespace AKS che mostra il riquadro Metriche delle prestazioni dell'applicazione con il tempo medio di risposta del server più elevato, le principali richieste del server e le principali richieste non riuscite.

Visualizzare le metriche nell'ambito del carico di lavoro

  1. Dal cluster del servizio Azure Kubernetes, selezionare nel riquadro di spostamento a sinistra Carichi di lavoro>Distribuzioni.
  2. Selezionare una distribuzione instrumentata.
  3. Esaminare i grafici delle serie temporali nella panoramica della distribuzione: Tempo medio di risposta del server, Richieste server e Richieste non riuscite.
  4. Selezionare Visualizza in Application Insights per aprire il carico di lavoro nell'esperienza completa di Application Insights.

Schermata della panoramica della distribuzione di AKS che mostra i grafici Tempo medio di risposta del server, Richieste del server e Richieste non riuscite e il collegamento Visualizza in Application Insights.

Visualizzare le metriche nell'ambito pod

  1. Dalla panoramica della distribuzione, scorrere fino alla sezione Carichi di lavoro e selezionare la scheda Pods.
  2. Selezionare il nome del pod per aprire la panoramica del pod.
  3. Esaminare i grafici delle serie temporali nella panoramica del pod, con ambito limitato a tale pod: Tempo medio di risposta del server, Richieste server e Richieste non riuscite.
  4. Selezionare Visualizza in Application Insights in qualsiasi grafico per aprire il pod nell'esperienza Application Insights completa.

Schermata della panoramica dei pod di AKS che mostra la sezione delle metriche delle prestazioni dell'applicazione con i grafici Tempo medio di risposta del server, Richieste del server e Richieste non riuscite limitati a un singolo pod.

Per un'analisi APM completa, incluse le tracce distribuite, le transazioni end-to-end e i pannelli Errori e Prestazioni, usa la panoramica di Application Insights.

Rimuovere la strumentazione automatica per AKS

È possibile rimuovere l'autoinstrumentazione di AKS usando interfaccia della riga di comando di Azure.

Suggerimento

  • La rimozione dell'autoinstrumentazione di AKS tramite interfaccia della riga di comando di Azure la rimuove dall'intero cluster.
  • Per rimuovere la strumentazione automatica da un singolo spazio dei nomi, eliminare la risorsa personalizzata di strumentazione associata. Ad esempio: kubectl delete instrumentation <instrumentation-name> -n <namespace-name>.

Assicurarsi di non avere distribuzioni instrumentate. Per annullare la distribuzione instrumentata, rimuovere la risorsa personalizzata di Strumentazione associata ed eseguire kubectl rollout restart nella distribuzione. Eseguire quindi il comando seguente.

az aks update --resource-group={resource_group} --name={cluster_name} --disable-azure-monitor-app-monitoring 

Annotazioni

Se le distribuzioni strumentate rimangono dopo la disabilitazione della funzionalità, continuano a essere strumentate fino alla loro ridistribuzione nello stato originale non strumentato o fino alla loro eliminazione.

Annotations

Le annotazioni consentono di personalizzare il comportamento di strumentazione automatica a livello di distribuzione, inclusa la disabilitazione della strumentazione per distribuzioni specifiche e l'abilitazione della raccolta dei log applicazioni in Application Insights.

Disabilitazione dell'autoinstrumentazione

Le annotazioni seguenti disabilitano l'strumentazione automatica:

  • Java: instrumentation.opentelemetry.io/inject-java

  • Node.js: instrumentation.opentelemetry.io/inject-nodejs

    instrumentation.opentelemetry.io/inject-java: "false"
    

Per riattivare l'autoinstrumentazione dopo averla disabilitata, aggiungere le annotazioni.

instrumentation.opentelemetry.io/inject-java: "true"

Inserire le annotazioni come indicato di seguito.

apiVersion: apps/v1
kind: Deployment
...
spec:
  template:
    metadata:
      annotations:
        instrumentation.opentelemetry.io/inject-java: "false"

Abilitazione di log in Application Insights

È possibile raccogliere i log in Application Insights come aggiunta o sostituzione dei log di Container Insights.

Quando si abilitano i log in Application Insights, si ottengono log correlati, in modo da poter visualizzare facilmente le tracce distribuite insieme ai log correlati. Alcuni microservizi non scrivono log nella console, quindi Container Insights non può raccoglierli. Solo la strumentazione di Application Insights acquisisce questi log.

Al contrario, Application Insights potrebbe non essere in grado di instrumentare tutti i microservizi. Ad esempio, non può instrumentare quelli che usano NGINX o linguaggi non supportati. Potrebbe essere preferibile basarsi sui log dei contenitori solo per tali microservizi.

Se si hanno più team di osservabilità, ad esempio i tecnici dell'infrastruttura che usano Container Insights e gli sviluppatori che usano Application Insights, è possibile scegliere di abilitare entrambe le origini per i log.

Esaminare le configurazioni di registrazione della console nel codice dell'applicazione per determinare se si vogliono abilitare i log di Application Insights, i log dei contenitori o entrambi. Per disabilitare la raccolta di log dei contenitori, vedere Filtrare la raccolta di log dei contenitori con ConfigMap.

Importante

Per evitare duplicazioni non necessarie e costi maggiori, abilitare i log in Application Insights per consentire alla funzionalità di raccogliere i log delle applicazioni dai framework di registrazione standard e inviarli ad Application Insights.

Usare l'annotazione seguente per abilitare i log in Application Insights:

  • monitor.azure.com/enable-application-logs

Importante

Per evitare di aggiungerli alle annotazioni della distribuzione per errore, aggiungere annotazioni al spec.template.metadata.annotations livello della distribuzione.

monitor.azure.com/enable-application-logs: "true"

Preparare un cluster durante la creazione di un cluster AKS

È possibile preparare i cluster AKS per questa caratteristica durante la creazione del cluster. Esegui il seguente comando interfaccia della riga di comando di Azure se preferisci che il cluster venga preparato durante la creazione. Il monitoraggio delle applicazioni non è abilitato solo perché il cluster è stato preparato. È necessario distribuire un'applicazione ed eseguire l'onboarding dell'applicazione in questa funzionalità.

az aks create --resource-group={resource_group} --name={cluster_name} --enable-azure-monitor-app-monitoring --generate-ssh-keys

Domande frequenti sull'autoinstrumentazione AKS

Le domande seguenti riguardano scenari e considerazioni comuni quando si usa la strumentazione automatica del servizio Azure Kubernetes, tra cui il supporto delle metriche personalizzate, la compatibilità con gli SDK esistenti e le procedure consigliate per la sicurezza.

La strumentazione automatica del servizio Azure Kubernetes supporta le metriche personalizzate?

Se si vogliono metriche personalizzate in Node.js, instrumentare manualmente le applicazioni con la distribuzione Monitoraggio di Azure OpenTelemetry Distro.

Java supporta metriche personalizzate con strumentazione automatica. È possibile raccogliere metriche personalizzate aggiornando il codice e abilitando questa funzionalità. Se il tuo codice ha già metriche personalizzate, vengono trasmesse quando è abilitata l'autostrumentazione.

La strumentazione automatica di AKS funziona con le applicazioni strumentate usando un SDK OpenTelemetry di software open source (OSS)?

La strumentazione automatica di AKS può interrompere i dati di telemetria inviati a terze parti da un SDK OpenTelemetry OSS.

Può l'autostrumentazione di AKS coesistere con la strumentazione manuale?

La strumentazione automatica di AKS è progettata per coesistere con entrambe le opzioni di strumentazione manuale: l'API classica SDK e OpenTelemetry Distro di Monitoraggio di Azure.

Impedisce sempre dati duplicati e garantisce il funzionamento delle metriche personalizzate.

Fare riferimento a questo grafico per determinare quando la strumentazione automatica o la strumentazione manuale ha la precedenza.

Language Precedenza
Node.js Strumentazione manuale
Java Strumentazione automatica

Come posso assicurarmi di utilizzare le versioni più recenti e sicure di Monitoraggio di Azure OpenTelemetry Distro?

Il team di sviluppo assegna priorità, corregge e rilascia le correzioni per le vulnerabilità rilevate nella distribuzione Monitoraggio di Azure OpenTelemetry nella versione successiva.

La strumentazione automatica di AKS inserisce la versione più recente di OpenTelemetry Distro di Monitoraggio di Azure all'interno dei pod dell'applicazione ogni volta che si modifica o riavvia la distribuzione.

La distribuzione di OpenTelemetry può diventare vulnerabile nelle distribuzioni che non vengono modificate o riavviate per lunghi periodi di tempo. Per questo motivo, aggiornare o riavviare le distribuzioni settimanali per assicurarsi di usare una versione recente della distribuzione.

Come posso ottenere ulteriori informazioni sulla distro OpenTelemetry di Monitoraggio di Azure?

Questa funzionalità consente di ottenere l'ottimizzazione automatica inserendo OpenTelemetry di Monitoraggio di Azure nei pod dell'applicazione.

Per Java, questa funzionalità integra la distribuzione autonoma di Monitoraggio di Azure OpenTelemetry per Java. Consulta la documentazione della distribuzione di Java per ulteriori informazioni sul binario di strumentazione di Java.

Per Node.js, la funzionalità inserisce un file binario di strumentazione automatica basato sulla distribuzione Monitoraggio di Azure OpenTelemetry per Node.js. Per altre informazioni, vedere la documentazione distro Node.js. Tenere presente che non esiste alcuna strumentazione automatica autonoma per Node.js, quindi la documentazione della distribuzione è orientata alla strumentazione manuale. È possibile ignorare i passaggi di configurazione basati sul codice correlati alla strumentazione manuale. Tuttavia, tutto il resto nella documentazione della distribuzione, ad esempio le impostazioni predefinite e le configurazioni delle variabili di ambiente, è applicabile a questa funzionalità.