Como utilizar Failed Request Tracing para hacer el troubleshooting de hangs en IIS 7.0

Failed Request Tracing (también conocido como FREB) es una nueva característica de IIS 7.0 que nos permite generar trazas granulares de peticiones HTTP fallidas. Las principales ventajas que nos aporta FREB son las siguientes:

 

· Nos permite definir las condiciones bajo las que una petición se considera “fallida”

§ Errores HTTP: p. ej., siempre que se produzca un error HTTP 403.13, o un error entre el rango HTTP 401-599.

§ Tiempo en ejecución:p. ej., todas las peticiones que tarden más de 5 segundos en ejecutarse.

§ Severidad del evento: p. ej., warning, error o critical error.

· Nos da total flexibilidad para configurar el tracing para una única URL específica, para un directorio virtual, para una aplicación o para un sitio web entero.

· Nos permite definir acciones personalizadas (p. ej. ejecutar un script) cuando se da una situación de error.

 

FREB resulta especialmente útil para capturar trazas de errores (o situaciones) que ocurren “aleatoriamente” y que no podemos reproducir con facilidad. La gran ventaja es que las trazas están habilitadas en todo momento, pero los datos sólo se guardan cuando se cumplen las condiciones que queremos investigar. Para configurar FREB, podéis leer este post del grupo de producto de IIS, que es un excelente tutorial para iniciarse con esta funcionalidad de IIS 7.0.

 

Una de las características más potentes de FREB es la posibilidad de realizar acciones personalizadas cuando se da una condición de error. Por ejemplo, podemos utilizar FREB para generar volcados de memoria con adplus.vbs cuando las peticiones HTTP tarden más de 5 segundos en ejecutarse.

 

Para ello tendríamos que hacer lo siguiente:

 

1) En el applicationHost.config tenemos que habilitar FREB y las acciones personalizadas. Esto lo podemos hacer editando directamente el fichero applicationHost.config (no aconsejado) o ejecutando el siguiente comando de appcmd.exe (en el ejemplo para el sitio web Default Web Site). Para habilitar FREB ejecutaremos el siguiente comando:

C:\Windows\System32\inetsrv> appcmd set config /section:system.applicationHost/sites "-[name='Default Web Site'].traceFailedRequestsLogging.enabled:true"

Y para habilitar las acciones personalizadas, ejecutaremos el siguiente:

C:\Windows\System32\inetsrv> appcmd set config /section:system.applicationHost/sites "-[name='Default Web Site'].traceFailedRequestsLogging.customActionsEnabled:true"

 

2) Posteriormente declaramos la regla de FREB, lo cual podemos hacer en el applicationHost.config o en el web.config de la aplicación web en cuestión. Los parámetros customActionExe, customActionParams y customActionTriggerLimit no se pueden configurar desde la interfaz gráfica del IIS Manager.

 

<configuration>

<system.webServer>

<tracing>

<traceFailedRequests>

<remove path="*" />

<add path="*"

customActionExe="C:\windows\system32\cscript.exe"

customActionParams="C:\debugger\adplus.vbs -hang

-pn w3wp.exe -o C:\MyDumps -quiet"

customActionTriggerLimit="10">

<traceAreas>

<add provider="WWW Server"

areas="RequestNotifications"

verbosity="Verbose" />

</traceAreas>

<failureDefinitions timeTaken="00:00:05" />

</add>

</traceFailedRequests>

</tracing>

</system.webServer>

</configuration>

 

Hasta el próximo post,

- Daniel Mossberg