Share via


Escenario 1: Ejemplo de tiempo de espera HTTP mediante el seguimiento etw y los comandos netsh

Mediante el seguimiento de ETW, se puede inspeccionar el flujo de datos a través del componente de API de servidor HTTP para diagnosticar problemas. Por ejemplo, los usuarios de una aplicación web pueden ver mensajes de error en su explorador que una página web no puede mostrar. En el servidor que hospeda la aplicación web, el profesional de TI también ve una entrada de tiempo de espera de conexión dentro del registro de errores HTTP, como se muestra en la figura 1 siguiente. El registro de errores HTTP se puede encontrar en el siguiente directorio: %windir%\System32\LogFiles\HTTPERR\.

Captura de pantalla que muestra la ventana de comandos netsh H T T T P que muestra un registro de errores de H T T P para el tiempo de espera.

Figura 1: Registro de errores HTTP para el tiempo de espera

Generación de un informe de seguimiento ETW

Para generar un informe de seguimiento de ETW para el componente de API de servidor HTTP, ejecute los pasos siguientes desde el símbolo del sistema. En este ejemplo, el seguimiento se ejecuta en el servidor, ya que hospeda la aplicación web.

Los pasos siguientes generan un seguimiento denominado httptrace.etl y, a continuación, convierten el seguimiento en un archivo CSV denominado httptrace.csv. Como se muestra a continuación, el proveedor ETW para la API de servidor HTTP se denomina Microsoft-Windows-HttpService. La opción de línea de comandos 0xFFF indica que se deben capturar todos los eventos ETW de este proveedor.

Generación de un informe de seguimiento ETW

  1. Iniciar el seguimiento ETW para el componente de API de servidor HTTP: logman.exe iniciar httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
  2. Reproduzca el problema para que se pueda capturar en el seguimiento. En este ejemplo, accede a la aplicación web desde un equipo cliente, lo que da como resultado el mensaje "no se puede mostrar la página" que se muestra en el cliente.
  3. Ahora que se ha reproducido el problema, detenga el seguimiento: logman.exe detener httptrace –ets
  4. Convertir el informe en formato CSV: tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
  5. Vea el informe de seguimiento. A continuación se muestra un extracto de un seguimiento CSV en la tabla 1.

Visualización del seguimiento y el diagnóstico

El archivo CSV resultante para seguimientos se puede ver en Excel o en cualquier herramienta que admita el formato CSV. En la tabla 1 siguiente se muestran extractos de un archivo de seguimiento de ejemplo (httptrace.csv). En el informe de seguimiento, la columna "Nivel" muestra una entrada con un valor de "3", que corresponde a una advertencia en ETW. El componente DE API del servidor HTTP sigue los niveles etw definidos en la configuración de nivel de palabra clave del evento del proveedor ETW del sistema. Los niveles ETW incluyen:

Nivel Significado
1 Crítico
2 Error
3 Advertencia
4 Infomational
5 Verbose

 

Con esta advertencia, el tipo de evento (columna Tipo) notifica "ConnTimedOut". En las columnas posteriores del evento ConnTimeOut, el temporizador específico que expiró se notifica como "Timer_ConnectionIdle". Tenga en cuenta que la columna con la entrada "Timer_ConnectionIdle" no se incluye en la tabla por motivos de brevedad y para evitar extraer columnas no contiguas.

Nombre del evento Tipo Id. de evento Versión Canal Nivel
EventTrace Encabezado 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 Analizar 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

 

Tabla 1: Extractos de un informe de seguimiento de ejemplo para un problema del temporizador

En este ejemplo, la expiración (evento ConnTimeOut) del temporizador de encabezado (Timer_ConnectionIdle) es la razón por la que los usuarios finales ven el mensaje "page cannot be displayed" en sus clientes web. Una posible razón para el tiempo de espera puede ser que los clientes web se envían lentamente debido a conexiones lentas. Para solucionar este problema, el valor de tiempo de espera se puede ajustar mediante comandos netsh.

Ajuste del tiempo de espera a través de Netsh y comprobación de la solución

Los comandos de Netsh para HTTP enumerados a continuación permiten a un profesional de TI ver y configurar los valores de configuración en el componente de API de servidor HTTP. Los cambios a través de los comandos HTTP de Netsh afectan a todas las aplicaciones de servidor hospedadas por el componente de API de servidor HTTP para esa máquina. Estos cambios persisten en los reinicios del componente y los reinicios de la máquina. Los comandos HTTP de Netsh están disponibles en Windows Vista y Windows Server 2008 y reemplazan la herramienta de HttpCfg.exe del Kit de recursos de Windows Server 2003 al ejecutarse en Windows Vista y Windows Server 2008. En este escenario, ajustaremos un valor de tiempo de espera y, a continuación, comprobaremos la solución. Existen temporizadores en el componente de API de servidor HTTP para garantizar la disponibilidad y la protección frente a la sobreconsuposición por parte de un usuario mal configurado o malintencionado. El ajuste de temporizadores de los valores predeterminados debe evaluarse cuidadosamente frente a un posible ataque doS.

En este ejemplo, los clientes web están detrás de una conexión de red lenta, lo que da lugar al evento ETW de Timer_ConnectionIdle. Después de considerar la causa de los tiempos de espera y el equilibrio con el impacto en la carga del servidor, se toma la decisión de aumentar los valores de tiempo de espera a un valor de 240 segundos. Puede ver y, a continuación, configurar el temporizador con el procedimiento siguiente.

Configuración del temporizador de conexión inactivo (Timer_ConnectionIdle) con Netsh

  1. En el servidor, abra una ventana de comandos con privilegios elevados y ejecute los pasos siguientes para ver y configurar el valor de tiempo de espera. A continuación se muestra una captura de pantalla del comando HTTP de Netsh en la figura 2.
  2. Mostrar los valores de tiempo de espera actuales: Netsh http show timeout
  3. Configure el valor de tiempo de espera de Timer_ConnectionIdle. En este ejemplo, el valor se cambia a 240 segundos: Netsh http add timeouttype=idleconnectiontimeout value=240

ventana de comandos http netsh

Figura 2: Ventana de comandos HTTP de Netsh

Después de configurar el valor de tiempo de espera, vuelva a ejecutar los pasos de diagnóstico de ETW. Si se corrige la condición de error, el seguimiento de ETW ya no debería mostrar un tiempo de espera con un nivel ETW de "3" para el temporizador de inactividad de la conexión.