Сценарий 1. Пример времени ожидания HTTP с использованием трассировки ETW и команд Netsh
С помощью трассировки ETW поток данных через компонент API HTTP-сервера можно проверить для диагностики проблем. Например, пользователи веб-приложения могут видеть сообщения об ошибках в браузере, которые веб-страница не может отображать. На сервере, на котором размещено веб-приложение, ИТ-специалист также видит запись времени ожидания подключения в журнале ошибок HTTP, как показано на рисунке 1 ниже. Журнал ошибок HTTP находится в следующем каталоге: %windir%\System32\LogFiles\HTTPERR\.
Рис. 1. Журнал ошибок HTTP для времени ожидания
Создание отчета трассировки windows
Чтобы создать отчет трассировки etW для компонента API HTTP-сервера, выполните приведенные ниже действия в командной строке. В этом примере трассировка выполняется на сервере, так как на нем размещается веб-приложение.
Приведенные ниже действия создают трассировку с именем httptrace.etl, а затем преобразуют трассировку в CSV-файл с именем httptrace.csv. Как показано ниже, поставщик трассировки событий Windows для API HTTP-сервера называется Microsoft-Windows-HttpService. Параметр командной строки 0xFFF указывает, что все события трассировки событий Windows для этого поставщика должны быть записаны.
Создание отчета трассировки трассировки трассировки windows
- Запуск трассировки трассировки etW для КОМПОНЕНТА API HTTP-сервера: logman.exe запустить httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl –ets
- Воспроизведите проблему, чтобы ее можно было зафиксировать в трассировке. В этом примере осуществляется доступ к веб-приложению с клиентского компьютера, в результате чего на клиенте отображается сообщение "Страница не отображается".
- Теперь, когда проблема воспроизведена, остановите трассировку :logman.exe остановить httptrace –ets.
- Преобразование отчета в формат CSV: tracerpt.exe httptrace.etl -of CSV -o httptrace.csv
- Просмотрите отчет о трассировки. Выдержка из трассировки CSV показана ниже в таблице 1.
Просмотр трассировки и диагностики
Полученный CSV-файл для трассировок можно просмотреть в Excel или любом средстве, поддерживающем формат CSV. В таблице 1 ниже показаны выдержки из примера файла трассировки (httptrace.csv). В отчете трассировки в столбце "Уровень" отображается запись со значением "3", что соответствует предупреждению в трассировке в трассировке. Компонент API HTTP-сервера следует уровням трассировки событий Windows, определенным в параметрах уровня ключевых слов поставщика системного поставщика ETW. Уровни трассировки событий Windows включают:
Level | Значение |
---|---|
1 | Критически важно |
2 | Ошибка |
3 | Предупреждение |
4 | Информационный |
5 | Подробный |
С этим предупреждением тип события (столбец type) сообщает о "ConnTimedOut". В последующих столбцах для события ConnTimeOut определенный таймер, срок действия которого истек, отображается как "Timer_ConnectionIdle". Обратите внимание, что столбец с записью "Timer_ConnectionIdle" не включен в таблицу для краткости и во избежание фрагментов несмежных столбцов.
Имя события | Тип | Идентификатор события | Версия | Канал | Level |
---|---|---|---|---|---|
EventTrace | Заголовок | 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 | Синтаксический анализ | 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 |
Таблица 1. Выдержки из примера отчета трассировки для проблемы таймера
В этом примере истечение срока действия таймера заголовка (Timer_ConnectionIdle) является причиной, по которой конечные пользователи видят сообщение "страница не может быть отображена" в своих веб-клиентах. Потенциальная причина превышения времени ожидания может быть в том, что веб-клиенты отправляют сообщения медленно из-за медленного подключения. Чтобы устранить эту проблему, можно настроить значение времени ожидания с помощью команд Netsh.
Настройка времени ожидания с помощью Netsh и проверка решения
Приведенные ниже команды Netsh для HTTP позволяют ИТ-специалистам просматривать и настраивать значения параметров в компоненте API HTTP-сервера. Изменения в http-командах Netsh влияют на все серверные приложения, размещенные компонентом API HTTP-сервера для этого компьютера. Эти изменения сохраняются при перезапусках компонента и компьютера. Http-команды Netsh доступны в Windows Vista и Windows Server 2008 и заменяют средство HttpCfg.exe комплекта ресурсов Windows Server 2003 при работе в Windows Vista и Windows Server 2008. В этом сценарии мы настроим значение времени ожидания, а затем проверим решение. Таймеры существуют в компоненте API HTTP-сервера для обеспечения доступности и защиты от чрезмерного использования неправильно настроенным или вредоносным пользователем. Настройка таймеров на основе значений по умолчанию должна быть тщательно оценена на предмет потенциальной атаки DoS.
В этом примере веб-клиенты находятся за медленным сетевым подключением, что приводит к Timer_ConnectionIdle событию ETW. После рассмотрения причины тайм-аутов и балансировки с учетом влияния на нагрузку сервера принимается решение увеличить значения времени ожидания до значения 240 секунд. Вы можете просмотреть и настроить таймер с помощью следующей процедуры.
Настройка таймера бездействующего подключения (Timer_ConnectionIdle) с помощью Netsh
- На сервере откройте окно команд с повышенными привилегиями и выполните приведенные ниже действия, чтобы просмотреть и настроить значение времени ожидания. Снимок экрана: команда Netsh HTTP показана на рисунке 2 ниже.
- Отображение текущих значений времени ожидания: Netsh HTTP show timeout
- Настройте значение времени ожидания Timer_ConnectionIdle. В этом примере значение изменяется на 240 секунд: Netsh http add timeout timeouttype=idleconnectiontimeout value=240
Рис. 2. Окно команд Netsh HTTP
После настройки значения времени ожидания повторно выполните шаги диагностики трассировки событий Windows. Если условие ошибки исправлено, трассировка трассировки etW больше не должна показывать время ожидания с уровнем etw "3" для таймера простоя подключения.