Artigo do tipo Tutorial
Recursos especiais neste artigo:
Contém nota Quickupdate.
Namespace System.Diagnostics
Neste artigo veremos como utilizar as classes de contadores de desempenho (Performance Counters) e log de eventos (Event Log) do Windows, mostrando também algumas dicas para tirar o melhor proveito delas. Para exemplificar os conceitos aqui apresentados vamos desenvolver uma aplicação do tipo windows service que fornece informações para seu monitoramento.


Em que situação o tema é útil

As classes do namespace System.Diagnostics podem ser utilizadas no fornecimento de dados para que a equipe de operações possa monitorar a saúde dos sistemas desenvolvidos, de forma a antecipar qualquer problema que possa acontecer com as aplicações como por exemplo desempenho inadequado ou falta de recursos para um bom funcionamento (espaço em disco, memória, etc.)
O ciclo de vida de um sistema não termina quando a última linha de código é escrita e o usuário dá o aceite no que foi feito. Após o processo de desenvolvimento, que envolve as fases de levantamento de requisitos, programação e homologação, entra uma nova etapa que é a operação. É nela que vemos efetivamente o nosso esforço dar resultados e o investimento feito dar retorno, pois neste momento os nossos usuários passam a usufruir dos benefícios que a aplicação desenvolvida traz. Por exemplo, uma aplicação de força de vendas permite que os vendedores sejam mais rápidos nas suas operações, conseqüentemente fazendo mais pedidos por dia.

É importante que a aplicação desempenhe seu papel corretamente. De nada vai adiantar nosso trabalho se o sistema começar a apresentar problemas ou não conseguir atender a demanda exigida pelos usuários. Uma aplicação de vendas que demora em seu tempo de resposta irá atrasar o trabalho dos vendedores. Um dos pontos chaves da fase de operação de um sistema consiste no seu monitoramento. Apesar de isso ser responsabilidade do time de operação, é necessário que o sistema disponibilize os dados necessários para permitir que o monitoramento seja realizado. Mas como podemos fornecer os indicadores para que esse time possa tomar as ações necessárias quando alguma coisa foge do comportamento desejado?

É aqui que entra a utilidade das classes disponíveis no namespace System.Diagnostics. Elas permitem o fornecimento de dados a respeito do desempenho atual da aplicação (por exemplo, quantas requisições ela está processando por segundo) e também detalhes de eventuais problemas que ocorrem durante sua execução, como falhas em conexão com o banco de dados. Daremos foco nas classes de contadores de desempenho e log de eventos (Performance Counters e EventLog, respectivamente).

Nosso exemplo será uma aplicação do tipo windows services que processa dados para calcular a comissão diária dos vendedores. Mas antes de prosseguir com ele, precisamos explicar o que são os contadores de desempenho, log de eventos e também os windows services.

Windows services

Windows services são um tipo de aplicação na qual não é necessária uma sessão de usuário ativa no computador para que ele execute. Como elas não precisam de interação com o usuário são largamente utilizadas para executar processamentos em segundo plano, geralmente executando tarefas de longa duração. Após ser instalado em um computador, é possível configurar o windows service para que ele inicie e comece a trabalhar assim que a máquina seja ligada.

Existem vários windows services executando na sua máquina. Por exemplo, se você tiver o SQL Server Express instalado, ele está rodando como um serviço. Para ver quais são os serviços instalados no seu computador basta digitar o comando “services.msc” na linha de comando do Windows (botão Start - Run...). Isso abrirá o Service Control Manager (SCM), interface na qual, além de podermos ver quais são os windows services existentes na máquina, é possível configurá-los, parar algum que esteja executando ou iniciar algum que esteja parado. Vemos um exemplo desta tela na Figura 1.


Figura 1. Windows services disponíveis

Vamos agora dar uma olhada nas propriedades de um serviço para entender melhor as opções que temos disponíveis. Para acessá-las, basta clicar com o botão direito sobre o windows service escolhido e clicar em “Properties”.

A primeira aba das propriedades que vemos é a da Figura 2. Ela possui detalhes como o nome do serviço, descrição e o caminho do executável (afinal, um windows service nada mais é que um arquivo EXE). Além disso, é possível definir qual o comportamento que o windows service deve ter quando o computador iniciar (Startup type). Podemos escolher os seguintes valores:
• Automatic – O windows service iniciará automaticamente junto com o boot do computador.
• Disabled – O windows service está desativado e não será executado.
• Manual – O windows service iniciará parado no boot do computador e um usuário pode escolher iniciá-lo manualmente.
• Delayed start – O windows service iniciará um pouco depois do boot do computador, exatamente para evitar um momento onde vários serviços estão inicializando. Esta opção está disponível nas versões mais novas do Windows.

Ainda na aba “General” é possível iniciar, parar ou pausar um windows service em execução.


Figura 2. Propriedades gerais de um windows service

Na Figura 3, vemos a aba “Log on”. Ela permite configurar sob qual conta (usuário) que o serviço será executado. Isso é importante para trabalharmos com mais segurança. Por exemplo, imagine que um serviço precise ler e gravar arquivos em uma pasta na rede. Podemos dar permissão de leitura e escrita para uma conta no domínio e configurá-la, passando seu login e senha, para que seja executada junto do windows service. Se não fosse isso, teríamos que dar permissão de leitura e escrita para todos os usuários da rede (Everyone), o que não é recomendado, pois qualquer pessoa mal intencionada poderia ir nesta pasta e modificar, ou mesmo apagar, arquivos importantes.


Figura 3. Propriedades de logon de um windows service

Prosseguindo, temos a aba “Recovery” na Figura 4. Ela permite configurar uma série de opções que tratam de erros na execução do windows service. Caso haja algum erro no processamento do serviço podemos escolher para que o windows service seja iniciado novamente (Restart the service); que a máquina seja reiniciada (Restart the computer); que um programa seja executado (Run a program) para que, por exemplo, um e-mail de alerta seja enviado para o administrador do ambiente; ou mesmo que não seja tomada nenhuma ação.


Figura 4. Propriedades de recuperação de um windows service

Finalizando, temos a aba “Dependencies” (Figura 5) que mostra quais são os outros windows services que dependem ou que são dependência para o serviço cujas propriedades estamos visualizando. No nosso exemplo, o serviço do SQL Server Express depende do SQL Server Agent, ou seja, se este último não estiver disponível não poderemos utilizar o banco de dados.


Figura 5. Dependências de um windows service

...
Quer ler esse conteúdo completo? Tenha acesso completo