Partilhar via


Rastreando participantes

O acompanhamento de participantes é um ponto de extensibilidade que permite a um desenvolvedor de fluxo de trabalho acessar TrackingRecord objetos e processá-los. O .NET Framework 4.6.1 inclui um participante de monitorização padrão que grava registos de monitorização como eventos ETW (Event Tracing for Windows). Caso isso não atenda aos seus requisitos, pode-se também criar um participante de rastreamento personalizado.

Rastreando participantes

A infraestrutura de rastreamento permite a aplicação de um filtro nos registros de rastreamento de saída, de modo que um participante possa se inscrever em um subconjunto dos registros. O mecanismo para aplicar um filtro é através de um perfil de rastreamento.

O Windows Workflow Foundation (WF) do .NET Framework 4.6.1 fornece um participante de rastreio que grava os registros de rastreio em uma sessão ETW. O participante é configurado em um serviço de fluxo de trabalho adicionando um comportamento específico de rastreamento em um arquivo de configuração. Habilitar um participante de rastreamento ETW permite que os registros de rastreamento sejam visualizados no visualizador de eventos. O exemplo SDK para rastreamento baseado em ETW é uma boa maneira de se familiarizar com o rastreamento WF usando o participante de rastreamento baseado em ETW.

Participante de rastreamento ETW

O .NET Framework 4.6.1 inclui um Participante de Rastreamento ETW que grava os registros de rastreamento em uma sessão ETW. Isso é feito de maneira muito eficiente com impacto mínimo no desempenho do aplicativo ou na taxa de transferência do servidor. Uma vantagem de usar o participante de rastreamento ETW padrão é que os registros de rastreamento que ele recebe podem ser exibidos com os outros logs do aplicativo e do sistema no Visualizador de Eventos do Windows.

O participante de rastreamento ETW padrão é configurado no arquivo Web.config, conforme mostrado no exemplo a seguir.

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <etwTracking profileName="Sample Tracking Profile"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
   <tracking>
      <profiles>
        <trackingProfile name="Sample Tracking Profile">
        ….
       </trackingProfile>
      </profiles>
    </tracking>
  </system.serviceModel>
</configuration>

Observação

Se um trackingProfile nome não for especificado, como apenas <etwTracking/> ou <etwTracking profileName=""/>, o perfil de controle padrão instalado com o .NET Framework 4.6.1 no arquivo Machine.config será usado.

No arquivo Machine.config, o perfil padrão de acompanhamento subscreve os registos e as falhas de instâncias do fluxo de trabalho.

No ETW, os eventos são gravados na sessão do ETW por meio de um ID de provedor. O ID do provedor que o participante de rastreio do ETW usa para gravar os registos de rastreio no ETW é definido na secção de diagnóstico do ficheiro Web.config (em <system.serviceModel><diagnostics>). Por padrão, o participante de rastreamento do ETW usa um ID de provedor padrão quando um não foi especificado, conforme mostrado no exemplo a seguir.

<system.serviceModel>
        <diagnostics etwProviderId="52A3165D-4AD9-405C-B1E8-7D9A257EAC9F" />

A ilustração a seguir mostra o fluxo de dados de rastreamento através do participante de rastreamento ETW. Uma vez que os dados de rastreamento chegam à sessão ETW, eles podem ser acessados de várias maneiras. Uma das maneiras mais úteis de acessar esses eventos é por meio do Visualizador de Eventos, uma ferramenta comum do Windows usada para exibir logs e rastreamentos de aplicativos e serviços.

Fluxo de dados de rastreamento através do provedor de rastreamento ETW.

Rastreando dados de eventos de participantes

Um participante de rastreamento serializa dados de eventos rastreados para uma sessão ETW no formato de um evento por registro de rastreamento. Um evento é identificado usando um ID dentro do intervalo de 100 a 199. Para obter definições dos registros de eventos de rastreamento emitidos por um participante de rastreamento, consulte o tópico Referência de eventos de rastreamento .

O tamanho de um evento ETW é limitado pelo tamanho do buffer ETW ou pela carga útil máxima para um evento ETW, o valor que for menor. Se o tamanho do evento exceder qualquer um desses limites do ETW, o evento será truncado e seu conteúdo removido de forma arbitrária. Variáveis, argumentos, anotações e dados personalizados não são removidos seletivamente. No caso de truncamento, todos eles são truncados independentemente do valor que fez com que o tamanho do evento excedesse o limite do ETW. Os dados removidos são substituídos por <item>..<item>.

Tipos complexos em variáveis, argumentos e itens de dados personalizados são serializados para o registro de evento ETW usando a NetDataContractSerializer classe. Essa classe inclui informações de tipo CLR no fluxo XML serializado.

O truncamento de dados de carga útil devido aos limites do ETW pode resultar no envio de registros de rastreamento duplicados para uma sessão do ETW. Isso pode ocorrer se mais de uma sessão estiver escutando os eventos e as sessões tiverem limites de carga diferentes para os eventos.

Para a sessão com o limite inferior, o evento pode ser truncado. O participante de rastreamento do ETW não tem conhecimento do número de sessões ouvindo os eventos; se um evento for truncado para uma sessão, o participante do ETW tentará enviar o evento novamente uma vez. Nesse caso, a sessão configurada para aceitar um tamanho de carga maior receberá o evento duas vezes (o evento não truncado e o evento truncado). A duplicação pode ser evitada configurando todas as sessões ETW com os mesmos limites de tamanho de buffer.

Acessando dados de rastreamento de um participante do ETW no Visualizador de eventos

Os eventos que são gravados em uma sessão ETW pelo participante de rastreamento ETW podem ser acessados por meio do Visualizador de Eventos (ao usar a ID do provedor padrão). Isso permite a visualização rápida dos registros de rastreamento que foram emitidos pelo fluxo de trabalho.

Observação

O rastreamento de eventos de registo emitidos para uma sessão ETW utiliza IDs de evento ao intervalo de 100 a 199.

Para habilitar a exibição dos Registros de Rastreamento no Visualizador de Eventos

  1. Iniciar o Visualizador de Eventos (EVENTVWR.EXE)

  2. Selecione Visualizador de Eventos, Registos de Aplicações e Serviços, Microsoft, Windows, Servidor de Aplicações-Aplicações.

  3. Clique com o botão direito do mouse e verifique se Exibir logs analíticos e de depuração está selecionado. Caso contrário, selecione-a para que a marca de seleção apareça ao lado dela. Este apresenta os logs Analítico, Desempenho e Depuração.

  4. Clique com o botão direito do rato no registo analítico e, em seguida, selecione Ativar registo. O log existirá no arquivo .etl %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-Application Server-Applications%4Analytic.

Participante de Acompanhamento Personalizado

A API do participante de rastreamento permite a extensão do tempo de execução do rastreamento com um participante de rastreamento fornecido pelo usuário que pode incluir lógica personalizada para lidar com registros de rastreamento emitidos pelo tempo de execução do fluxo de trabalho. Para escrever um participante de acompanhamento personalizado, o desenvolvedor deve implementar o método Track na classe TrackingParticipant. Este método é chamado quando um registo de acompanhamento é emitido pelo tempo de execução do fluxo de trabalho.

O acompanhamento dos participantes deriva da TrackingParticipant aula. O sistema EtwTrackingParticipant fornecido emite um evento ETW (Event Tracking for Windows) para cada registo de rastreamento recebido. Para criar um participante de acompanhamento personalizado, é criada uma classe que deriva de TrackingParticipant. Para fornecer a funcionalidade básica de rastreamento, substitua Track. Track é chamado quando um registo de rastreamento é enviado pelo tempo de execução e pode ser processado da forma desejada. No exemplo a seguir, é definida uma classe de participante de rastreamento personalizada que emite todos os registros de rastreamento para a janela do console. Você também pode implementar um TrackingParticipant objeto que processa os registos de rastreamento de forma assíncrona usando os seus métodos BeginTrack e EndTrack.

class ConsoleTrackingParticipant : TrackingParticipant
{
    protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        if (record != null)
        {
            Console.WriteLine("=================================");
            Console.WriteLine(record);
        }
    }
}

Para usar um participante de acompanhamento específico, registre-o com a instância do fluxo de trabalho que você deseja acompanhar, conforme mostrado no exemplo a seguir.

myInstance.Extensions.Add(new ConsoleTrackingParticipant());

No exemplo a seguir, um fluxo de trabalho que consiste em uma Sequence atividade que contém uma WriteLine atividade é criado. O ConsoleTrackingParticipant é adicionado às extensões e o fluxo de trabalho é invocado.

Activity activity= new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Hello World."
        }
    }
};

WorkflowApplication instance = new WorkflowApplication(activity);

instance.Extensions.Add(new ConsoleTrackingParticipant());
  instance.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
            {
                Console.WriteLine("workflow instance completed, Id = " + instance.Id);
                resetEvent.Set();
            };
            instance.Run();
            Console.ReadLine();

Ver também