Enviar dados de diagnóstico do Serviço de Nuvem, Máquina Virtual ou Service Fabric para o Application Insights

Serviços de nuvem, máquinas virtuais, conjuntos de dimensionamento de máquina virtual e Service Fabric usam a extensão de diagnóstico do Azure para coletar dados. O diagnóstico do Azure envia dados para tabelas de Armazenamento do Azure. No entanto, você também pode canalizar todos ou um subconjunto dos dados para outros locais usando a extensão de Diagnóstico do Azure 1.5 ou posterior.

Este artigo descreve como enviar dados da extensão de Diagnóstico do Azure para o Application Insights.

Explicação da configuração do diagnóstico

A extensão de diagnóstico do Azure 1.5 introduziu coletores, que são locais adicionais para onde você pode enviar dados de diagnóstico.

Exemplo de configuração de um coletor para o 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"
                    }
                ]
            }
        }
    ]
}
  • O atributo Nome do coletor é um valor de cadeia de caracteres que identifica exclusivamente o coletor.

  • O elemento ApplicationInsights especifica a chave de instrumentação do recurso Application Insights para onde os dados de diagnóstico do Azure são enviados.

  • O elemento Channels contém um ou mais elementos Channel.

    • O atributo name refere-se exclusivamente a esse canal.
    • O atributo loglevel permite especificar o nível de log permitido pelo canal. Os níveis de log disponíveis na ordem da maioria para o mínimo de informações são:
      • Verboso
      • Informações
      • Aviso
      • Erro
      • Crítico

Um canal age como um filtro e permite que você selecione níveis de log específicos para enviar ao coletor de destino. Por exemplo, você pode coletar logs detalhados e enviá-los para o armazenamento, mas enviar apenas Erros para o coletor.

O gráfico a seguir mostra essa relação.

Diagnostics Public Configuration

O gráfico a seguir resume os valores de configuração e como eles funcionam. Você pode incluir vários coletores na configuração em diferentes níveis na hierarquia. O coletor no nível superior atua como uma configuração global e o especificado no elemento individual age como uma substituição para essa configuração global.

Diagnostics Sinks Configuration with Application Insights

Exemplo completo de configuração do coletor

Aqui está um exemplo completo do arquivo de configuração pública que

  1. envia todos os erros para o Application Insights (especificado no nó DiagnosticMonitorConfiguration )
  2. também envia logs de nível detalhado para os Logs de Aplicativo (especificados no nó Logs).
<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"
                        }
                    ]
                }
            }
        ]
    }
}

Na configuração anterior, as seguintes linhas têm os seguintes significados:

Enviar todos os dados que estão sendo coletados pelo diagnóstico do Azure

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

Enviar apenas logs de erro para o coletor do Application Insights

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

Enviar logs detalhados de aplicativos para o Application Insights

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

Limitações

  • Canais apenas tipo de log e não contadores de desempenho. Se você especificar um canal com um elemento de contador de desempenho, ele será ignorado.
  • O nível de log de um canal não pode exceder o nível de log do que está sendo coletado pelo diagnóstico do Azure. Por exemplo, você não pode coletar erros de log do aplicativo no elemento Logs e tentar enviar logs detalhados para o coletor do Application Insight. O atributo scheduledTransferLogLevelFilter sempre deve coletar logs iguais ou mais do que os logs que você está tentando enviar para um coletor.
  • Não é possível enviar dados de blob coletados pela extensão de diagnóstico do Azure para o Application Insights. Por exemplo, qualquer coisa especificada no nó Diretórios . Para Crash Dumps, o despejo de memória real é enviado para o armazenamento de blob e apenas uma notificação de que o despejo de memória foi gerado é enviada para o Application Insights.

Passos Seguintes

  • Saiba como exibir suas informações de diagnóstico do Azure no Application Insights.
  • Use o PowerShell para habilitar a extensão de diagnóstico do Azure para seu aplicativo.
  • Usar o Visual Studio para habilitar a extensão de diagnóstico do Azure para seu aplicativo