Szenario 1: HTTP-Timeoutbeispiel mit ETW-Ablaufverfolgung und Netsh-Befehlen
Über die ETW-Ablaufverfolgung kann der Datenfluss über die HTTP-Server-API-Komponente überprüft werden, um Probleme zu diagnostizieren. Beispielsweise können Benutzern einer Webanwendung in ihrem Browser Fehlermeldungen angezeigt werden, dass eine Webseite nicht angezeigt werden kann. Auf dem Server, auf dem die Webanwendung gehostet wird, sieht der IT-Fachmann auch einen Verbindungstimeouteintrag im HTTP-Fehlerprotokoll, wie in Abbildung 1 unten dargestellt. Das HTTP-Fehlerprotokoll befindet sich im folgenden Verzeichnis: %windir%\System32\LogFiles\HTTPERR\.
Abbildung 1: HTTP-Fehlerprotokoll für Timeout
Generieren eines ETW-Ablaufverfolgungsberichts
Führen Sie die folgenden Schritte an der Eingabeaufforderung aus, um einen ETW-Ablaufverfolgungsbericht für die HTTP-Server-API-Komponente zu generieren. In diesem Beispiel wird die Ablaufverfolgung auf dem Server ausgeführt, da die Webanwendung gehostet wird.
Die folgenden Schritte generieren eine Ablaufverfolgung mit dem Namen httptrace.etl und konvertieren die Ablaufverfolgung dann in eine CSV-Datei namens httptrace.csv. Wie unten gezeigt, heißt der ETW-Anbieter für die HTTP-Server-API Microsoft-Windows-HttpService. Die Befehlszeilenoption 0xFFF gibt an, dass alle ETW-Ereignisse für diesen Anbieter erfasst werden sollen.
Generieren eines ETW-Ablaufverfolgungsberichts
- Starten der ETW-Ablaufverfolgung für die HTTP-Server-API-Komponente: logman.exe start httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
- Reproduzieren Sie das Problem, damit es in der Ablaufverfolgung erfasst werden kann. In diesem Beispiel greifen Sie von einem Clientcomputer auf die Webanwendung zu, sodass die Meldung "Seite kann nicht angezeigt werden" auf dem Client angezeigt wird.
- Nachdem das Problem reproduziert wurde, beenden Sie die Ablaufverfolgung: logman.exe httptrace –ets beenden
- Konvertieren des Berichts in das CSV-Format: tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
- Zeigen Sie den Ablaufverfolgungsbericht an. Ein Auszug aus einer CSV-Ablaufverfolgung ist unten in Tabelle 1 dargestellt.
Anzeigen der Ablaufverfolgung und Diagnose
Die resultierende CSV-Datei für Ablaufverfolgungen kann in Excel oder einem beliebigen Tool angezeigt werden, das das CSV-Format unterstützt. Tabelle 1 unten zeigt Auszüge aus einer Beispiel-Ablaufverfolgungsdatei (httptrace.csv). Im Ablaufverfolgungsbericht wird in der Spalte "Level" ein Eintrag mit dem Wert "3" angezeigt, der einer Warnung in ETW entspricht. Die HTTP-Server-API-Komponente folgt den ETW-Ebenen, die in den Einstellungen auf Ereignisschlüsselwortebene des System ETW-Anbieters definiert sind. Die ETW-Ebenen umfassen Folgendes:
Ebene | Bedeutung |
---|---|
1 | Kritisch |
2 | Fehler |
3 | Warnung |
4 | Infomational |
5 | Ausführlich |
Mit dieser Warnung meldet der Ereignistyp (Spalte Typ) "ConnTimedOut". In den nachfolgenden Spalten für das ConnTimeOut-Ereignis wird der spezifische Timer, der abgelaufen ist, als "Timer_ConnectionIdle" gemeldet. Beachten Sie, dass die Spalte mit dem Eintrag "Timer_ConnectionIdle" aus Gründen der Kürze und zur Vermeidung des Auszugs nicht zusammenhängender Spalten nicht in der Tabelle enthalten ist.
Ereignisname | type | Ereignis-ID | Version | Kanal | Ebene |
---|---|---|---|---|---|
EventTrace | Header | 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 | Analysieren | 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 |
Tabelle 1: Auszüge aus einem Beispielablaufverfolgungsbericht für ein Timerproblem
In diesem Beispiel ist der Ablauf (ConnTimeOut-Ereignis) des Headertimers (Timer_ConnectionIdle) der Grund, warum Endbenutzer die Meldung "Seite kann nicht angezeigt werden" in ihren Webclients sehen. Ein möglicher Grund für das Timeout kann sein, dass Webclients aufgrund langsamer Verbindungen langsam senden. Um dieses Problem zu beheben, kann der Timeoutwert über Netsh-Befehle angepasst werden.
Anpassen des Timeouts über Netsh und Überprüfen der Lösung
Mit den unten aufgeführten Netsh-Befehlen für HTTP kann ein IT-Fachmann Einstellungswerte für die HTTP-Server-API-Komponente anzeigen und konfigurieren. Änderungen über Netsh HTTP-Befehle wirken sich auf alle Serveranwendungen aus, die von der HTTP-Server-API-Komponente für diesen Computer gehostet werden. Diese Änderungen werden über Neustarts der Komponente und Neustarts des Computers hinweg beibehalten. Die Netsh HTTP-Befehle sind in Windows Vista und Windows Server 2008 verfügbar und ersetzen das HttpCfg.exe-Tool des Windows Server 2003 Resource Kit, wenn es unter Windows Vista und Windows Server 2008 ausgeführt wird. In diesem Szenario passen wir einen Timeoutwert an und überprüfen dann die Lösung. Timer sind in der HTTP-Server-API-Komponente vorhanden, um die Verfügbarkeit sicherzustellen und vor übermäßigem Verbrauch durch einen falsch konfigurierten oder böswilligen Benutzer zu schützen. Das Anpassen von Timern von Standardwerten sollte sorgfältig gegen einen potenziellen DoS-Angriff ausgewertet werden.
In diesem Beispiel befinden sich die Webclients hinter einer langsamen Netzwerkverbindung, was zum Timer_ConnectionIdle ETW-Ereignis führt. Nach Berücksichtigung der Ursache der Timeouts und des Ausgleichs mit den Auswirkungen auf die Serverlast wird die Entscheidung getroffen, die Timeoutwerte auf einen Wert von 240 Sekunden zu erhöhen. Sie können den Timer mit dem folgenden Verfahren anzeigen und dann konfigurieren.
Konfigurieren des Leerlaufzeitgebers (Timer_ConnectionIdle) mit Netsh
- Öffnen Sie auf dem Server ein Befehlsfenster mit erhöhten Rechten, und führen Sie die folgenden Schritte aus, um den Timeoutwert anzuzeigen und zu konfigurieren. Ein Screenshot des Netsh-HTTP-Befehls ist in Abbildung 2 unten dargestellt.
- Aktuelle Timeoutwerte anzeigen: Netsh http show timeout
- Konfigurieren Sie den Timer_ConnectionIdle Timeoutwert. In diesem Beispiel wird der Wert in 240 Sekunden geändert: Netsh http add timeouttype=idleconnectiontimeout value=240
Abbildung 2: Netsh HTTP-Befehlsfenster
Nachdem Sie den Timeoutwert konfiguriert haben, führen Sie die ETW-Diagnoseschritte erneut aus. Wenn die Fehlerbedingung korrigiert wird, sollte die ETW-Ablaufverfolgung kein Timeout mehr mit der ETW-Ebene "3" für den Leerlauftimer der Verbindung anzeigen.