Bonjour,

Dans un précédent article, je vous expliquais comment générer un log FREB sur une erreur HTTP ou sur une requête longue en exécution.

Il est également possible de générer un dump en se basant sur une règle FREB, par exemple, lorsque la requête dépasse 15 secondes d'exécution.
L'inconvénient majeur est que l'on doit choisir entre le log FREB et le dump. C'est soit l'un, soit l'autre, mais pas les deux en même temps.

Pour ce faire :

  • Configurez votre règle FREB (si vous ne savez pas comment faire, consultez l'article suivant : http://blogs.msdn.com/friis/archive/2010/04/29/le-fonctionnement-de-freb-ou-comment-investiguer-une-erreur-http-sous-iis-7-7-5.aspx)
    Vous obtiendrez la configuration suivante dans le Web.Config de votre application :

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <tracing>
                <traceFailedRequests>
                    <add path="*">
                        <traceAreas>
                            <add provider="ASP" verbosity="Verbose" />
                            <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                            <add provider="ISAPI Extension" verbosity="Verbose" />
                            <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module" verbosity="Verbose" />
                        </traceAreas>
                        <failureDefinitions timeTaken="00:00:15" />
                    </add>
                </traceFailedRequests>
            </tracing>
        </system.webServer>
    </configuration>

    Si vous n'avez pas autorisé la délégation, vous retrouverez la même configuration dans le fichier ApplicationHost.config situé dans le répertoire "C:\Windows\System32\Inetrsv\Config".

  • Afin de réaliser la génération de dumps, il faut préciser à IIS que nous n'allons pas effectuer l'action par défaut, à savoir générer un log FREB, mais que nous allons effectuer une action spécifique.
    Il existe deux méthodes principales pour réaliser ceci :
    • Soit vous ouvrez le fichier ApplicationHost.config
      1. Vous recherchez <sites>
      2. Et vous ajoutez dans la partie correspondant au site web que vous voulez monitorer customActionsEnabled="true" à <traceFailedRequestsLogging enabled="true" />
      3. Ce qui vous donnera pour le site web par défaut :

        <sites>
            <site name="Default Web Site" id="1" serverAutoStart="true">
                <application path="/">
                    <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:80:" />
                </bindings>
                <traceFailedRequestsLogging enabled="true" customActionsEnabled="true" />
            </site>
        </sites>

    • Soit vous utilisez appcmd.exe qui est l'outil de configuration de IIS en ligne de commande
      1. Ouvrez une invite de commande CMD
      2. Naviguez vers le répertoire "C:\Windows\System32\Inetsrv"
      3. Puis exécutez la commande suivante : (/[name='x'] où x correspond au nom de votre site web)

    appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].traceFailedRequestsLogging.customActionsEnabled:"true"" /commit:apphost

    Vous devriez donc retrouver exactement la même chose que ci-dessus dans le fichier ApplicationHost.config

  • Pour pouvoir générer un dump via une règle FREB, il faut que vous installiez ADPLUS, qui est disponible via les Debugging Tools  for Windows :
  • Il ne nous reste plus qu'à indiquer l'action spécifique que nous voulons mettre en place : générer un dump.

    Cela s'effectue au niveau du Web.Config, ou directement dans ApplicationHost.config, dans la section <system.webServer> <tracing> <traceFailedRequests>.
    Il suffit de rajouter les éléments suivants à <add path="*"> :

    <add path="*" customActionExe="c:\windows\system32\cscript.exe" customActionParams="C:\Debuggers\adplus_old.vbs -hang -pn w3wp.exe -o c:\dumps -quiet" customActionTriggerLimit="50">

    • CustomActionExe correspond à l'exécutable que l'on va lancer
    • customActionParams correspond aux paramètres que l'on passe à l'exécutable
    • Par défaut les dumps seront générés dans le répertoire C:\dumps mais vous pouvez changer cet emplacement en modifiant -o c:\dumps

    Vous devriez donc avoir un web.config / ApplicationHost.config avec un contenu similaire à celui-ci-dessous :

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <tracing>
                <traceFailedRequests>
                    <add path="*" customActionExe="c:\windows\system32\cscript.exe" customActionParams="C:\Debuggers\adplus_old.vbs -hang -pn w3wp.exe -o c:\dumps -quiet" customActionTriggerLimit="50">
                        <traceAreas>
                            <add provider="ASP" verbosity="Verbose" />
                            <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                            <add provider="ISAPI Extension" verbosity="Verbose" />
                            <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module" verbosity="Verbose" />
                        </traceAreas>
                        <failureDefinitions timeTaken="00:00:15" />
                    </add>
                </traceFailedRequests>
            </tracing>
        </system.webServer>
    </configuration>

    Pour information vous pouvez remplacer l'étoile de <add path="*" par une page spécifique comme "default.htm" ou par une extension spécifique comme "*.aspx".

Une fois sauvegardé, vous n'avez plus qu'à attendre que le dump soit généré.

En espérant que cet article vous sera utile.
Un grand merci à Finbar Ryan qui m'a aidé à faire fonctionner tout ceci.
@ Bientôt
Sylvain Lecerf et L'équipe de support IIS Microsoft France