Enviar dados de diagnóstico do Serviço de Nuvem, da máquina virtual ou do Service Fabric ao Application Insights
Serviços de nuvem, máquinas virtuais, conjuntos de dimensionamento de máquinas virtuais e o Service Fabric usam a extensão do Diagnóstico do Azure para coletar dados. O Diagnóstico do Azure envia dados às tabelas do Armazenamento do Azure. No entanto, também é possível redirecionar todos os dados, ou um subconjunto deles, para outros locais usando a extensão do Diagnóstico do Azure 1.5 ou posterior.
Este artigo descreve como enviar dados da extensão do 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 extras 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 Sinkname é um valor de cadeia de caracteres que identifica exclusivamente o coletor.
O elemento ApplicationInsights especifica a chave de instrumentação do recurso do Application Insights para onde os dados do 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.
- 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 os 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 que você especifique o nível de log permitido pelo canal. Os níveis de log disponíveis, organizados do que contém mais para o que contém menos informações, são:
- Detalhado
- Informações do
- Aviso
- Erro
- Crítico
Um canal funciona como um filtro e permite que você selecione níveis de log específicos para enviar ao coletor de destino. Por exemplo, você poderia coletar logs detalhados e enviá-los ao armazenamento, mas enviar apenas os Erros ao coletor.
O gráfico a seguir mostra essa relação.
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 atua como uma substituição daquela configuração global.
Exemplo de configuração completa do coletor
Aqui está um exemplo completo do arquivo de configuração pública que:
- envia todos os erros ao Application Insights (especificado no nó DiagnosticMonitorConfiguration).
- também envia logs de nível Detalhado para os Logs do Aplicativo (especificado 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 linhas a seguir apresentam estes significados:
envia todos os dados coletados pelo diagnóstico do Azure
<DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="ApplicationInsights">
"DiagnosticMonitorConfiguration": {
"overallQuotaInMB": 4096,
"sinks": "ApplicationInsights",
}
Enviar somente logs de erro para o coletor do Application Insights
<DiagnosticMonitorConfiguration overallQuotaInMB="4096" sinks="ApplicationInsights.MyTopDiagdata">
"DiagnosticMonitorConfiguration": {
"overallQuotaInMB": 4096,
"sinks": "ApplicationInsights.MyTopDiagData",
}
Enviar logs de aplicativo Detalhados para o Application Insights
<Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose" sinks="ApplicationInsights.MyLogData"/>
"DiagnosticMonitorConfiguration": {
"overallQuotaInMB": 4096,
"sinks": "ApplicationInsights.MyLogData",
}
Limitações
- Os canais só registro o tipo e não contadores de desempenho. Se você especificar um canal com um elemento 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 de Aplicativo no elemento Logs e tentar enviar logs detalhados para o coletor do Application Insight. O atributo scheduledTransferLogLevelFilter deve sempre coletar logs iguais ou maiores 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 ao Application Insights. Por exemplo, qualquer coisa especificada no nó Diretórios. Para despejos de memória, o despejo de memória real é enviado para o armazenamento de blobs e apenas uma notificação de que o despejo de memória foi gerado é enviada ao Application Insights.
Próximas etapas
- Saiba como exibir as informações de diagnóstico do Azure no Application Insights.
- Use o PowerShell para habilitar a extensão do Diagnóstico do Azure para seu aplicativo.
- Use o Visual Studio para habilitar a extensão de diagnóstico do Azure para seu aplicativo.