Partilhar via


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áquinas virtuais 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.

    • Se você não tiver um recurso existente do Application Insights, consulte Criar um novo recurso do Application Insights para obter mais informações sobre como criar um recurso e obter a chave de instrumentação.
    • Se você estiver desenvolvendo um Serviço de Nuvem com o SDK do Azure 2.8 e posterior, essa chave de instrumentação será preenchida automaticamente. O valor é baseado na definição de configuração do serviço APPINSIGHTS_INSTRUMENTATIONKEY ao empacotar o projeto do Serviço de Nuvem. Consulte Usar o Application Insights com serviços de nuvem.
  • 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.

Configuração pública de diagnóstico

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.

Configuração de coletores de diagnóstico com o 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