Windows Vista

Novas ferramentas para gerenciamento de eventos no Windows Vista

Val Menn

 

Visão geral:

  • Nova infra-estrutura de eventos
  • Tipos de evento
  • Propriedades de eventos estruturados
  • Usando expressões XPath

Muitas pessoas dizem que log e rastreamento de eventos são sem graça. Outros se queixam que, na maioria das vezes, os rastreamentos e eventos são, meramente, derivados de atividades secundárias (como recursos de depuração e auto-monitoramento) e que se dá pouca importância às capacidades de rastreamento e registro de eventos.

O Microsoft® Windows Vista™ visa mudar essas percepções, oferecendo um gigantesco passo à frente no gerenciamento empresarial. A Microsoft aperfeiçoou alguns dos principais componentes e suas interfaces de usuário. O serviço de log de eventos foi completamente reescrito tendo a empresa em mente e o rastreamento se tornou muito mais rápido e seguro.

Imagine dispor de um conjunto de ferramentas melhor para descobrir e resolver problemas com sistemas de missão crítica. Ou, então, recursos que permitem a um técnico de suporte coletar com facilidade, no sistema de um usuário, os eventos e rastreamentos relatados? E se seus desenvolvedores pudessem diagnosticar e corrigir bugs em um sistema implantado usando rastreamentos enviados imediatamente pelos usuários? Imagine se você tivesse meios mais fáceis e poderosos de reunir informações e resolver os problemas rapidamente; isso não parece nada sem graça, parece?

O que são eventos?

Um aplicativo computacional é como uma "caixa preta" que executa uma função (ou funções). Muita coisa acontece dentro dessa caixa; porém, como não se pode olhar dentro dela, é muito difícil entender seus funcionamentos internos. Todavia, os aplicativos se comunicam externamente — com outros programas e com usuários. Esses "eventos" de comunicação representam olhadas rápidas dentro do aplicativo.

No universo do software, um evento é, normalmente, definido como uma ocorrência dentro de um sistema de software que é comunicado com o exterior (o exterior é representado por usuários ou outros programas). Tal ocorrência corresponde, normalmente, a uma alteração de estado ou a configuração. Ela pode comunicar o estado ou configuração atual do sistema de software e os motivos da alteração.

Mais livremente, o termo evento também é utilizado para se referir à maneira com que essas ocorrências são expostas. Há muitos exemplos desses eventos expostos:

  • Um objeto Win32® utilizado para comunicação entre processos (IPC)
  • Um evento WMI utilizado para notificações transitórias (não persistentes)
  • Um Rastreamento de Evento do Windows (ETW) salvo em arquivos de rastreamento
  • Um log de eventos salvo nos logs dinâmicos e, possivelmente, arquivado em arquivos de log de eventos
  • Um evento salvo em arquivos usando infra-estrutura personalizada

Os últimos três exemplos listados acima são da espécie que examinaremos neste artigo.

Como os eventos são usados

Um rastreamento, ou evento em log, é o registro de uma ocorrência em um programa ou sistema operacional. Esses rastreamentos e logs de eventos não se destinam apenas a desenvolvedores. Eles oferecem ferramentas indispensáveis para as pessoas de TI e de suporte, proporcionando uma rápida visualização do estado e dos funcionamentos internos dos aplicativos em execução.

Você pode usar tais logs para monitorar a integridade do sistema global. Usando o log de eventos, é possível pesquisar quaisquer eventos indicadores de problemas. Por exemplo, você pode encontrar um evento de erro 6 no log do aplicativo originado de CertificateServicesClient, com a seguinte mensagem: "Falha na inscrição automática de certificado para o sistema local(0x80070576). Há uma diferença de hora e/ou data entre cliente e servidor". Da mesma forma, você pode detectar a transição de componentes em estado problemático de volta para operação normal. Por exemplo, corrigida a diferença de hora e data, a mesma origem de CertificateServiceClient poderia publicar o evento informativo 19 no log do Aplicativo, indicando: "Inscrição de certificado para <nome do usuário> recebeu com sucesso um certificado AutoenrolledWindowsSystemComponentVerification da autoridade de certificação <nome da autoridade>". Tal informação é extremamente valiosa para localização e resolução de conflitos e outros problemas de configuração.

Essa informação também é útil para problemas de diagnóstico. É possível localizar ações de programas ou do sistema que levam a um problema e descobrir detalhes que podem ajudá-lo a determinar a raiz do problema. De maneira semelhante, essas informações podem ser usadas na avaliação e resolução de problemas de desempenho.

Além disso, os logs de eventos oferecem informações valiosas que podem ser usadas para assegurar um ambiente mais seguro. Eles podem ser usados para detectar tentativas de invasão, auditar o histórico do sistema, assegurar não-repúdio e localizar recursos configurados incorretamente.

Eventos no Windows Vista

As versões anteriores do Windows® apresentaram muitas limitações no que dizia respeito a log e rastreamento de eventos. Dentre elas, podemos citar escalabilidade limitada do log de eventos (que limitava o tamanho total de todos os logs à quantidade de memória disponível), o desempenho da publicação de eventos (que, por exemplo, limitava o número de eventos que podiam ser publicados em um Controlador de Domínio ativo) e segurança limitada dos eventos de rastreamento.

O Windows Vista cuida de vários desses problemas com uma nova infra-estrutura para log e rastreamento de eventos denominada Windows Eventing 6.0. Ela se estende sobre o ETW, que esteve em uso a partir do Windows 2000 e substitui o serviço de log de eventos e o Visualizar Eventos. O novo Windows Eventing foi criado para lidar especificamente com eventos que persistem em arquivos de log para futuro exame. (Ele não se destina a eventos transitórios, como IPC e mecanismos de notificação.)

Por fornecer soluções de segurança e escalabilidade, as implementações personalizadas de log e rastreamento de eventos devem perder importância. Observe que são oferecidos aprimoramentos preservando, entretanto, a total compatibilidade com o log de eventos e as APIs ETW existentes, o que significa que todos os aplicativos existentes continuarão a funcionar, sem nenhuma alteração.

Novas formas de Visualizar Eventos

O programa Visualizar Eventos existente já é um dos mais populares do Windows na comunidade de TI. O novo Visualizar Eventos foi completamente reescrito e, uma vez que reside no MMC (Console de Gerenciamento Microsoft) 3.0, sua aparência também mudou, embora ainda seja familiar o bastante para que a transição seja razoavelmente fácil.

Ainda há um painel em árvore e uma lista de eventos. Ainda é possível acessar os logs Aplicativo, Sistema e Segurança já familiares, sob o nó Logs do Windows. No entanto, alguns novos nós foram adicionados à raiz e o novo log ForwardedEvents, que discutirei logo adiante, foi adicionado ao nó Logs do Windows.

O novo recurso mais óbvio é o painel de visualização, localizado abaixo da lista de eventos. Ele contém as propriedades do evento focalizado. Isso significa que não é mais necessário clicar duas vezes em um evento para visualizar suas propriedades, nem fazer malabarismos com janelas para visualizar seja a lista, seja a caixa de diálogo Propriedades do Evento. Ainda é possível exibir propriedades na caixa de diálogo clicando duas vezes em um evento. Porém, a nova caixa de diálogo não é modal, de modo que é possível exibir várias caixas de diálogo de propriedades de evento ao mesmo tempo.

As novas exibições lhe permitem visualizar todos os eventos de interesse com uns poucos cliques do mouse. Os eventos podem ser coletados para um ou mais arquivos de log e podem focar IDs, níveis (severidade) ou limite de tempo específicos.

Observe que, no nó Exibições Personalizadas você encontrará Eventos Administrativos (mostrados na Figura 1). Eles fornecem uma lista de todos os erros e avisos oriundos de diversos arquivos de log que são de interesse dos administradores.

Figura 1 Eventos administrativos

Figura 1** Eventos administrativos **(Clique na imagem para aumentar a exibição)

Então, como, exatamente, determinamos quais logs e eventos são de interesse dos administradores? Identificamos cinco tipos de evento separados e os usuários relacionados a cada um deles. Isso é detalhado na Figura 2. Trata-se de uma divisão bastante genérica, embora eficaz, de todos os logs de eventos e eventos de rastreamento que podem ser do interesse de diversos grupos.

Figure 2 Tipos de evento e seus usuários

Tipo de Evento Descrição Usado Por
Admin O tipo Admin bastará para a maioria dos administradores de sistemas. Esses eventos são de nível muito alto e, com freqüência, fornecem informações suficientes para identificar um problema e determinar sua solução. Na pior das hipóteses, os eventos Admin devem identificar quando um problema ocorre ou indicar quando um aplicativo, um componente ou o sistema como um todo está em recuperação ou foi recuperado de um estado problemático. A maioria dos eventos Admin é de erros ou avisos e, normalmente, permite ação. Administradores, equipe de suporte e programas de monitoramento e análise
Operacional Como os eventos Admin, os eventos Operacionais permitem o diagnóstico dos problemas. Os eventos Operacionais consistem em mais do que apenas erros e avisos. Eles também informam os usuários a respeito de operação normal de um aplicativo ou componente do OS. O volume desses eventos é mantido bastante baixo, de modo que os eventos Operacionais podem ser ativados sem que o desempenho do sistema seja afetado. Os eventos Operacionais — junto com os eventos Admin — são usados por equipes de suporte, utilitários de monitoramento e alguns administradores sofisticados. Administradores avançados, equipe de suporte e programas de monitoramento e análise
Auditoria Os eventos de Auditoria fornecem um registro histórico de qualquer acesso a recurso ou ação tomada pelos usuários. Esses eventos não representam, neles mesmos, falha ou êxito do programa, mas indicam falha ou êxito da ação. Os eventos de auditoria podem ser totalmente desativados ou ativados seletivamente, com níveis variáveis de granularidade. A auditoria de segurança no nível de OS é suportada (os eventos podem ser encontrados no log Segurança do Log de Eventos). Administradores avançados, auditores de segurança e especialistas forenses
Analítico Os eventos analíticos, que não diferem muito dos eventos operacionais, são registrados em log durante a operação normal de aplicativos e componentes. Mas o volume e os detalhes dos eventos analíticos são muito maiores do que nos eventos operacionais e, portanto, existe um potencial de terem um efeito negativo sobre o desempenho do sistema. Por isso, os eventos analíticos encontram-se, normalmente, desativados. Para utilizar os eventos analíticos, ative-os antes de uma sessão de diagnóstico, mas desative-os antes de examinar o rastreamento. Equipe de suporte, programas de monitoramento e análise
Depuração Os eventos de depuração também são de volume alto e, normalmente, se encontram desativados. Eles são usados, principalmente, por desenvolvedores e raramente são visualizados por profissionais de TI. Desenvolvedores

Cada log no Windows Eventing tem um tipo designado. Todos os eventos em um log são do mesmo tipo. A exibição na Figura 1 foi definida por meio dessa informação de tipo — ela traz todos os eventos de erro e aviso dos logs de tipo Admin (administrativo).

A arquitetura do Windows Eventing

A infra-estrutura do Windows Eventing consiste em componentes de software que permitem que os objetos de eventos sejam publicados por programas e entregues em arquivos de log. A ETW fornece o transporte usado para transferir todos os tipos de evento de seus editores até seus destinos. A ETW também foi aperfeiçoada no Windows Vista e, agora, proporciona um melhor desempenho e uma segurança aprimorada. A publicação de eventos via ETW é assíncrona e, portanto, não afeta o desempenho do programa de publicação. Quando um novo evento é recebido pelo sistema, as informações sobre o contexto do usuário atual e o processo de publicação são coletadas e anexadas ao evento.

Publicados os eventos, os vários tipos são manipulados de maneiras diferentes. Como os eventos tipo Analítico e Depuração, normalmente, possuem um volume alto, eles precisam ser salvos em um arquivo com o mínimo de processamento, para evitar que o desempenho do sistema seja afetado. Assim, esses eventos são imediatamente salvos em um arquivo de rastreamento.

Os eventos do tipo Admin e Operacional são tão pouco freqüentes que permitem processamento adicional sem que o desempenho do sistema seja afetado. Esses eventos são entregues ao serviço de log de eventos, que os salva em logs de eventos dinâmicos e pode, opcionalmente, entregá-los a assinantes em tempo real. Os assinantes podem selecionar eventos para lhe serem entregues através de uma linguagem de consulta que discutirei adiante.

Há dois assinantes, em particular, que são de especial interesse para a comunidade de TI. Trata-se do Agendador de Tarefas, que foi grandemente aprimorado no Windows Vista, e do encaminhador de eventos, que pode ser usado para enviar eventos a um coletor remoto.

Examinando eventos estruturados

Uma queixa comum sobre logs de eventos é que eles contêm muito lixo. Isto é, eles misturam eventos que têm pouca ou nenhuma significância, que tendem a ofuscar ou ocultar os eventos importantes. Embora alguns eventos realmente forneçam pouca informação, o que parece lixo para um usuário, muitas vezes, é um tesouro para outro.

O Windows Vista dispõe de um modo de filtrar eventos sem interesse, permitindo que você se concentre nos eventos que lhe importam. Isso depende de uma linguagem de consulta de log cruzado, cujo suporte é fornecido pelo serviço de log de eventos. Para tanto, todos os eventos devem seguir uma estrutura bem definida.

As versões anteriores do log de eventos forneciam alguma estrutura para eventos, mas ela não era bem definida e ficava visível apenas para a API Win32. No Windows Vista, os eventos têm uma estrutura bem definida. Na verdade, os eventos são representados externamente usando XML com um esquema publicado. Isso possibilita a criação de consultas que coletam os eventos de seu interesse e, ao mesmo tempo, filtram de lado os eventos irrelevantes. Como se utiliza XML, o XPath foi escolhido como base para a linguagem de consulta de eventos. Obviamente, o uso de eventos estruturados abre novas portas para a automação, como pode ser visto na nova integração do Agendador de Tarefas.

O painel de visualização de eventos agora contém uma guia Detalhes. A mesma guia encontra-se disponível na caixa de diálogo Propriedades do Evento. Selecionar a guia Detalhes na caixa de diálogo Propriedades do Evento fará com que a representação XML do evento seja revelada. O exemplo mostrado na Figura 3 é um evento Operacional do Agendador de Tarefas. Ele contém duas partes. A seção System consiste nas informações gerais comuns a todas as instâncias desse evento, bem como alguns parâmetros de sistema, coletados na publicação da instância. A seção EventData, que é extensível, contém informações estruturadas do aplicativo.

Figura 3 Representação XML de um evento

Figura 3** Representação XML de um evento **(Clique na imagem para aumentar a exibição)

Cada arquivo de log de evento é tratado como uma seqüência de tais elementos de eventos estruturados. Isso representa uma visualização lógica e legível do log de eventos e de seus arquivos mortos. Internamente, os eventos são salvos em um formato binário, criado para fornecer um equilíbrio entre compactação, confiabilidade e desempenho de busca.

Atributos de eventos

A seção System dos dados XML fornece a hora em que o evento ocorreu, o ID do processo, o ID do thread, o nome do computador e o Identificador de Segurança (SID) do usuário. Nas versões anteriores do Windows, os eventos tinham apenas dois atributos — EventID e Category. O XML dá, ainda, outros detalhes, inclusive as propriedades EventID, Level, Task, Opcode e Keywords. Vamos examiná-los mais de perto.

EventID e Version Um evento é identificado exclusivamente pela combinação de seu ID Evento (um número de byte 2) e sua Versão (um número de byte 1). Todos os eventos oriundos do mesmo provedor que compartilhem a mesma propriedade EventID e Version tem uma estrutura idêntica.

Level Este valor representa a severidade ou o detalhamento de um evento. Valores predefinidos de 1 (Crítico), 2 (Erro), 3 (Aviso), 4 (Informação) e 5 (Detalhado) são de uso comum, mas um provedor pode definir seus próprios valores até um valor máximo de 255. Números maiores correspondem a eventos mais detalhados.

Task A propriedade Task identifica, normalmente, uma área geral da funcionalidade do provedor do evento (como impressão, sistema de rede ou interface de usuário). Ela também pode se referir ao subcomponente de um programa. Security Eventos de auditoria usam bastante esta propriedade. Cada editor de eventos pode definir seu próprio conjunto de valores para esse número de byte 2. Observe que o significado do atributo Task tem, com freqüência, correspondência semântica e é um superconjunto do atributo Category nas versões anteriores do Windows. Por esse motivo, o Visualizar Eventos exibe esse valor em uma coluna chamada Categoria de Tarefa.

Opcode É um valor de byte 1 utilizado, normalmente, para representar uma ação específica ou uma parte de uma ação realizada pelo software. Esse valor é, muitas vezes, usado no rastreamento de processos baseados em atividade (como serviços da Web nos quais a atividade é uma solicitação específica recebida pelo serviço da Web). Existem alguns valores predefinidos, dos quais os mais comuns são 1 (Iniciar) e 2 (Parar).

Keywords Trata-se de uma máscara com 56 sinalizadores que podem ser definidos pelo programa para habilitar agrupamento fácil de eventos similares. Cada evento pode ter mais de um conjunto de sinalizadores, indicando que o evento pertence a vários grupos.

Compreendendo editores e eventos

É difícil ser pró-ativo quando não conhecemos antecipadamente todos os tipos de informação que podem, possivelmente, ser encontrados nos logs de eventos e nos arquivos de rastreamento. Portanto, uma de nossas principais metas para a nova infra-estrutura de eventos foi fornecer documentação para cada editor de eventos, inclusive informações sobre o conjunto de eventos e seus destinos.

Para tanto, cada editor deve enumerar todos os eventos que sempre publicará junto com a estrutura deles. Essas informações são compiladas, codificadas e salvas com o binário (um programa ou uma DLL) do editor.

É possível, agora, descobrir todos os editores que estão registrados com o sistema de eventos, bem como a configuração de cada um deles. Isso compreende visualizar uma lista completa de todos os potenciais eventos que um editor pode registrar em log, as estruturas desses eventos e as mensagens associadas a eles — antes mesmo dos eventos serem lançados. A Figura 4 mostra como um utilitário de linha de comando, wevtutil, pode ser usado para exibir a configuração dos provedores. O comando mostrado exibe todas as informações conhecidas pelo sistema sobre o editor de eventos denominado Microsoft-Windows-Video For Windows.

Figura 4 Uso de wevtutil para exibir configuração de provedor

Figura 4** Uso de wevtutil para exibir configuração de provedor **(Clique na imagem para aumentar a exibição)

Como funciona a linguagem de consulta

Como mencionado anteriormente, a natureza estruturada dos eventos na nova infra-estrutura nos permitiu incluir suporte a uma linguagem de consulta, que se baseia em expressões XPath padrão. Falando genericamente, uma vez dado um local de partida (um elemento XML), uma expressão XML pode consultar qualquer lugar dentro do elemento. (Para obter uma descrição completa da linguagem XPath, consulte a referência oficial em w3.org/TR/xpath). Mais freqüentemente, uma expressão XPath consulta um outro elemento ou atributo contido dentro do elemento de partida. Como o log de eventos é, essencialmente, uma seqüência de elementos de eventos, podemos supor que cada log se assemelhe a:

<root>
<Event>... </Event>
...
<Event>... </Event>
</root>

O elemento raiz não tem um nome; ele é usado, simplesmente, como contexto para todas as expressões XPath. Somente eixos para frente estão definidos, o que significa que uma expressão XPath pode fazer referência a elementos de evento, seus sub-elementos e seus atributos. E se uma expressão XPath selecionar um elemento existente, ela o avaliará como verdadeiro. Considere uma expressão XPath muito simples, baseada no evento mostrado na Figura 3:

*/System[Provider/@Name='Microsoft-Windows-TaskScheduler' and Level <= 2]

Essa expressão seleciona todos os elementos do evento ("todos" é representado pelo asterisco) do provedor Microsoft-Windows-TaskScheduler com nível 2 ou inferior (o que significa todos os eventos de erro e críticos).

Embora possa ser usada uma expressão XPath simples para selecionar eventos a partir de um único log, uma linguagem de consulta baseada em XML simples, porém potente, permite seleção e supressão de eventos de qualquer log ou arquivo de eventos externo. Na verdade, a linguagem de consulta é penetrante nos eventos do Windows Vista. Exibições Personalizadas, por exemplo, se baseiam em consultas. E você pode usar a linguagem de consulta para especificar quais eventos, dentre logs específicos, devem ser mostrados no painel de lista de eventos do Visualizar Eventos. A linguagem pode ser usada para assinar eventos, arquivar eventos selecionados e disparar ações no novo Agendador de Tarefas.

Devem ser fornecidas expressões XML ou XPath de consulta real ao utilitário de linha de comando Log de Eventos. A definição de tais consultas não é para qualquer um; por isso, o Visualizar Eventos fornece uma interface de usuário simples para a criação de consultas comuns. A caixa de diálogo Create Custom View (Criar Exibição Personalizada), mostrada na Figura 5, por exemplo, pode ser usada para criar uma exibição de todos os eventos do Agendador de Tarefas. Observe que cada caixa de diálogo de criação de consultas tem uma guia intitulada XML, que exibe o texto da consulta e lhe permite editá-la diretamente.

Figura 5 IU para criar consultas comuns

Figura 5** IU para criar consultas comuns **(Clique na imagem para aumentar a exibição)

Usos comuns de consultas

As consultas podem ser usadas de inúmeras formas. Porém, algumas utilizações são, naturalmente, mais comuns do que outras. Por exemplo, freqüentemente se usa consulta para exibir eventos selecionados no Visualizar Eventos ou, até mesmo, no utilitário de linha de comando Log de Eventos.

Você pode anexar uma tarefa a uma consulta usando o Agendador de Tarefas do Windows. Sempre que for publicado um evento correspondente à consulta, o Agendador de Tarefas iniciará a tarefa designada. Note que este recurso usa assinaturas e reage de imediato a qualquer evento que aconteça. É possível assinar somente eventos de tipo Admin ou Operacional; eventos do tipo Depuração ou Analítico são gravados diretamente nos arquivos de rastreamento, de modo que o sistema não pode examiná-los no momento em que ocorrem.

Pode-se usar consultas para arquivar eventos selecionados. Pode-se selecionar eventos a partir de logs dinâmicos de qualquer tipo, de arquivos de eventos de nível baixo (arquivos EVT), de arquivos de rastreamento externos ou de arquivos mortos de eventos do Windows Vista. Um arquivo morto pode ser aberto no Visualizar Eventos, receber backup para armazenamento secundário ou ser enviado a alguém da equipe de suporte que ajude a diagnosticar o problema. Todas as descrições de eventos e outras cadeias de caracteres associadas a eventos podem ser anexadas ao arquivo na linguagem selecionada durante a operação de arquivamento. Se isso for feito, os eventos ficarão disponíveis com a descrição total na linguagem de preferência de qualquer máquina.

Finalmente, as consultas podem ser usadas para encaminhar eventos para um sistema que se dedique a coletá-los. Esse recurso usa o novo serviço Coletor de Eventos, que permite a um administrador criar assinaturas de eventos para computadores remotos. Essas assinaturas são persistidas na máquina coletora e podem ser repetidas por meio de uma programação configurável. O coletor de eventos usa o protocolo WS-Management padrão do mercado para criar assinaturas nos computadores remotos e o protocolo WS-Eventing para transferir os eventos. (Ambos os protocolos são seguros e amigáveis a firewalls.) Os eventos recebidos pelo Coletor de Eventos são salvos no Log de Eventos local.

Conclusão

As alterações no Windows Eventing são expressivas e de longo alcance; este artigo as aborda apenas de leve. O recurso de encaminhamento de eventos, sozinho, poderia ocupar todo este artigo.

O sistema de eventos pode se orgulhar de seus aprimoramentos em desempenho, escalabilidade, confiabilidade e segurança. Mas não se pode esquecer que a meta principal era melhorar a flexibilidade de gerenciamento do Windows. A linguagem de consulta, juntamente com as exibições do Visualizar Eventos, permite que você descubra problemas com mais facilidade. A estreita integração com o Agendador de Tarefas abre caminho para o desenvolvimento de um monitoramento simples, resolução automática de problemas e rápida notificação de problemas. Além disso, o encaminhamento de eventos permite o arquivamento de eventos e o monitoramento sem agentes de servidores e desktops.

Todos esses recursos são implementados sem sacrificar a compatibilidade retroativa, o que significa que as soluções existentes continuarão a funcionar. Por fim, os aprimoramentos nos eventos devem ajudar as organizações a gerenciar seus sistemas de maneira mais eficaz.

Val Menn está no grupo de infra-estrutura de gerenciamento da Microsoft, onde é gerente de programas do log de eventos. Antes disso, trabalhou como engenheiro de software e administrador de sistemas em uma série de empresas emergentes.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..