Monitorare le risorse e le applicazioni Azure

Usare Monitoraggio di Azure per raccogliere log, metriche e avvisi nelle applicazioni JavaScript e nei servizi Azure da cui dipendono. Monitoraggio di Azure è il servizio di piattaforma centrale che raccoglie e archivia i dati di telemetria. È possibile instrumentare le applicazioni con Application Insights. È consigliabile monitorare il servizio dell'applicazione ospitata, i servizi Azure con cui l'applicazione si integra e il codice sorgente dell'applicazione stesso.

Informazioni su log, metriche e avvisi

I dati di telemetria sono i dati raccolti dalle applicazioni e dai servizi per monitorare l'integrità, le prestazioni e l'utilizzo. In Azure i dati di telemetria vengono classificati in log, metriche e avvisi.

Azure offre quattro tipi di dati di telemetria:

Tipo di telemetria Cosa ti offre Dove trovarla per ogni servizio
Metriche Dati numerici, serie temporali (CPU, memoria e così via) Metriche nel portale o az monitor metrics nella CLI
Avvisi Notifiche proattive quando si raggiungono le soglie Avvisi nel portale o nell'interfaccia della CLI
Registrazioni Eventi e diagnostica basati su testo (Web, app) Log del Servizio App, Monitoraggio funzioni, Diagnostica delle app contenitore
Log personalizzati Dati di telemetria dell'applicazione personalizzati tramite App Insights Tabella Log (traccia) della risorsa di Application Insights

Selezionare i dati di telemetria corretti per la domanda:

Sceneggiatura Usa i log... Usare le metriche... Usare gli avvisi...
"L'app Web è stata avviata ed è funzionante?" Log del server Web di App Service Non disponibile Non disponibile
La mia funzione sta andando in timeout o fallendo? Registri invocazione funzione (Monitor) Metrica della durata dell'esecuzione della funzione Avviso relativo a "Errori >di funzione 0"
Quanto è occupato il mio servizio e può espandersi? Non disponibile Velocità effettiva del servizio/CPU nelle metriche Avviso di scalabilità automatica su CPU% > 70%
Quali eccezioni sta generando il mio codice? Log di traccia personalizzati in Application Insights Non disponibile Avviso in "ServerExceptions >0"
"Ho superato i limiti di transazione o quota?" Non disponibile Metriche correlate alla quota (transazioni, limitazione) Avviso su "ThrottlingCount >0"

Ottimizzazione dei costi

È possibile ridurre significativamente il costo per Monitoraggio di Azure comprendendo le procedure best per le opzioni di configurazione e le opportunità di ridurre la quantità di dati raccolti.

Abilitare la registrazione e le metriche per tutte le risorse Azure

Ogni servizio in Azure ha funzionalità di registrazione e metriche proprie. Abilitare la registrazione in ogni risorsa Azure per assicurarsi di avere i dati di telemetria necessari per monitorare l'intera applicazione end-to-end.

Creare una risorsa Monitoraggio di Azure

È possibile creare una risorsa Monitoraggio di Azure per raccogliere log e metriche dalle risorse Azure. Questa risorsa è in genere un'area di lavoro Log Analytics, in cui vengono archiviati i log e le metriche.

È possibile creare questa risorsa in diversi modi:

  • Azure portale: usare il portale Azure per creare un'area di lavoro Log Analytics e configurare le impostazioni di diagnostica per le risorse.
  • interfaccia della riga di comando di Azure: usare il interfaccia della riga di comando di Azure per creare un'area di lavoro Log Analytics e configurare le impostazioni di diagnostica per le risorse.
  • PowerShell: usare PowerShell per creare un'area di lavoro Log Analytics e configurare le impostazioni di diagnostica per le risorse.
  • Bicep: usare modelli di Bicep per definire e distribuire le risorse Monitoraggio di Azure in modo dichiarativo.

Creare un'area di lavoro Log Analytics usando il interfaccia della riga di comando di Azure

Usare il interfaccia della riga di comando di Azure per creare un'area di lavoro Log Analytics, in cui vengono archiviati i log e le metriche. Esempio:

# Variables
resourceGroup="myResourceGroup"
location="eastus"
workspaceName="myWorkspace"
webAppName="myWebApp"
diagName="${webAppName}/appServiceLogging"
SUBSCRIPTION_ID=$(az account show --query id -o tsv)

# 1) Create a Log Analytics workspace
workspaceId=$(az monitor log-analytics workspace create \
  --resource-group $resourceGroup \
  --workspace-name $workspaceName \
  --location $location \
  --query id -o tsv)

# 2) Enable diagnostic settings on your App Service
az monitor diagnostic-settings create \
  --name "$diagName" \
  --resource "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroup/providers/Microsoft.Web/sites/$webAppName" \
  --workspace $workspaceId \
  --logs '[{"category": "Administrative", "enabled": true},{"category":"AppServiceConsoleLogs","enabled":true},{"category":"AppServiceHTTPLogs","enabled":true}]' \
  --metrics '[{"category":"AllMetrics","enabled":true}]'

Creare un'area di lavoro Log Analytics usando Bicep

Usare Bicep per definire e distribuire le risorse Monitoraggio di Azure in modo dichiarativo. Questo esempio crea un'area di lavoro Log Analytics e configura le impostazioni di diagnostica per un servizio app.

Includere log, metriche e avvisi nei modelli IaC con un riferimento alla risorsa Bicep diagnosticSettings. Esempio (Bicep):

param webAppName string

resource webApp 'Microsoft.Web/sites@2022-09-01' existing = {
  name: webAppName
}

resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
  name: 'myWorkspace'
  location: resourceGroup().location
}

resource diagSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
  name: '${webApp.name}/appServiceLogging'
  properties: {
    workspaceId: logAnalytics.id
    logs: [
      { category: 'AppServiceConsoleLogs'; enabled: true }
      { category: 'AppServiceHTTPLogs'; enabled: true }
    ]
    metrics: [
      { category: 'AllMetrics'; enabled: true }
    ]
  }
}

Crea avvisi per le risorse

È possibile configurare avvisi per le metriche nel portale di Azure o usando il interfaccia della riga di comando di Azure. Gli avvisi possono includere metriche specifiche, flussi di comunicazione (ad esempio posta elettronica) e frequenza.

Usare gli esempi seguenti per creare avvisi delle metriche nel portale o a livello di codice:

  • interfaccia della riga di comando di Azure: configurazione rapida tramite az monitor metrics alert
  • Bicep: definizione IaC dichiarativa per Microsoft.Insights/metricAlerts

Gli avvisi possono specificare metriche di destinazione, canali di notifica (posta elettronica, webhook), gravità, frequenza di valutazione e gruppi di azioni.

az monitor metrics alert create \
  --name HighCpuAlert \
  --resource-group MyResourceGroup \
  --scopes /subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/Microsoft.Web/sites/myApp \
  --condition "avg CpuPercentage > 70" \
  --description "Alert when CPU goes above 70%" \
  --severity 2 \
  --window-size 5m \
  --evaluation-frequency 1m \
  --action /subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/microsoft.insights/actionGroups/MyActionGroup
resource cpuAlert 'Microsoft.Insights/metricAlerts@2018-03-01' = {
  name: 'highCpuAlert'
  location: resourceGroup().location
  properties: {
    description: 'Alert when CPU goes above 70%'
    severity: 2
    enabled: true
    scopes: [
      webApp.id
    ]
    evaluationFrequency: 'PT1M'
    windowSize: 'PT5M'
    criteria: {
      allOf: [
        {
          criterionType: 'StaticThresholdCriterion'
          name: 'HighCpu'
          metricName: 'CpuPercentage'
          metricNamespace: 'Microsoft.Web/sites'
          operator: 'GreaterThan'
          threshold: 70
          timeAggregation: 'Average'
        }
      ]
    }
    autoMitigate: false
    actions: [
      {
        actionGroupId: '/subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/microsoft.insights/actionGroups/MyActionGroup'
      }
    ]
  }
}

Visualizzare i dati dei log

Per visualizzare i dati di log nel portale di Azure, passare all'area di lavoro Log Analytics e selezionare Logs. È possibile eseguire le query KQL (Kusto Query Language) sui log.

Trasmettere i log

Usare la tabella seguente per altre informazioni su come trasmettere i log.

Server MCP di Azure

Quando si sviluppa in locale, è possibile usare il Azure Server MCPmonitor per eseguire query sui log senza uscire dall'IDE. Dopo aver installato il server, ad esempio i prompt di Copilot includono:

  • Elencare le aree di lavoro: "Mostra tutte le aree di lavoro Log Analytics nella sottoscrizione".
  • Trovare tabelle: "Elencare tutte le tabelle nell'area di lavoro 'security-logs'"
  • Query complessa: "Mostra la tendenza di utilizzo della CPU per i server Web nelle ultime 24 ore"

Aggiungere la registrazione al codice

Per la registrazione delle applicazioni, Application Insights può fornire:

  • Registrazione standard nel servizio Azure e nel codice sorgente, a seconda dell'inizializzazione.
  • Registrazione personalizzata della tua pipeline di distribuzione e nel tuo codice sorgente.

Registrazione della console standard (stdout/stderr)

Azure app Web e Funzioni di Azure forniscono automaticamente la registrazione personalizzata per stdout e stderr, se si usano le funzioni di registrazione corrette:

  • Le app web usano console.log('your message here').
  • Le app per le funzioni usano context.log('your message here').

Aggiungere la registrazione personalizzata di Application Insights

È possibile aggiungere una registrazione personalizzata più completa usando Application Insights in Monitoraggio di Azure. Application Insights offre scenari server (Node.js) e client (browser):

  • Aggiungere Application Insights SDK al codice sorgente.
  • Accedere da Node.js usando un pacchetto npm.
    • Assicurarsi di configurare Node.js SDK con enableAutoCollectConsole: true per raccogliere i log della console personalizzati.
  • Eseguire il log dal codice client usando un pacchetto npm.
  • Accedere dal cluster Kubernetes o dalla macchina virtuale Azure.

Abilitare i log della pipeline SDK (@Azure/logger)

Controlla la verbosità dell'SDK utilizzando la AZURE_LOG_LEVEL variabile di ambiente o il @azure/logger pacchetto npm:

import { setLogLevel } from "@azure/logger";
// Options: 'error', 'warning', 'info', 'verbose'
setLogLevel(process.env.AZURE_LOG_LEVEL || "info");

Configurare Application Insights Node.js SDK

Inizializzare Application Insights per Node.js SDK con campionamento, raccolta di dipendenze e acquisizione dei log della console:

import appInsights from "applicationinsights";
appInsights
  .setup(process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR_CONNECTION_STRING>")
  .setAutoCollectConsole(true, true)        // collect console.log
  .setAutoCollectDependencies(true)        // track outgoing requests
  .setInternalLogging(false, true)         // SDK internal logs
  .start();

// Optional: add custom properties to all telemetry
appInsights.defaultClient.commonProperties = { serviceName: "my-service" };

Aggiungere la correlazione e la traccia distribuita

Application Insights SDK inserisce automaticamente le operazioni e gli ID di correlazione nelle richieste. Per aggiungere correlazioni o proprietà personalizzate:

appInsights.defaultClient.trackTrace({
  message: "Custom trace",
  properties: { userId: user.id }
});

Altre informazioni: indicazioni sulla traccia distribuita

Scaricare i dati di telemetria negli script di sviluppo

Assicurarsi che i log vengano inviati prima dell'uscita del processo durante lo sviluppo locale:

appInsights.defaultClient.flush({
  callback: () => process.exit(0)
});

Configurazione della telemetria lato client

Per le applicazioni client, usare il @microsoft/applicationinsights-web pacchetto :

import { ApplicationInsights } from "@microsoft/applicationinsights-web";
const ai = new ApplicationInsights({ config: {
  connectionString: "<YOUR_CONNECTION_STRING>",
  enableAutoRouteTracking: true
}});
ai.loadAppInsights();