Guida introduttiva: Monitorare le applicazioni end-to-end

Nota

I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.

Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.

Questo articolo si applica a:❌ Basic/Standard ✔️ Enterprise

Questa guida introduttiva illustra come monitorare le app che eseguono il piano Enterprise di Azure Spring Apps usando Application Insights e Log Analytics.

Nota

È possibile monitorare i carichi di lavoro Spring end-to-end usando qualsiasi strumento e piattaforma preferita, tra cui App Insights, Log Analytics, New Relic, Dynatrace, AppDynamics, Elastic o Splunk. Per altre informazioni, vedere Uso di altri strumenti di monitoraggio più avanti in questo articolo.

Prerequisiti

Aggiornare le applicazioni

È necessario fornire manualmente l'stringa di connessione Application Insights alle applicazioni Order Service (ASP.NET core) e Cart Service (python). Le istruzioni seguenti descrivono come fornire questo stringa di connessione e aumentare la frequenza di campionamento ad Application Insights.

Nota

Attualmente solo i buildpack per le applicazioni Java e NodeJS supportano la strumentazione di Application Insights.

  1. Creare variabili per contenere i nomi delle risorse usando i comandi seguenti. Assicurarsi di sostituire i segnaposto con i propri valori. Il nome dell'istanza del servizio Azure Spring Apps deve avere una lunghezza compresa tra 4 e 32 caratteri e può contenere solo lettere minuscole, numeri e trattini. Il primo carattere del nome del servizio deve essere una lettera e l'ultimo deve essere una lettera o un numero.

    export RESOURCE_GROUP="<resource-group-name>"
    export APP_INSIGHTS_NAME="<app-insights-name>"
    export KEY_VAULT_NAME="<key-vault-name>"
    export AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME="<Azure-Spring-Apps-service-instance-name>"
    

    Nota

    Per impostazione predefinita, il APP_INSIGHTS_NAME è uguale al AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME.

  2. Usare i comandi seguenti per recuperare il stringa di connessione di Application Insights e impostarlo in Key Vault:

    export CONNECTION_STRING=$(az monitor app-insights component show \
        --resource-group ${RESOURCE_GROUP} \
        --app ${APP_INSIGHTS_NAME} \
        --query "connectionString" \
        --output tsv)
    
    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "ApplicationInsights--ConnectionString" \
        --value ${CONNECTION_STRING}
    
  3. Usare il comando seguente per aggiornare la frequenza di campionamento per l'associazione di Application Insights per aumentare la quantità di dati disponibili:

    az spring build-service builder buildpack-binding set \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --builder-name default \
        --name default \
        --type ApplicationInsights \
        --properties sampling-rate=100 connection_string=${CONNECTION_STRING}
    
  4. Usare i comandi seguenti per riavviare le applicazioni per ricaricare la configurazione:

    az spring app restart \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --name cart-service
    
    az spring app restart \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --name order-service
    
    az spring app restart \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --name catalog-service
    
    az spring app restart \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --name frontend
    
    az spring app restart \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --name payment-service
    
  5. Se è stato configurato l'accesso Single Sign-On, usare i comandi seguenti per riavviare le applicazioni per ricaricare la configurazione dell'app del servizio identità:

    az spring app restart \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --name identity-service
    

    Per le applicazioni Java e NodeJS, il riavvio consentirà di rendere effettiva la nuova frequenza di campionamento. Per le applicazioni non Java, il riavvio consentirà loro di accedere alla chiave di strumentazione appena aggiunta dall'insieme di credenziali delle chiavi.

Visualizzare i log

Esistono due modi per visualizzare i log in Azure Spring Apps: lo streaming di log dei log in tempo reale per ogni istanza dell'app o Log Analytics per i log aggregati con funzionalità di query avanzate

Usare lo streaming dei log

Generare traffico nell'applicazione spostandosi attraverso l'applicazione, visualizzando il catalogo e inserendo ordini. Usare i comandi seguenti per generare il traffico in modo continuo, fino a quando non viene annullato:

export GATEWAY_URL=$(az spring gateway show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
    --query "properties.url" \
    --output tsv)

export GATEWAY_URL=https://${GATEWAY_URL} 

cd azure-spring-apps-enterprise/load-test/traffic-generator
./gradlew gatlingRun-com.vmware.acme.simulation.GuestSimulation.java

Usare il comando seguente per ottenere le 100 righe più recenti dei log della console dell'applicazione dal servizio catalogo:

az spring app logs \
    --resource-group ${RESOURCE_GROUP} \
    --name catalog-service \
    --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
    --lines 100

Aggiungendo l'opzione --follow , è possibile ottenere lo streaming dei log in tempo reale da un'app. Usare il comando seguente per provare a registrare lo streaming per l'applicazione del servizio catalogo:

az spring app logs \
    --resource-group ${RESOURCE_GROUP} \
    --name catalog-service \
    --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
    --follow

Suggerimento

È possibile usare az spring app logs --help per esplorare altri parametri e funzionalità del flusso di log.

Usare Log Analytics

Passare al portale di Azure e aprire l'istanza di Log Analytics creata. È possibile trovare l'istanza di Log Analytics nello stesso gruppo di risorse in cui è stata creata l'istanza del servizio Azure Spring Apps.

Nella pagina Log Analytics selezionare il riquadro Log ed eseguire una delle query di esempio seguenti per Azure Spring Apps.

Digitare ed eseguire la query Kusto seguente per visualizzare i log dell'applicazione:

AppPlatformLogsforSpring
| where TimeGenerated > ago(24h)
| limit 500
| sort by TimeGenerated
| project TimeGenerated, AppName, Log

Questa query produce risultati simili a quelli mostrati nello screenshot seguente:

Screenshot di portale di Azure che mostra l'output di esempio di tutte le query dei log applicazioni.

Digitare ed eseguire la query Kusto seguente per visualizzare catalog-service i log dell'applicazione:

AppPlatformLogsforSpring
| where AppName has "catalog-service"
| limit 500
| sort by TimeGenerated
| project TimeGenerated, AppName, Log

Questa query produce risultati simili a quelli mostrati nello screenshot seguente:

Screenshot di portale di Azure che mostra l'output di esempio dei log dell'applicazione del servizio catalogo.

Digitare ed eseguire la query Kusto seguente per visualizzare gli errori e le eccezioni generati da ogni app:

AppPlatformLogsforSpring
| where Log contains "error" or Log contains "exception"
| extend FullAppName = strcat(ServiceName, "/", AppName)
| summarize count_per_app = count() by FullAppName, ServiceName, AppName, _ResourceId
| sort by count_per_app desc
| render piechart

Questa query produce risultati simili a quelli mostrati nello screenshot seguente:

Screenshot di portale di Azure che mostra l'output di esempio dei log in ingresso.

Digitare ed eseguire la query Kusto seguente per visualizzare tutte le chiamate in ingresso in Azure Spring Apps:

AppPlatformIngressLogs
| project TimeGenerated, RemoteAddr, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
| sort by TimeGenerated

Digitare ed eseguire la query Kusto seguente per visualizzare tutti i log dal gateway di configurazione Spring Cloud gestito gestito da Azure Spring Apps:

AppPlatformSystemLogs
| where LogType contains "SpringCloudGateway"
| project TimeGenerated,Log

Questa query produce risultati simili a quelli mostrati nello screenshot seguente:

Screenshot di portale di Azure che mostra l'output di esempio dei log di Spring Cloud Gateway.

Digitare ed eseguire la query Kusto seguente per visualizzare tutti i log dal Registro di sistema gestito del servizio Spring Cloud gestito da Azure Spring Apps:

AppPlatformSystemLogs
| where LogType contains "ServiceRegistry"
| project TimeGenerated, Log

Questa query produce risultati simili a quelli mostrati nello screenshot seguente:

Screenshot di portale di Azure che mostra l'output di esempio dei log del Registro di sistema del servizio.

Usare la traccia

Nella portale di Azure aprire l'istanza di Application Insights creata da Azure Spring Apps e avviare il monitoraggio delle applicazioni Spring Boot. È possibile trovare l'istanza di Application Insights nello stesso gruppo di risorse in cui è stata creata un'istanza del servizio Azure Spring Apps.

Passare al riquadro Mappa applicazioni, che sarà simile allo screenshot seguente:

Screenshot di portale di Azure che mostra la mappa delle applicazioni di app Azure lication Insights.

Passare al riquadro Prestazioni , che sarà simile allo screenshot seguente:

Screenshot di portale di Azure che mostra il riquadro Prestazioni di app Azure lication Insights.

Passare al riquadro Prestazioni/Dipendenze . Qui è possibile visualizzare il numero di prestazioni per le dipendenze, in particolare le chiamate SQL, come illustrato nello screenshot seguente:

Screenshot di portale di Azure che mostra la sezione Dipendenze del riquadro Prestazioni di app Azure lication Insights.

Passare al riquadro Prestazioni/Ruoli . Qui è possibile visualizzare le metriche delle prestazioni per singole istanze o ruoli, analogamente a quanto illustrato nello screenshot seguente:

Screenshot di portale di Azure che mostra la sezione Ruoli del riquadro Prestazioni di app Azure lication Insights.

Selezionare una chiamata SQL per visualizzare la transazione end-to-end nel contesto, analogamente a quanto illustrato nello screenshot seguente:

Screenshot di portale di Azure che mostra la transazione end-to-end di una chiamata S Q L.

Passare al riquadro Errori/Eccezioni . Qui è possibile visualizzare una raccolta di eccezioni, simile a quanto illustrato nello screenshot seguente:

Screenshot di portale di Azure che mostra gli errori dell'applicazione visualizzati nel grafico.

Visualizzare le metriche

Passare al riquadro Metriche . Qui è possibile visualizzare le metriche fornite dalle app Spring Boot, dai moduli Spring Cloud e dalle dipendenze. Il grafico nello screenshot seguente mostra http_server_requests e memoria heap usata:

Screenshot di portale di Azure che mostra le metriche nel grafico del tempo.

Spring Boot registra un numero elevato di metriche principali: JVM, CPU, Tomcat, Logback e così via. La configurazione automatica di Spring Boot consente la strumentazione delle richieste gestite da Spring MVC. I controller ProductController REST e PaymentController sono stati instrumentati dall'annotazione @Timed Micrometer a livello di classe.

L'applicazione acme-catalog ha la metrica personalizzata seguente abilitata: : @Timedstore.products

L'applicazione acem-payment ha la metrica personalizzata seguente abilitata: : @Timedstore.payment

È possibile visualizzare queste metriche personalizzate nel riquadro Metriche , come illustrato nello screenshot seguente.

Screenshot che mostra le metriche personalizzate instrumentate da Micrometer.

Passare al riquadro Metriche attive. Qui è possibile visualizzare le metriche in tempo reale sullo schermo con latenze < basse 1 secondo, come illustrato nello screenshot seguente:

Screenshot che mostra le metriche attive di tutte le applicazioni.

Uso di altri strumenti di monitoraggio

Il piano Enterprise di Azure Spring Apps supporta anche l'esportazione delle metriche in altri strumenti, inclusi gli strumenti seguenti:

  • AppDynamics
  • ApacheSkyRsk
  • Dynatrace
  • ElasticAPM
  • NewRelic

È possibile aggiungere altri binding a un generatore nel servizio di compilazione Tanzu usando il comando seguente:

az spring build-service builder buildpack-binding create \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --builder-name <builder-name> \
    --name <binding-name> \
    --type <ApplicationInsights|AppDynamics|ApacheSkyWalking|Dynatrace|ElasticAPM|NewRelic> \
    --properties <connection-properties>
    --secrets <secret-properties>

Pulire le risorse

Se si prevede di usare le guide di avvio rapido e le esercitazioni successive, è consigliabile non cancellare le risorse create. Quando non è più necessario, eliminare il gruppo di risorse per eliminare tutte le risorse contenute al suo interno. Per eliminare il gruppo di risorse usando l'interfaccia della riga di comando di Azure, usare i comandi seguenti:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Passaggi successivi

Continuare con uno degli argomenti di avvio rapido facoltativi seguenti: