Cenário 1: exemplo de tempo limite HTTP usando comandos ETW Tracing e Netsh
Por meio do rastreamento etw, o fluxo de dados por meio do componente da API do servidor HTTP pode ser inspecionado para diagnosticar problemas. Por exemplo, os usuários de um aplicativo Web podem ver mensagens de erro no navegador que uma página da Web não pode exibir. No servidor que hospeda o aplicativo Web, o profissional de TI também vê uma entrada de tempo limite de conexão no Log de Erros HTTP, conforme mostrado na Figura 1 abaixo. O Log de Erros HTTP pode ser encontrado no seguinte diretório: %windir%\System32\LogFiles\HTTPERR\.
Figura 1: Log de erros HTTP para tempo limite
Gerando um relatório de rastreamento ETW
Para gerar um relatório de rastreamento ETW para o componente da API do servidor HTTP, execute as etapas abaixo no prompt de comando. Neste exemplo, o rastreamento é executado no servidor, pois ele está hospedando o aplicativo Web.
As etapas abaixo geram um rastreamento chamado httptrace.etl e convertem o rastreamento em um arquivo CSV chamado httptrace.csv. Conforme mostrado abaixo, o provedor ETW para a API do servidor HTTP é chamado Microsoft-Windows-HttpService. A opção de linha de comando 0xFFF indica que todos os eventos ETW para esse provedor devem ser capturados.
Gerar um relatório de rastreamento ETW
- Iniciar o rastreamento ETW para o componente da API do Servidor HTTP: logman.exe iniciar httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
- Reproduza o problema para que ele possa ser capturado no rastreamento. Neste exemplo, acesse o aplicativo Web de um computador cliente, resultando na mensagem "a página não pode ser exibida" exibida no cliente.
- Agora que o problema foi reproduzido, pare o rastreamento: logman.exe parar httptrace –ets
- Converter o relatório em formato CSV: tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
- Exiba o relatório de rastreamento. Um trecho de um rastreamento CSV é mostrado abaixo na Tabela 1.
Exibindo o rastreamento e o diagnóstico
O arquivo CSV resultante para rastreamentos pode ser exibido no Excel ou em qualquer ferramenta que dê suporte ao formato CSV. A Tabela 1 abaixo mostra trechos de um arquivo de rastreamento de exemplo (httptrace.csv). No relatório de rastreamento, a coluna "Level" mostra uma entrada com um valor "3", que corresponde a um aviso no ETW. O componente da API do Servidor HTTP segue os Níveis de ETW definidos nas configurações de nível de palavra-chave de evento do provedor ETW do Sistema. Os níveis de ETW incluem:
Nível | Significado |
---|---|
1 | Crítico |
2 | Erro |
3 | Aviso |
4 | Infomational |
5 | Detalhado |
Com esse aviso, o tipo de evento (coluna Tipo) relata "ConnTimedOut". Nas colunas subsequentes do evento ConnTimeOut, o temporizador específico que expirou é relatado como "Timer_ConnectionIdle". Observe que a coluna com a entrada "Timer_ConnectionIdle" não está incluída na tabela para fins de brevidade e para evitar a extração de colunas não contíguas.
Nome do evento | Type | ID do evento | Versão | Canal | Nível |
---|---|---|---|---|---|
EventTrace | parâmetro | 0 | 2 | 0 | 0 |
Microsoft-Windows-HttpService | ChgUrlGrpProp | 28 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | Addurl | 31 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ChgReqQueueProp | 30 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ChgUrlGrpProp | 28 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ChgSrvSesProp | 29 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ChgSrvSesProp | 29 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ConnConnect | 21 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ConnIdAssgn | 22 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | RecvReq | 1 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | Analisar | 2 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | LogFileWrite | 51 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ConnCleanup | 24 | 0 | 16 | 4 |
Microsoft-Windows-HttpService | ConnTimedOut | 53 | 0 | 16 | 3 |
Tabela 1: Trechos de um relatório de rastreamento de exemplo para um problema de temporizador
Neste exemplo, a expiração (evento ConnTimeOut) do temporizador de cabeçalho (Timer_ConnectionIdle) é o motivo pelo qual os usuários finais veem a mensagem "a página não pode ser exibida" em seus clientes Web. Um motivo potencial para o tempo limite pode ser que os clientes Web estão enviando lentamente devido a conexões lentas. Para resolver esse problema, o valor de tempo limite pode ser ajustado por meio de comandos do Netsh.
Ajustando o tempo limite por meio do Netsh e verificando a solução
Os comandos Netsh para HTTP listados abaixo permitem que um profissional de TI exiba e defina valores de configuração no componente de API do servidor HTTP. As alterações por meio de comandos HTTP do Netsh afetam todos os aplicativos de servidor hospedados pelo componente da API do servidor HTTP para esse computador. Essas alterações persistem entre reinicializações do componente e reinicializações do computador. Os comandos HTTP do Netsh estão disponíveis no Windows Vista e no Windows Server 2008 e substituem a ferramenta HttpCfg.exe do Kit de Recursos do Windows Server 2003 ao serem executados no Windows Vista e no Windows Server 2008. Nesse cenário, ajustaremos um valor de tempo limite e, em seguida, verificaremos a solução. Os temporizadores existem no componente de API do Servidor HTTP para garantir a disponibilidade e proteger contra o excesso de condições por um usuário mal configurado ou mal-intencionado. O ajuste de temporizadores de valores padrão deve ser avaliado cuidadosamente em relação a um possível ataque do DoS.
Neste exemplo, os clientes Web estão por trás de uma conexão de rede lenta, resultando no evento ETW Timer_ConnectionIdle. Após a consideração da causa dos tempos limite e do balanceamento com o impacto na carga do servidor, é tomada a decisão de aumentar os valores de tempo limite para um valor de 240 segundos. Você pode exibir e configurar o temporizador com o procedimento a seguir.
Configurar o temporizador de conexão ociosa (Timer_ConnectionIdle) com o Netsh
- No servidor, abra uma janela de comandos com privilégios elevados e execute as etapas abaixo para exibir e configurar o valor de tempo limite. Uma captura de tela do comando HTTP do Netsh é mostrada na Figura 2 abaixo.
- Mostrar os valores de tempo limite atuais: Tempo limite do show do Netsh http
- Configure o valor de tempo limite Timer_ConnectionIdle. Neste exemplo, o valor é alterado para 240 segundos: Netsh http add timeouttype=idleconnectiontimeout value=240
Figura 2: Janela de comando HTTP do Netsh
Depois de configurar o valor de tempo limite, execute novamente as etapas de diagnóstico do ETW. Se a condição de erro for corrigida, o rastreamento ETW não deverá mais mostrar um tempo limite com um nível etw de "3" para o temporizador ocioso da conexão.