Habilitar o Diagnóstico do Azure nos Serviços de Nuvem do Azure (clássico)
Importante
Os Serviços de Nuvem (clássicos) agora se encontram preteridos para todos os clientes a partir de 1º de setembro de 2024. Todas as implantações em execução existentes serão interrompidas e desligadas pela Microsoft e os dados serão perdidos de forma permanente a partir de outubro de 2024. As novas implantações devem usar o novo modelo de implantação baseado no Azure Resource Manager Serviços de Nuvem do Azure (suporte estendido) .
Confira Visão geral do Diagnóstico do Azure para obter informações preliminares sobre o Diagnóstico do Azure.
Como habilitar o Diagnostics em uma Função do Trabalho
Este passo a passo descreve como implementar uma função de trabalho do Azure que emite dados de telemetria usando o .NET EventSource Class. O Diagnóstico do Azure é usado para coletar os dados de telemetria e armazená-los em uma conta de armazenamento do Azure. Ao criar um trabalho, o Visual Studio habilita automaticamente o Diagnóstico 1.0 como parte da solução em Kits de Desenvolvimento de Software do Azure (SDKs) para .NET 2.4 e versões anteriores. As instruções a seguir descrevem o processo de criação da função de trabalho, desabilitando o Diagnóstico 1.0 por meio da solução e implantando o Diagnóstico 1.2 ou 1.3 para sua função de trabalho.
Pré-requisitos
Esse artigo assume que você tem uma assinatura do Azure e está usando o Visual Studio com o SDK do Azure. Se você não tiver uma assinatura do Azure, poderá inscrever-se para uma Avaliação gratuita. Certifique-se de Instalar e configurar o PowerShell do Azure, versão 0.8.7 ou posterior.
Etapa 1: criar uma função de trabalho
- Inicie o Visual Studio.
- Crie um projeto Serviço de Nuvem do Azure no modelo Nuvem destinado ao .NET Framework 4.5. Nomeie o projeto “WadExample” e selecione Ok.
- Selecione Trabalho e, em seguida, Ok. O projeto foi criado.
- No Gerenciador de Soluções, clique duas vezes no arquivo de propriedades WorkerRole1.
- Na guia Configuração, desmarque Habilitar Diagnóstico para desabilitar o Diagnóstico 1.0 (SDK do Azure 2.4 e versões anteriores).
- Compile sua solução para verificar que você não tem erros.
Etapa 2: Instrumentalizar seu código
Substitua os conteúdos do WorkerRole.cs pelo código a seguir. A classe SampleEventSourceWriter, herdada da Classe EventSource, implementa quatro métodos de registro em log: SendEnums, MessageMethod, SetOther e HighFreq. O primeiro parâmetro para o método WriteEvent define a ID para o respectivo evento. O método Executar implementa um loop infinito que chama cada um dos métodos de registro implementados na classe SampleEventSourceWriter a cada 10 segundos.
using Microsoft.WindowsAzure.ServiceRuntime;
using System;
using System.Diagnostics;
using System.Diagnostics.Tracing;
using System.Net;
using System.Threading;
namespace WorkerRole1
{
sealed class SampleEventSourceWriter : EventSource
{
public static SampleEventSourceWriter Log = new SampleEventSourceWriter();
public void SendEnums(MyColor color, MyFlags flags) { if (IsEnabled()) WriteEvent(1, (int)color, (int)flags); }// Cast enums to int for efficient logging.
public void MessageMethod(string Message) { if (IsEnabled()) WriteEvent(2, Message); }
public void SetOther(bool flag, int myInt) { if (IsEnabled()) WriteEvent(3, flag, myInt); }
public void HighFreq(int value) { if (IsEnabled()) WriteEvent(4, value); }
}
enum MyColor
{
Red,
Blue,
Green
}
[Flags]
enum MyFlags
{
Flag1 = 1,
Flag2 = 2,
Flag3 = 4
}
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
// This is a sample worker implementation. Replace with your logic.
Trace.TraceInformation("WorkerRole1 entry point called");
int value = 0;
while (true)
{
Thread.Sleep(10000);
Trace.TraceInformation("Working");
// Emit several events every time we go through the loop
for (int i = 0; i < 6; i++)
{
SampleEventSourceWriter.Log.SendEnums(MyColor.Blue, MyFlags.Flag2 | MyFlags.Flag3);
}
for (int i = 0; i < 3; i++)
{
SampleEventSourceWriter.Log.MessageMethod("This is a message.");
SampleEventSourceWriter.Log.SetOther(true, 123456789);
}
if (value == int.MaxValue) value = 0;
SampleEventSourceWriter.Log.HighFreq(value++);
}
}
public override bool OnStart()
{
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 12;
// For information on handling configuration changes
// see the MSDN topic at https://go.microsoft.com/fwlink/?LinkId=166357.
return base.OnStart();
}
}
}
Etapa 3: Implantar sua Função de Trabalho
Aviso
Quando você habilita o diagnóstico para uma função existente, qualquer extensão que você já tenha definido será desabilitado quando o pacote for implantado. Elas incluem:
- Diagnóstico do Microsoft Monitoring Agent
- Monitoramento de segurança do Microsoft Azure
- Microsoft Antimalware
- Agente de monitoramento da Microsoft
- Agente Criador de Perfil de Serviço da Microsoft
- Extensão de Domínio do Azure
- Extensão de Diagnóstico do Azure
- Extensão de Área de Trabalho Remota do Azure
- Coletor de Logs do Azure
Depois de implantar a função atualizada, você pode redefinir as extensões por meio do portal do Azure ou do PowerShell.
- Implante sua função de trabalho para o Azure no Visual Studio selecionando o projeto WadExample no Gerenciador de Soluções, em seguida, Publicar no menu Compilar.
- Escolha sua assinatura.
- Na caixa de diálogo Configurações de Publicação do Microsoft Azure, selecione Criar Novo... .
- Na caixa de diálogo Criar Serviço de Nuvem e Conta de Armazenamento, insira um Nome (por exemplo, "WadExample") e selecione uma região ou grupo de afinidades.
- Defina o Ambiente para Preparo.
- Modifique qualquer outra Configuração conforme apropriado e selecione Publicar.
- Após a conclusão da implantação, verifique no portal do Azure se o serviço de nuvem está em estado de Execução.
Etapa 4: Criar seu arquivo de configuração do Diagnostics e instalar a extensão
Baixe a definição do esquema do arquivo de configuração pública ao executar o seguinte comando PowerShell:
(Get-AzureServiceAvailableExtension -ExtensionName 'PaaSDiagnostics' -ProviderNamespace 'Microsoft.Azure.Diagnostics').PublicConfigurationSchema | Out-File -Encoding utf8 -FilePath 'WadConfig.xsd'
Adicione um arquivo XML ao projeto WorkerRole1 clicando com o botão direito no projeto WorkerRole1 e selecione Adicionar - >Novo Item… - >Itens do Visual C#> - Dados - >Arquivo XML. Dê o nome
WadExample.xml
para o arquivo.Associe o WadConfig.xsd com o arquivo de configuração. Certifique-se de que a janela do editor WadExample.xml é uma janela ativa. Pressione F4 para abrir a janela Propriedades. Selecione a propriedade Esquemas na janela Propriedades. Selecione ... na propriedade Esquemas. Selecione o botão Adicionar... e navegue até o local em que você salvou o arquivo .xsd e selecione o arquivo WadConfig.xsd. Selecione OK.
Substitua os conteíudos do arquivo de configuração WadExample.xml com o seguinte XML e salve o arquivo. Este arquivo de configuração define dois contadores de desempenho a serem coletados: um relacionado à utilização da CPU e um ao uso de memória. Após a configuração, defina os quatro eventos correspondentes aos métodos na classe SampleEventSourceWriter.
<?xml version="1.0" encoding="utf-8"?>
<PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
<WadCfg>
<DiagnosticMonitorConfiguration overallQuotaInMB="25000">
<PerformanceCounters scheduledTransferPeriod="PT1M">
<PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT1M" unit="percent" />
<PerformanceCounterConfiguration counterSpecifier="\Memory\Committed Bytes" sampleRate="PT1M" unit="bytes"/>
</PerformanceCounters>
<EtwProviders>
<EtwEventSourceProviderConfiguration provider="SampleEventSourceWriter" scheduledTransferPeriod="PT5M">
<Event id="1" eventDestination="EnumsTable"/>
<Event id="2" eventDestination="MessageTable"/>
<Event id="3" eventDestination="SetOtherTable"/>
<Event id="4" eventDestination="HighFreqTable"/>
<DefaultEvents eventDestination="DefaultTable" />
</EtwEventSourceProviderConfiguration>
</EtwProviders>
</DiagnosticMonitorConfiguration>
</WadCfg>
</PublicConfig>
Etapa 5: instalar o Diagnostics em sua Função de Trabalho
Os cmdlets do PowerShell para gerenciar o diagnóstico em uma função web ou de trabalho são: Set-AzureServiceDiagnosticsExtension, Get-AzureServiceDiagnosticsExtension e Remove-AzureServiceDiagnosticsExtension.
- Abra o PowerShell do Azure.
- Execute o script para instalar o Diagnostics na sua função de trabalho (substitua o StorageAccountKey com a chave de conta de armazenamento para sua conta de armazenamento wadexample e config_path com o caminho até o arquivo WadExample.xml):
$storage_name = "wadexample"
$key = "<StorageAccountKey>"
$config_path="c:\users\<user>\documents\visual studio 2013\Projects\WadExample\WorkerRole1\WadExample.xml"
$service_name="wadexample"
$storageContext = New-AzureStorageContext -StorageAccountName $storage_name -StorageAccountKey $key
Set-AzureServiceDiagnosticsExtension -StorageContext $storageContext -DiagnosticsConfigurationPath $config_path -ServiceName $service_name -Slot Staging -Role WorkerRole1
Etapa 6: Examinar os dados de telemetria
No Gerenciador de Servidores do Visual Studio, navegue até a conta de armazenamento wadexample. Depois de o serviço de nuvem ter sido executado por cerca de cinco (5) minutos, você deverá ver as tabelas WADEnumsTable, WADHighFreqTable, WADMessageTable, WADPerformanceCountersTable e WADSetOtherTable. Clique duas vezes em uma das tabelas para exibir a telemetria coletada.
Esquema de arquivos de configuração
O arquivo de configuração do Diagnóstico define valores que são usados para inicializar as definições de configurações do diagnóstico quando o agente de diagnóstico é iniciado. Veja a referência de esquema mais recente para obter valores válidos e exemplos.
Solução de problemas
Caso tenha problemas, veja Solucionando problemas do Diagnóstico do Azure para obter ajuda com problemas comuns.
Próximas etapas
Veja uma lista de artigos sobre diagnóstico de máquina virtual do Azure para alterar os dados coletados, solucionar problemas ou saber mais sobre o diagnóstico em geral.