Sobre o Rastreamento de Eventos

O ETW (Rastreamento de Eventos para Windows) é um recurso eficiente de rastreamento no nível do kernel que permite registrar eventos definidos pelo aplicativo ou kernel em um arquivo de log. Você pode consumir os eventos em tempo real ou de um arquivo de log e usá-los para depurar um aplicativo ou para determinar onde os problemas de desempenho estão ocorrendo no aplicativo.

O ETW permite habilitar ou desabilitar o rastreamento de eventos dinamicamente, permitindo que você execute rastreamento detalhado em um ambiente de produção sem a necessidade de reinicializações de computador ou aplicativo.

A API de Rastreamento de Eventos é dividida em três componentes distintos:

  • Controladores, que iniciam e interrompem uma sessão de rastreamento de eventos e habilitam provedores
  • Provedores, que fornecem os eventos
  • Consumidores, que consomem os eventos

O diagrama a seguir mostra o modelo de rastreamento de eventos.

modelo de rastreamento de eventos

Controladores

Os controladores são aplicativos que definem o tamanho e o local do arquivo de log, iniciam e param sessões de rastreamento de eventos, permitem que os provedores possam registrar eventos na sessão, gerenciar o tamanho do pool de buffers e obter estatísticas de execução para sessões. As estatísticas de sessão incluem o número de buffers usados, o número de buffers entregues e o número de eventos e buffers perdidos.

Para obter mais informações, consulte Controlando sessões de rastreamento de eventos.

Provedores

Provedores são aplicativos que contêm instrumentação de rastreamento de eventos. Depois que um provedor se registra, um controlador pode habilitar ou desabilitar o rastreamento de eventos no provedor. O provedor define sua interpretação de estar habilitado ou desabilitado. Geralmente, um provedor habilitado gera eventos, enquanto um provedor desabilitado não. Isso permite adicionar o rastreamento de eventos ao seu aplicativo sem exigir que ele gere eventos o tempo todo.

Embora o modelo ETW separe o controlador e o provedor em aplicativos separados, um aplicativo pode incluir ambos os componentes.

Para obter mais informações, consulte Fornecendo eventos.

Tipos de provedores

Há quatro tipos main de provedores: provedores MOF (clássicos), provedores WPP, provedores baseados em manifesto e provedores tracelogging. Você deve usar um provedor baseado em manifesto ou um provedor tracelogging se estiver escrevendo aplicativos para o Windows Vista ou posteriores que não precisem dar suporte a sistemas herdados.

Provedores MOF (clássicos):

  • Use as funções RegisterTraceGuids e TraceEvent para registrar e gravar eventos.
  • Use classes MOF para definir eventos para que os consumidores saibam como consumi-los.
  • Pode ser habilitado por apenas uma sessão de rastreamento por vez.

Provedores WPP:

  • Use as funções RegisterTraceGuids e TraceEvent para registrar e gravar eventos.
  • Os arquivos TMF associados (compilados em .pdb de um binário) que contêm informações de decodificação inferidas da verificação do pré-processador de instrumentação WPP no código-fonte.
  • Pode ser habilitado por apenas uma sessão de rastreamento por vez.

Provedores baseados em manifesto:

  • Use EventRegister e EventWrite para registrar e gravar eventos.
  • Use um manifesto para definir eventos para que os consumidores saibam como consumi-los.
  • Pode ser habilitado por até oito sessões de rastreamento simultaneamente.

Provedores de log de rastreamento:

  • Use TraceLoggingRegister e TraceLoggingWrite para registrar e gravar eventos.
  • Use eventos autodescrevendo para que os eventos em si contenham todas as informações necessárias para consumi-los.
  • Pode ser habilitado por até oito sessões de rastreamento simultaneamente.

Todos os provedores de eventos usam fundamentalmente a família de APIs do Rastreamento de Eventos (TraceEvent para tecnologias herdadas e EventWrite/EventWriteEx para as mais recentes). Os provedores de eventos simplesmente diferem em quais tipos de campo armazenam em cargas de eventos e onde armazenam as informações de decodificação de eventos associadas.

Consumidores

Os consumidores são aplicativos que selecionam uma ou mais sessões de rastreamento de eventos como fonte de eventos. Um consumidor pode solicitar eventos de várias sessões de rastreamento de eventos simultaneamente; o sistema fornece os eventos em ordem cronológica. Os consumidores podem receber eventos armazenados em arquivos de log ou de sessões que entregam eventos em tempo real. Ao processar eventos, um consumidor pode especificar horários de início e de término, e somente eventos que ocorrem no período especificado serão entregues.

Para obter mais informações, consulte Consumindo eventos.

Eventos ausentes

O Perfmon, o Diagnóstico do Sistema e outras ferramentas do sistema podem relatar eventos ausentes no Log de Eventos e indicar que as configurações do ETW (Rastreamento de Eventos para Windows) podem não ser ideais. Os eventos podem ser perdidos por vários motivos:

  • O tamanho total do evento é maior que 64K. Isso inclui o cabeçalho ETW mais os dados ou a carga. Um usuário não tem controle sobre esses eventos ausentes, pois o tamanho do evento é configurado pelo aplicativo.

  • O tamanho do buffer ETW é menor que o tamanho total do evento. Um usuário não tem controle sobre esses eventos ausentes, pois o tamanho do evento é configurado pelo aplicativo que registra os eventos.

  • Para registro em log em tempo real, o consumidor em tempo real não está consumindo eventos rápidos o suficiente ou não está presente completamente e, em seguida, o arquivo de backup está preenchendo. Isso poderá resultar se o serviço de Log de Eventos for interrompido e iniciado quando os eventos estiverem sendo registrados. Um usuário não tem controle sobre esses eventos ausentes.

  • Ao fazer logon em um arquivo, o disco é muito lento para acompanhar a taxa de registro em log.

Por qualquer um desses motivos, relate esses problemas ao provedor do aplicativo ou serviço que está gerando os eventos. Esses problemas só podem ser corrigidos pelo desenvolvedor do aplicativo ou pelo serviço que está registrando os eventos. Se os eventos ausentes estiverem sendo relatados no Serviço de Log de Eventos, isso poderá indicar um problema com a configuração do serviço de Log de Eventos. O usuário pode ter alguma capacidade limitada de aumentar o espaço máximo em disco a ser usado pelo Serviço de Log de Eventos, o que pode reduzir o número de eventos ausentes.