Rastreando eventos no rastreamento de eventos no Windows
O exemplo EtwTracking demonstra como habilitar o rastreamento do Windows Workflow Foundation (WF) em um serviço de fluxo de trabalho e emitir os eventos de rastreamento no Rastreamento de Eventos para Windows (ETW). Para emitir registros de rastreamento de fluxo de trabalho no ETW, o exemplo usa o participante de rastreamento do ETW (EtwTrackingParticipant).
O fluxo de trabalho no exemplo recebe uma solicitação, atribui a recíproca dos dados de entrada à variável de entrada e retorna a recíproca de volta ao cliente. Quando os dados de entrada são 0, ocorre uma exceção de divisão por zero que não é tratada e faz com que o fluxo de trabalho seja anulado. Com o rastreamento habilitado, o registro de controle de erros é emitido para o ETW, o que pode ajudar a solucionar o erro mais tarde. O participante de rastreamento ETW é configurado com um perfil de rastreamento para se inscrever em registros de rastreamento. O perfil de acompanhamento é definido no arquivo Web.config e fornecido como um parâmetro de configuração para o participante de rastreamento ETW. O participante de rastreamento ETW é configurado no arquivo Web.config do serviço de fluxo de trabalho e é aplicado ao serviço como um comportamento de serviço. Neste exemplo, você exibe os eventos de rastreamento no log de eventos usando o Visualizador de Eventos.
Detalhes de acompanhamento do fluxo de trabalho
O Windows Workflow Foundation fornece uma infraestrutura de controle para acompanhar a execução de uma instância de fluxo de trabalho. O tempo de execução de acompanhamento cria uma instância de fluxo de trabalho para emitir eventos relacionados ao ciclo de vida do fluxo de trabalho, eventos de atividades de fluxo de trabalho e eventos personalizados. A tabela a seguir detalha os principais componentes da infraestrutura de rastreamento.
Componente | Description |
---|---|
Rastreando o tempo de execução | Fornece a infraestrutura para emitir registros de rastreamento. |
Acompanhamento de participantes | Acessa os registros de rastreamento. O .NET Framework 4.6.1 é fornecido com um participante de controle que grava registros de controle como eventos ETW (Event Tracing for Windows). |
Perfil de rastreamento | Um mecanismo de filtragem que permite que um participante de rastreamento se inscreva em um subconjunto dos registros de rastreamento emitidos por uma instância de fluxo de trabalho. |
A tabela a seguir detalha os registros de controle que o tempo de execução do fluxo de trabalho emite.
Registo de acompanhamento | Description |
---|---|
Registros de controle de instância de fluxo de trabalho. | Descreve o ciclo de vida da instância do fluxo de trabalho. Por exemplo, um registro de instância é emitido quando o fluxo de trabalho é iniciado ou concluído. |
Registros de controle de estado de atividade. | Detalha a execução da atividade. Esses registros indicam o estado de uma atividade de fluxo de trabalho, como quando uma atividade é agendada, quando a atividade é concluída ou quando uma falha é lançada. |
Registro de retomada do favorito. | Emitido sempre que um marcador dentro de uma instância de fluxo de trabalho é retomado. |
Registros de rastreamento personalizados. | Um autor de fluxo de trabalho pode criar registros de acompanhamento personalizados e emiti-los dentro da atividade personalizada. |
ActivityScheduledRecord | Este registo é emitido quando uma atividade agenda outra atividade. |
FaultPropagationRecord | Este registo é emitido quando uma falha é propagada a partir de uma atividade. |
CancelRequestedRecord | Este registo é emitido quando uma atividade é cancelada por outra atividade. |
O participante de rastreamento se inscreve em um subconjunto dos registros de rastreamento emitidos usando perfis de rastreamento. Um perfil de acompanhamento contém consultas de acompanhamento que permitem a subscrição de um determinado tipo de registo de acompanhamento. Os perfis de rastreamento podem ser especificados no código ou na configuração.
Para usar este exemplo
Usando o Visual Studio, abra o arquivo de solução EtwTrackingParticipantSample.sln.
Para criar a solução, pressione CTRL+SHIFT+B.
Para executar a solução, pressione F5.
Por padrão, o serviço está escutando na porta 53797 (
http://localhost:53797/SampleWorkflowService.xamlx
).Usando o Explorador de Arquivos, abra o cliente de teste WCF.
O cliente de teste WCF (WcfTestClient.exe) está localizado na pasta> de instalação do <Visual Studio\Common7\IDE\.
A pasta de instalação padrão do Visual Studio é C:\Program Files\Microsoft Visual Studio 10.0.
No cliente de teste WCF, selecione Adicionar serviço no menu Arquivo .
Adicione o endereço do ponto de extremidade na caixa de entrada. A predefinição é
http://localhost:53797/SampleWorkflowService.xamlx
.Abra o aplicativo Visualizador de Eventos.
Antes de invocar o serviço, inicie o Visualizador de Eventos no menu Iniciar, selecione Executar e digite
eventvwr.exe
. Verifique se o log de eventos está escutando os eventos emitidos pelo serviço de fluxo de trabalho.Na vista em árvore do Visualizador de Eventos, navegue até Visualizador de Eventos, Registos de Aplicações e Serviços e Microsoft. Clique com o botão direito do mouse em Microsoft e selecione Exibir e, em seguida, Mostrar logs analíticos e de depuração para habilitar os logs analíticos e de depuração
Verifique se a opção Mostrar logs analíticos e de depuração está marcada.
Na vista em árvore no Visualizador de Eventos, navegue até Visualizador de Eventos, Registos de Aplicações e Serviços, Microsoft, Windows, Aplicações de Servidor de Aplicações. Clique com o botão direito do mouse em Analítico e selecione Habilitar log para habilitar o log analítico.
Teste o serviço usando o cliente de teste WCF clicando duas vezes em
GetData
.Isso abre o
GetData
método. A solicitação aceita um parâmetro e garante que o valor seja 0, que é o padrão.Clique em Invocar.
Observe os eventos emitidos pelo fluxo de trabalho.
Volte para o Visualizador de Eventos e navegue até Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Aplicativos do Servidor de Aplicativos. Clique com o botão direito do mouse em Analítico e selecione Atualizar.
Os eventos do fluxo de trabalho são exibidos no visualizador de eventos. Observe que os eventos de execução do fluxo de trabalho são exibidos e que um deles é uma exceção não tratada que corresponde ao erro no fluxo de trabalho. Além disso, um evento de aviso é emitido pela atividade do fluxo de trabalho, o que indica que a atividade está lançando uma falha.
Repita as etapas 9 e 10 com uma entrada de dados diferente de 0, para que nenhum erro seja gerado.
Os perfis de controle permitem que você assine eventos emitidos pelo tempo de execução quando o estado de uma instância de fluxo de trabalho é alterado. Dependendo dos seus requisitos de monitoramento, você pode criar um perfil muito grosseiro, que assina um pequeno conjunto de alterações de estado de alto nível em um fluxo de trabalho. Por outro lado, você pode criar um perfil muito preciso cuja saída é rica o suficiente para reconstruir a execução mais tarde. O exemplo demonstra os eventos emitidos do tempo de execução do fluxo de trabalho para o ETW usando o HealthMonitoring Tracking Profile
, que emite um pequeno conjunto de eventos. Um perfil diferente que emite mais eventos de controle de fluxo de trabalho também é fornecido no Web.config chamado Troubleshooting Tracking Profile
. Quando o .NET Framework 4.6.1 é instalado, um perfil padrão com um nome vazio é configurado no arquivo Machine.config. Esse perfil é usado pela configuração de comportamento de rastreamento do ETW quando nenhum nome de perfil ou um nome de perfil vazio é especificado.
O perfil de acompanhamento de monitoramento de integridade emite registros de instância de fluxo de trabalho e registros de propagação de falhas de atividade. Esse perfil é criado adicionando o seguinte perfil de acompanhamento a um arquivo de configuração Web.config.
<tracking>
<profiles>
<trackingProfile name="HealthMonitoring Tracking Profile">
<workflow activityDefinitionId="*">
<workflowInstanceQueries>
<workflowInstanceQuery>
<states>
<state name="Started"/>
<state name="Completed"/>
<state name="Aborted"/>
<state name="UnhandledException"/>
</states>
</workflowInstanceQuery>
</workflowInstanceQueries>
<faultPropagationQueries>
<faultPropagationQuery faultSourceActivityName ="*" faultHandlerActivityName="*"/>
</faultPropagationQueries>
</workflow>
</trackingProfile>
</profiles>
</tracking>
O perfil pode ser alterado alterando a EtwTrackingParticipant
configuração para o seguinte.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="HealthMonitoring Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
Para limpar (Opcional)
Abra o Visualizador de Eventos.
Navegue até Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Aplicativos de Servidor de Aplicativos. Clique com o botão direito do mouse em Analítico e selecione Desativar Log.
Navegue até Visualizador de Eventos, Logs de Aplicativos e Serviços, Microsoft, Windows, Aplicativos de Servidor de Aplicativos. Clique com o botão direito do mouse em Analítico e selecione Limpar Log.
Escolha a opção Limpar para limpar os eventos.
Problema Conhecido
Nota
Há um problema conhecido no Visualizador de Eventos em que ele pode falhar ao decodificar eventos ETW. Poderá ver uma mensagem de erro semelhante à seguinte.
Não foi possível encontrar a descrição da ID de Evento <da origem> Microsoft-Windows-Application Server-Applications. O componente que gera esse evento não está instalado no computador local ou a instalação está corrompida. Você pode instalar ou reparar o componente no computador local.
Se encontrar esse erro, clique em Atualizar no painel de ações. O evento agora deve ser decodificado corretamente.