Scénario 1 : Exemple de délai d’expiration HTTP utilisant le suivi ETW et les commandes Netsh

Grâce au suivi ETW, le flux de données via le composant API serveur HTTP peut être inspecté pour diagnostiquer les problèmes. Par exemple, les utilisateurs d’une application web peuvent voir des messages d’erreur dans leur navigateur qu’une page web ne peut pas afficher. Sur le serveur hébergeant l’application web, le professionnel de l’informatique voit également une entrée de délai d’expiration de connexion dans le journal des erreurs HTTP, comme illustré dans la figure 1 ci-dessous. Le journal des erreurs HTTP se trouve dans le répertoire suivant : %windir%\System32\LogFiles\HTTPERR\.

Capture d’écran montrant la fenêtre de commande netsh H T.P. affichant un journal des erreurs H T.P. pour le délai d’expiration.

Figure 1 : Journal des erreurs HTTP pour le délai d’expiration

Génération d’un rapport de trace ETW

Pour générer un rapport de trace ETW pour le composant API serveur HTTP, exécutez les étapes ci-dessous à partir de l’invite de commandes. Dans cet exemple, la trace est exécutée sur le serveur, car il héberge l’application web.

Les étapes ci-dessous génèrent une trace appelée httptrace.etl, puis la convertissent en un fichier CSV appelé httptrace.csv. Comme indiqué ci-dessous, le fournisseur ETW pour l’API serveur HTTP est appelé Microsoft-Windows-HttpService. L’option de ligne de commande 0xFFF indique que tous les événements ETW de ce fournisseur doivent être capturés.

Générer un rapport de trace ETW

  1. Démarrer la trace ETW pour le composant API serveur HTTP : logman.exe start httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
  2. Reproduisez le problème afin qu’il puisse être capturé dans la trace. Dans cet exemple, accédez à l’application web à partir d’un ordinateur client, ce qui entraîne l’affichage du message « Impossible d’afficher la page » sur le client.
  3. Maintenant que le problème a été reproduit, arrêtez la trace : logman.exe arrêter httptrace –ets
  4. Convertir le rapport au format CSV : tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
  5. Afficher le rapport de trace. Un extrait d’une trace CSV est présenté ci-dessous dans le tableau 1.

Affichage de la trace et du diagnostic

Le fichier CSV résultant pour les traces peut être consulté dans Excel ou dans n’importe quel outil prenant en charge le format CSV. Le tableau 1 ci-dessous présente des extraits d’un exemple de fichier de trace (httptrace.csv). Dans le rapport de trace, la colonne « Niveau » affiche une entrée avec la valeur « 3 », qui correspond à un avertissement dans ETW. Le composant API du serveur HTTP suit les niveaux ETW définis dans les paramètres de mot clé d’événement du fournisseur ETW système. Les niveaux ETW sont les suivants :

Level Signification
1 Critique
2 Error
3 Avertissement
4 Infomational
5 Commentaires

 

Avec cet avertissement, le type d’événement (colonne Type) indique « ConnTimedOut ». Dans les colonnes suivantes de l’événement ConnTimeOut, le minuteur spécifique qui a expiré est signalé comme « Timer_ConnectionIdle ». Notez que la colonne avec l’entrée « Timer_ConnectionIdle » n’est pas incluse dans le tableau par souci de concision et d’éviter d’extrait de colonnes non incohérentes.

Nom d'événement Type ID de l’événement Version Canal Level
EventTrace En-tête 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 Analyser 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

 

Tableau 1 : Extraits d’un exemple de rapport de trace pour un problème de minuteur

Dans cet exemple, l’expiration (événement ConnTimeOut) du minuteur d’en-tête (Timer_ConnectionIdle) est la raison pour laquelle les utilisateurs finaux voient le message « la page ne peut pas être affichée » dans leurs clients web. Une raison potentielle du délai d’expiration peut être que les clients Web envoient lentement en raison de connexions lentes. Pour résoudre ce problème, la valeur du délai d’expiration peut être ajustée via les commandes Netsh.

Ajustement du délai d’expiration via Netsh et vérification de la solution

Les commandes Netsh pour HTTP répertoriées ci-dessous permettent à un professionnel de l’informatique d’afficher et de configurer des valeurs de paramètre sur le composant API serveur HTTP. Les modifications apportées par le biais des commandes HTTP Netsh affectent toutes les applications serveur hébergées par le composant API de serveur HTTP pour cette machine. Ces modifications persistent entre les redémarrages du composant et les redémarrages de l’ordinateur. Les commandes HTTP Netsh sont disponibles dans Windows Vista et Windows Server 2008 et remplacent l’outil HttpCfg.exe du Kit de ressources Windows Server 2003 lors de l’exécution sur Windows Vista et Windows Server 2008. Dans ce scénario, nous allons ajuster une valeur de délai d’expiration, puis vérifier la solution. Des minuteurs existent dans le composant API du serveur HTTP pour garantir la disponibilité et la protection contre la surconsommation par un utilisateur mal configuré ou malveillant. L’ajustement des minuteurs à partir des valeurs par défaut doit être soigneusement évalué par rapport à une attaque DoS potentielle.

Dans cet exemple, les clients web se trouvent derrière une connexion réseau lente, ce qui entraîne l’Timer_ConnectionIdle événement ETW. Après avoir pris en compte la cause des délais d’expiration et l’équilibrage avec l’impact sur la charge du serveur, il est décidé d’augmenter les valeurs de délai d’attente à une valeur de 240 secondes. Vous pouvez afficher et configurer le minuteur avec la procédure suivante.

Configurer le minuteur de connexion inactif (Timer_ConnectionIdle) avec Netsh

  1. Sur le serveur, ouvrez une fenêtre de commande avec élévation de privilèges et exécutez les étapes ci-dessous pour afficher et configurer la valeur du délai d’expiration. Une capture d’écran de la commande HTTP Netsh est illustrée dans la figure 2 ci-dessous.
  2. Afficher les valeurs de délai d’expiration actuelles : Netsh http show timeout
  3. Configurez la valeur de délai d’expiration Timer_ConnectionIdle. Dans cet exemple, la valeur passe à 240 secondes : Netsh http add timeouttype=idleconnectiontimeout value=240

Fenêtre de commande netsh http

Figure 2 : Fenêtre de commande HTTP Netsh

Après avoir configuré la valeur du délai d’expiration, réexécutez les étapes de diagnostic ETW. Si la condition d’erreur est corrigée, la trace ETW ne doit plus afficher de délai d’attente avec un niveau ETW de « 3 » pour le minuteur d’inactivité de connexion.