Performance Counters nas roles do #Azure – Parte 2 – Final


Olá pessoal,

No post anterior “Performance Counters nas roles do #Azure – Parte 1” vimo como iniciar uma nova ‘Solution’, como configurar nossa ‘Connection String’ para que os dados que coletarmos com os ‘Performance Counters’ possam ser persistidos em nossa ‘Azure Table Storage’ e que utilizaremos a ferramenta ‘Azure Storage Explorer’ para verificar seu conteúdo.

Estão vamos lá para iniciarmos esta nossa segunda parte primeiro abra o projeto passado, e em seguida vamos começa a codificar.

A primeira coisa é verificar se as APIs de Diagnóstigo, de RunTime e Storage estão referenciadas, caso não estejam, referenciem-nas pois serão necessáras neste projeto (post) e nos posteriores.

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.Diagnostics;

using Microsoft.WindowsAzure.ServiceRuntime;

using Microsoft.WindowsAzure.StorageClient;

Para saber mais sobre as APIs citadas acima acesse este link Windows Azure Managed Library Reference.

  • Microsoft.WindowsAzure: nos permite gerenciar o acesso às ‘Storage Accounts’ no Windows Azure;
  • Microsoft.WindowsAzure.Diagnostics: nos permite coletar informações de log e de  diagnóstico a partir do código em execução na sua role;
  • Microsoft.WindowsAzure.ServiceRuntime: nos permite interagir com o ambiente do Windows Azure a partir do código em execução na sua role;
  • Microsoft.WindowsAzure.StorageClient: poossui uma biblioteca de classes que nos permite trabalhar com os serviçoes de ‘storage’ do Windows Azure.

Para este exemplo precisaremos adicionar mais uma classe para isso clique com o botão direito sobre sua ‘Class Library’ no meu caso chama-se ‘CollectPC’, vá até a opção ‘Add’ e depois clique em ‘Class..’, conforme abaixo.

01

Aparecerá a segunte tela informe um novo nome e clique em ‘Add’.

02

Sua ‘Solution Explorer’ deve estar com uma estrutura conforme a apresentada abaixo.

03

Nosso projeto para este post contará com 1 ‘Worker Role’ que inserimos no início da ‘Solution’ e 2 classes, vamos à implementação agora e ver o que temos de código.

Abaixo como ilustração deixarei as imagens e trechos de códigos com os comentários.

No arquivo ‘WorkerRole.cs’temos a seguinte implementação no método ‘OnStart()’.

public override bool OnStart()

{

// Set the maximum number of concurrent connections

ServicePointManager.DefaultConnectionLimit = 12;

//Setamos as configurações 'default' de gerenciamento
//e monitoramento da role atual

DiagnosticMonitorConfiguration dmConfig =
DiagnosticMonitor.GetDefaultInitialConfiguration();

//Define de quanto em quanto tempo as informações serão transferidas
//o tempo pode ser definido em milesegundos, segundos, minutos,
// horas e dias

TimeSpan tsEventLogXfer = TimeSpan.FromSeconds(15);
//Define de quanto em quanto tempo as informações serão coletadas
//o tempo pode ser definido em milesegundos, segundos, minutos,
// horas e dias

TimeSpan timeToCollect = System.TimeSpan.FromSeconds(15);

//Chama o método AddWorkerRoleCounters passando as informações
//de configurações iniciais e de tempo de coleta

PerformanceCounters.AddWorkerRoleCounters(dmConfig, timeToCollect);

dmConfig.PerformanceCounters.ScheduledTransferPeriod = tsEventLogXfer;

//Inicia o 'Diagnostic Monitor' com as configurações que definimos

DiagnosticMonitor.Start("azureStorageConnectionString", dmConfig);
return base.OnStart();

}

Seu código deve estar semelhante à imagem abaixo.

04

Já no arquivo ‘performanceCounters.cs’ teremos duas implementações, primeiro uma ‘Collection’ que armazenará todas as informações dos contadores.

/// <summary>
/// Cria uma 'colection' com as configurações e informações
/// dos 'Performance Counters'
/// </summary>
public class AddCounters
{

private IList<PerformanceCounterConfiguration> _counters;

public AddCounters(IList<PerformanceCounterConfiguration> counterCollection)
{
_counters = counterCollection;
}

public void AddCounter(string counterName, TimeSpan interval)
{
PerformanceCounterConfiguration perfCounter = new PerformanceCounterConfiguration();
perfCounter.CounterSpecifier = counterName;
perfCounter.SampleRate = interval;
_counters.Add(perfCounter);
}

}

Seu código deve estar semelhante à imagem abaixo.

05E por último temos a implementação do método com os ‘Performance Counters’ que desejamos obter informações.

public class PerformanceCounters

{

public static void AddWorkerRoleCounters(DiagnosticMonitorConfiguration dmConfig, TimeSpan interval)

{

AddCounters counters = new AddCounters(dmConfig.PerformanceCounters.DataSources);

// Memória

counters.AddCounter(@"\Memory\Committed Bytes", interval);

counters.AddCounter(@"\Memory\Available MBytes", interval);

// TCP Connections

counters.AddCounter(@"\TCPv4\Connections Established", interval);

counters.AddCounter(@"\TCPv4\Segments Sent/sec", interval);

// Disco

counters.AddCounter(@"\LogicalDisk(_Total)\Free Megabytes", interval);

counters.AddCounter(@"\LogicalDisk(_Total)\% Free Space", interval);

// Processador

counters.AddCounter(@"\Processor(_Total)\% Processor Time", interval);

// Rede

counters.AddCounter(@"\Network Interface(*)\Bytes Received/sec", interval);

counters.AddCounter(@"\Network Interface(*)\Bytes Sent/sec", interval);

// .NET CLR

counters.AddCounter(@"\.NET CLR Exceptions\# Exceps Thrown / sec", interval);

counters.AddCounter(@"\.NET CLR Memory\# Bytes in all Heaps", interval);

// Web Services

counters.AddCounter(@"\ServiceModelService 3.0.0.0\Calls Per Second", interval);

counters.AddCounter(@"\ServiceModelService 3.0.0.0\Calls Failed Per Second", interval);

counters.AddCounter(@"\ServiceModelService 3.0.0.0\Calls Faulted Per Second", interval);

counters.AddCounter(@"\ServiceModelService 3.0.0.0\Calls Outstanding", interval);

}

}

Seu código deve estar semelhante à imagem abaixo.

06

E está feito! Agora basta rodar e conferir o resultado dos seus ‘Performance Counters’ no ‘Azure Storage Explorer’.

Boa sorte, sucesso e divirtam-se!

Lucas A. Romão
MSN:
laromao@oxygenhost.com.br
Blog: https://laromao.wordpress.com/ | Twitter: @LucasRomao
Líder da Comunidade Azure Services Brasil | Twitter: @AzureServicesBR

Anúncios
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: