Escenario 1: Ejemplo de tiempo de espera HTTP mediante el seguimiento etw y los comandos netsh
A través del seguimiento de ETW, se puede inspeccionar el flujo de datos a través del componente DE API del 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\.
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 ETW para el componente DE API del 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 del 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.
Generar un informe de seguimiento ETW
- Iniciar el seguimiento de ETW para el componente de API del servidor HTTP: logman.exe iniciar httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
- Reproduzca el problema para que se pueda capturar en el seguimiento. En este ejemplo, se puede acceder a la aplicación web desde un equipo cliente, lo que da como resultado la página "no se puede mostrar" mensaje que se muestra en el cliente.
- Ahora que se ha reproducido el problema, detenga el seguimiento: logman.exe detener httptrace –ets
- Convertir el informe en formato CSV: tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
- 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 "Level" 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 configuración de nivel de palabra clave de evento del proveedor ETW del sistema. Los niveles ETW incluyen:
Nivel | Significado |
---|---|
1 | Crítico |
2 | Error |
3 | Advertencia |
4 | Infomational |
5 | Verboso |
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 de 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 envíen lentamente debido a conexiones lentas. Para solucionar este problema, el valor de tiempo de espera se puede ajustar mediante comandos netsh.
Ajustar el tiempo de espera a través de Netsh y comprobar 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 del servidor HTTP. Los cambios a través de 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 se conservan 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. Los temporizadores existen en el componente de API del servidor HTTP para garantizar la disponibilidad y protegerse contra la sobreconsmpción por parte de un usuario mal configurado o malintencionado. El ajuste de temporizadores de 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 como resultado el evento ETW de Timer_ConnectionIdle. Después de tener en cuenta 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.
Configurar el temporizador de conexión inactivo (Timer_ConnectionIdle) con Netsh
- 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.
- Mostrar los valores de tiempo de espera actuales: netsh http show timeout
- Configure el valor de tiempo de espera de Timer_ConnectionIdle. En este ejemplo, el valor se cambia a 240 segundos: netsh http add timeout timeouttype=idleconnectiontimeout value=240
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.