Inviare i dati di diagnostica del servizio Cloud, della macchina virtuale o di Service Fabric ad Application Insights

I servizi cloud, le macchine virtuali, il set di scalabilità di macchine virtuali e Service Fabric usano l'estensione Diagnostica di Azure per raccogliere i dati. La diagnostica di Azure invia i dati alle tabelle di Archiviazione di Azure. Tuttavia, è possibile anche inviare pipe o un subset di dati ad altri percorsi con l'estensione Diagnostica di Azure 1.5 o versione successiva.

In questo articolo viene descritto come inviare i dati dall'estensione Diagnostica di Azure ad Application Insights.

Descrizione della configurazione di Diagnostica

L'estensione diagnostica di Azure 1.5 ha introdotto sink, che sono posizioni aggiuntive in cui è possibile inviare dati di diagnostica.

Esempio di configurazione di un sink per Application Insights:

<SinksConfig>
    <Sink name="ApplicationInsights">
      <ApplicationInsights>{Insert InstrumentationKey}</ApplicationInsights>
      <Channels>
        <Channel logLevel="Error" name="MyTopDiagData"  />
        <Channel logLevel="Verbose" name="MyLogData"  />
      </Channels>
    </Sink>
</SinksConfig>
"SinksConfig": {
    "Sink": [
        {
            "name": "ApplicationInsights",
            "ApplicationInsights": "{Insert InstrumentationKey}",
            "Channels": {
                "Channel": [
                    {
                        "logLevel": "Error",
                        "name": "MyTopDiagData"
                    },
                    {
                        "logLevel": "Error",
                        "name": "MyLogData"
                    }
                ]
            }
        }
    ]
}
  • L'attributo Nome sink è un valore della stringa che identifica in modo univoco il sink.

  • L'elemento ApplicationInsights specifica la chiave di strumentazione della risorsa di Application Insights a cui verranno inviati i dati di Diagnostica di Azure.

    • Se non si ha una risorsa di Application Insights esistente, vedere Creare una nuova risorsa di Application Insights.
    • Se si sviluppa un servizio cloud con Azure SDK 2.8 e versioni successive, questa chiave di strumentazione viene popolata automaticamente. Il valore si basa sull'impostazione di configurazione del servizio APPINSIGHTS_INSTRUMENTATIONKEY durante la creazione del pacchetto del progetto del servizio cloud, vedere Usare Application Insights con Servizi cloud.
  • L'elemento Channels contiene uno o più elementi Channel.

    • L'attributo name fa riferimento in modo univoco a tale canale.
    • L'attributo loglevel consente di specificare il livello di log consentito dal canale. I livelli di log disponibili, in base al livello di dettaglio delle informazioni, sono:
      • Verbose
      • Informazioni
      • Avviso
      • Errore
      • Critico

Un canale agisce da filtro e consente di selezionare specifici livelli di log da inviare al sink di destinazione. Ad esempio, l'utente può raccogliere log dettagliati inviarli alla risorsa di archiviazione, ma inviare solo gli errori al sink.

Il grafico seguente illustra questa relazione.

Configurazione pubblica di Diagnostica

Nel grafico seguente sono riepilogati i valori di configurazione e il relativo funzionamento. È inoltre possibile includere più sink nella configurazione, a vari livelli della gerarchia. Il sink specificato al livello superiore svolge la funzione di impostazione globale, mentre quello specificato al livello di singolo elemento agisce da override dell'impostazione globale.

Configurazione dei sink di diagnostica con Application Insights

Esempio di configurazione del sink completo

Ecco un esempio completo del file di configurazione pubblico che:

  1. Invia tutti gli errori ad Application Insights (specificato nel nodo DiagnosticMonitorConfiguration ).
  2. Invia anche log di livello dettagliato per i log applicazioni (specificati nel nodo Log ).
<WadCfg>
  <DiagnosticMonitorConfiguration overallQuotaInMB="4096"
       sinks="ApplicationInsights.MyTopDiagData"> <!-- All info below sent to this channel -->
    <DiagnosticInfrastructureLogs />
    <PerformanceCounters>
      <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
      <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
    </PerformanceCounters>
    <WindowsEventLog scheduledTransferPeriod="PT1M">
      <DataSource name="Application!*" />
    </WindowsEventLog>
    <Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose"
            sinks="ApplicationInsights.MyLogData"/> <!-- This specific info sent to this channel -->
  </DiagnosticMonitorConfiguration>

<SinksConfig>
    <Sink name="ApplicationInsights">
      <ApplicationInsights>{Insert InstrumentationKey}</ApplicationInsights>
      <Channels>
        <Channel logLevel="Error" name="MyTopDiagData"  />
        <Channel logLevel="Verbose" name="MyLogData"  />
      </Channels>
    </Sink>
  </SinksConfig>
</WadCfg>
"WadCfg": {
    "DiagnosticMonitorConfiguration": {
        "overallQuotaInMB": 4096,
        "sinks": "ApplicationInsights.MyTopDiagData", "_comment": "All info below sent to this channel",
        "DiagnosticInfrastructureLogs": {
        },
        "PerformanceCounters": {
            "PerformanceCounterConfiguration": [
                {
                    "counterSpecifier": "\\Processor(_Total)\\% Processor Time",
                    "sampleRate": "PT3M"
                },
                {
                    "counterSpecifier": "\\Memory\\Available MBytes",
                    "sampleRate": "PT3M"
                }
            ]
        },
        "WindowsEventLog": {
            "scheduledTransferPeriod": "PT1M",
            "DataSource": [
                {
                    "name": "Application!*"
                }
            ]
        },
        "Logs": {
            "scheduledTransferPeriod": "PT1M",
            "scheduledTransferLogLevelFilter": "Verbose",
            "sinks": "ApplicationInsights.MyLogData", "_comment": "This specific info sent to this channel"
        }
    },
    "SinksConfig": {
        "Sink": [
            {
                "name": "ApplicationInsights",
                "ApplicationInsights": "{Insert InstrumentationKey}",
                "Channels": {
                    "Channel": [
                        {
                            "logLevel": "Error",
                            "name": "MyTopDiagData"
                        },
                        {
                            "logLevel": "Verbose",
                            "name": "MyLogData"
                        }
                    ]
                }
            }
        ]
    }
}

Nella configurazione precedente, le righe riportate di seguito hanno i significati seguenti:

Inviare tutti i dati raccolti dalla diagnostica di Azure

<DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="ApplicationInsights">
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights",
}

Inviare solo i log di errore al sink di Application Insights

<DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="ApplicationInsights.MyTopDiagdata">
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights.MyTopDiagData",
}

Inviare i log Verbose dell'applicazione ad Application Insights

<Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose" sinks="ApplicationInsights.MyLogData"/>
"DiagnosticMonitorConfiguration": {
    "overallQuotaInMB": 4096,
    "sinks": "ApplicationInsights.MyLogData",
}

Limiti

  • Unico tipo di log Channels e non per i contatori delle prestazioni. Se si specifica un canale con un elemento del contatore delle prestazioni, viene ignorato.
  • Il livello di log per un canale non può superare il livello di log per ciò che viene raccolto dalla diagnostica di Azure. Ad esempio, non è possibile raccogliere gli errori del log applicazioni nell'elemento Logs e provare a inviare log dettagliati al sink di Application Insight. L'attributo scheduledTransferLogLevelFilter deve sempre raccogliere log uguali o più dei log che si sta tentando di inviare a un sink.
  • Non è possibile inviare dati BLOB raccolti dall'estensione diagnostica di Azure ad Application Insights. Ad esempio qualsiasi elemento specificato nel nodo Directories. Per i dump di arresto anomalo del sistema, il dump di arresto anomalo effettivo viene inviato all'archivio BLOB e solo una notifica che indica che il dump di arresto anomalo del sistema è stato generato viene inviato ad Application Insights.

Passaggi successivi