Scenario 1: Esempio di timeout HTTP con i comandi di traccia ETW e Netsh

Tramite la traccia ETW, è possibile esaminare il flusso di dati tramite il componente API server HTTP per diagnosticare i problemi. Ad esempio, gli utenti di un'applicazione Web possono visualizzare messaggi di errore nel browser in cui non è possibile visualizzare una pagina Web. Nel server che ospita l'applicazione Web, il professionista IT vede anche una voce di timeout di connessione all'interno del log degli errori HTTP, come illustrato nella figura 1 seguente. Il log degli errori HTTP è disponibile nella directory seguente: %windir%\System32\LogFiles\HTTPERR\.

Screenshot che mostra la finestra di comando netsh H T T P che visualizza un log degli errori H T T P per il timeout.

Figura 1: Log degli errori HTTP per timeout

Generazione di un report di traccia ETW

Per generare un report di traccia ETW per il componente API server HTTP, eseguire la procedura seguente dal prompt dei comandi. In questo esempio la traccia viene eseguita nel server perché ospita l'applicazione Web.

La procedura seguente genera una traccia denominata httptrace.etl e quindi converte la traccia in un file CSV denominato httptrace.csv. Come illustrato di seguito, il provider ETW per l'API server HTTP è denominato Microsoft-Windows-HttpService. L'opzione della riga di comando 0xFFF indica che tutti gli eventi ETW per questo provider devono essere acquisiti.

Generare un report di traccia ETW

  1. Avviare la traccia ETW per il componente API server HTTP: logman.exe avviare httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
  2. Riprodurre il problema in modo che possa essere acquisito nella traccia. In questo esempio, accedere all'applicazione Web da un computer client, con conseguente visualizzazione del messaggio "impossibile visualizzare la pagina" nel client.
  3. Ora che il problema è stato riprodotto, arrestare la traccia: logman.exe arrestare httptrace –ets
  4. Convertire il report in formato CSV: tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
  5. Visualizzare il report di traccia. Di seguito è riportato un estratto di una traccia CSV nella tabella 1.

Visualizzazione della traccia e della diagnosi

Il file CSV risultante per le tracce può essere visualizzato in Excel o in qualsiasi strumento che supporti il formato CSV. La tabella 1 seguente mostra estratti da un file di traccia di esempio (httptrace.csv). Nel report di traccia la colonna "Level" mostra una voce con valore "3", che corrisponde a un avviso in ETW. Il componente API server HTTP segue i livelli ETW definiti nelle impostazioni a livello di parola chiave del provider ETW di sistema. I livelli ETW includono:

Level Significato
1 Critico
2 Errore
3 Avviso
4 Infomational
5 Dettagliato

 

Con questo avviso, il tipo di evento (colonna Tipo) segnala "ConnTimedOut". Nelle colonne successive per l'evento ConnTimeOut, il timer specifico scaduto viene segnalato come "Timer_ConnectionIdle". Si noti che la colonna con la voce "Timer_ConnectionIdle" non è inclusa nella tabella per brevità e per evitare di estrarre colonne non contigue.

Nome evento Tipo ID evento Versione Channel Level
EventTrace Intestazione 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 ConnIdAsgn 22 0 16 4
Microsoft-Windows-HttpService RecvReq 1 0 16 4
Microsoft-Windows-HttpService Analizza 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

 

Tabella 1: estratti da un report di traccia di esempio per un problema timer

In questo esempio, la scadenza (evento ConnTimeOut) del timer di intestazione (Timer_ConnectionIdle) è il motivo per cui gli utenti finali visualizzano il messaggio "impossibile visualizzare la pagina" nei client Web. Un potenziale motivo per il timeout potrebbe essere che i client Web inviano lentamente a causa di connessioni lente. Per risolvere questo problema, il valore di timeout può essere modificato tramite i comandi Netsh.

Regolazione del timeout tramite Netsh e verifica della soluzione

I comandi Netsh per HTTP elencati di seguito consentono a un professionista IT di visualizzare e configurare i valori delle impostazioni nel componente API server HTTP. Le modifiche tramite i comandi HTTP Netsh influiscono su tutte le applicazioni server ospitate dal componente API server HTTP per tale computer. Queste modifiche vengono mantenute tra i riavvii del componente e i riavvii del computer. I comandi HTTP Netsh sono disponibili in Windows Vista e Windows Server 2008 e sostituiscono lo strumento di HttpCfg.exe di Windows Server 2003 Resource Kit durante l'esecuzione in Windows Vista e Windows Server 2008. In questo scenario si modificherà un valore di timeout e quindi si verificherà la soluzione. I timer sono presenti nel componente API server HTTP per garantire la disponibilità e la protezione da un consumo eccessivo da parte di un utente non configurato o dannoso. La regolazione dei timer dai valori predefiniti deve essere valutata attentamente rispetto a un potenziale attacco DoS.

In questo esempio, i client Web si trovano dietro una connessione di rete lenta, generando l'evento Timer_ConnectionIdle ETW. Dopo aver preso in considerazione la causa dei timeout e del bilanciamento con l'impatto sul carico del server, viene presa la decisione di aumentare i valori di timeout a un valore di 240 secondi. È possibile visualizzare e quindi configurare il timer con la procedura seguente.

Configurare il timer di connessione inattiva (Timer_ConnectionIdle) con Netsh

  1. Nel server aprire una finestra di comando con privilegi elevati ed eseguire la procedura seguente per visualizzare e configurare il valore di timeout. Una schermata del comando HTTP Netsh è illustrata nella figura 2 seguente.
  2. Mostra i valori di timeout correnti: Netsh http show timeout
  3. Configurare il valore di timeout Timer_ConnectionIdle. In questo esempio il valore viene modificato in 240 secondi: Netsh http add timeouttype=idleconnectiontimeout value=240

finestra di comando http netsh

Figura 2: Finestra di comando HTTP Netsh

Dopo aver configurato il valore di timeout, eseguire nuovamente i passaggi di diagnosi ETW. Se la condizione di errore viene corretta, la traccia ETW non dovrebbe più visualizzare un timeout con un livello ETW "3" per il timer di inattività della connessione.