Устранение неполадок с подключениями LDAP с помощью ETW

Трассировка событий для Windows (ETW) может быть ценным средством устранения неполадок для служб домен Active Directory (AD DS). Для трассировки обмена данными по протоколу LDAP между клиентами Windows и серверами LDAP можно использовать etW, включая контроллеры домена AD DS.

Включение трассировки и запуск трассировки

Включение трассировки событий трассировки событий

  1. Откройте редактор реестра и создайте следующий подраздел реестра:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Трассировка\ProcessName

    В этом подразделе ProcessName — это полное имя процесса, который требуется трассировать, включая его расширение (например, "Svchost.exe").

  2. (Необязательно) В этом подразделе создайте новую запись с именем PID. Чтобы использовать эту запись, назначьте идентификатор процесса в качестве значения DWORD.

    Если указать идентификатор процесса, трассировка трассировки трассировки трассирует только экземпляр приложения, имеющего этот идентификатор процесса.

Запуск сеанса трассировки

  • Откройте окно командной строки и выполните следующую команду:

    tracelog.exe -start <SessionName> -guid \#099614a5-5dd7-4788-8bc9-e29f43db28fc -f <FileName> -flag <TraceFlags>
    

    Заполнители в этой команде представляют следующие значения.

    • <SessionName> — это произвольный идентификатор, используемый для метки сеанса трассировки.

    Примечание.

    Позже вам придется ссылаться на это имя сеанса при остановке сеанса трассировки.

    • <FileName> указывает файл журнала, в который будут записываться события.
    • <TraceFlags> должен быть одним или несколькими значениями, перечисленными в таблице флагов трассировки.

Завершение сеанса трассировки и отключение трассировки событий

Остановка трассировки

  • В командной строке введите следующую команду:

    tracelog.exe -stop <SessionName>
    

    В этой команде SessionName> — это то же имя, которое использовалось в команде <tracelog.exe -start.

Отключение etw

  • В редакторе реестра удалите подраздел HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\ProcessName .

Значения флагов трассировки

Чтобы использовать флаг, замените значение <флага заполнителем TraceFlags> в аргументах команды tracelog.exe -start .

Примечание.

Можно указать несколько флагов с помощью суммы соответствующих значений флагов. Например, чтобы указать флаги DEBUG_SEARCH (0x00000001) и DEBUG_CACHE (0x00000010), соответствующее< значение TraceFlags> равно 0x00000011.

Имя флага Значение флага Описание флага
DEBUG_SEARCH 0x00000001 Регистрирует поисковые запросы и параметры, передаваемые этим запросам. Ответы здесь не регистрируются. Регистрируются только поисковые запросы. (Используйте DEBUG_SPEWSEARCH регистрировать ответы на поисковые запросы.)
DEBUG_WRITE 0x00000002 Журналы записывают запросы и параметры, передаваемые этим запросам. Запросы на запись включают операции добавления, удаления, изменения и расширенных операций.
DEBUG_REFCNT 0x00000004 Журналы, ссылающиеся на подсчет данных и операций для подключений и запросов.
DEBUG_HEAP 0x00000008 Записывает журналы всех выделений памяти и выпусков памяти.
DEBUG_CACHE 0x00000010 Действия кэша журналов. Это действие включает в себя добавление, удаление, попадания, промахи и т. д.
DEBUG_SSL 0x00000020 Записывает сведения и ошибки SSL.
DEBUG_SPEWSEARCH 0x00000040 Регистрирует все ответы сервера на поисковые запросы. Эти ответы включают атрибуты, которые были запрошены, а также все полученные данные.
DEBUG_SERVERDOWN 0x00000080 Регистрирует ошибки сервера и подключения.
DEBUG_CONNECT 0x00000100 Записывает данные, связанные с установкой подключения.
Используйте DEBUG_CONNECTION для записи других данных, связанных с подключениями.
DEBUG_RECONNECT 0x00000200 Регистрирует действие автоматического повторного подключения. Это действие включает попытки повторного подключения, ошибки и связанные ошибки.
DEBUG_RECEIVEDATA 0x00000400 Регистрирует действия, связанные с получением сообщений с сервера. Это действие включает такие события, как "ожидание ответа от сервера" и ответ, полученный от сервера.
DEBUG_BYTES_SENT 0x00000800 Записывает все данные, отправленные клиентом LDAP на сервер. Эта функция по сути является ведением журнала пакетов, но всегда регистрирует незашифрованные данные. (Если пакет отправляется по протоколу SSL, эта функция регистрирует незашифрованный пакет.) Это ведение журнала может быть подробным. Этот флаг, вероятно, лучше всего использовать самостоятельно или в сочетании с DEBUG_BYTES_RECEIVED.
DEBUG_EOM 0x00001000 Регистрирует события, связанные с достижением конца списка сообщений. К таким событиям относятся такие сведения, как "список сообщений снят" и т. д.
DEBUG_BER 0x00002000 Журналы операций и ошибок, связанных с основными правилами кодирования (BER). Эти операции и ошибки включают проблемы в кодировке, проблемах размера буфера и т. д.
DEBUG_OUTMEMORY 0x00004000 Регистрирует сбои выделения памяти. Кроме того, регистрирует все ошибки вычисления требуемой памяти (например, переполнение, возникающее при вычислении требуемого размера буфера).
DEBUG_CONTROLS 0x00008000 Записывает данные, связанные с элементами управления. Эти данные включают элементы управления, вставляемые, проблемы, влияющие на элементы управления, обязательные элементы управления для подключения и т. д.
DEBUG_BYTES_RECEIVED 0x00010000 Записывает все данные, полученные клиентом LDAP. Это поведение, по сути, ведение журнала пакетов, но всегда регистрирует незашифрованные данные. (Если пакет отправляется по протоколу SSL, этот параметр регистрирует незашифрованный пакет.) Этот тип ведения журнала может быть подробным. Этот флаг, вероятно, лучше всего использовать самостоятельно или в сочетании с DEBUG_BYTES_SENT.
DEBUG_CLDAP 0x00020000 Регистрирует события, относящиеся к UDP и протоколу LDAP без подключения.
DEBUG_FILTER 0x00040000 Регистрирует события и ошибки, возникающие при создании фильтра поиска.
Обратите внимание, что этот параметр регистрирует события клиента только во время построения фильтра. Он не регистрирует никаких ответов от сервера о фильтре.
DEBUG_BIND 0x00080000 Журналы привязывают события и ошибки. Эти данные включают сведения о согласовании, привязку успешности, сбоя привязки и т. д.
DEBUG_NETWORK_ERRORS 0x00100000 Регистрирует общие сетевые ошибки. Эти данные включают ошибки отправки и получения.
Обратите внимание , что если соединение потеряно или не удается достичь сервера, DEBUG_SERVERDOWN является предпочтительным тегом.
DEBUG_VERBOSE 0x00200000 Регистрирует общие сообщения. Используйте этот параметр для любых сообщений, которые, как правило, создают большое количество выходных данных. Например, он регистрирует сообщения, такие как "конец сообщения достигнут", "сервер еще не ответил", и т. д. Этот параметр также полезен для универсальных сообщений.
DEBUG_PARSE 0x00400000 Регистрирует общие события сообщения и ошибки, а также анализ пакетов и события кодирования и ошибки.
DEBUG_REFERRALS 0x00800000 Записывает данные о рефералах и гонениях за рефералами.
DEBUG_REQUEST 0x01000000 Журналы отслеживания запросов.
DEBUG_CONNECTION 0x02000000 Регистрирует общие данные подключения и ошибки.
DEBUG_INIT_TERM 0x04000000 Журналы инициализации и очистки модуля (DLL Main и т. д.).
DEBUG_API_ERRORS 0x08000000 Поддерживает неправильное использование API для ведения журнала. Например, этот параметр регистрирует данные, если операция привязки вызывается два раза в одном подключении.
DEBUG_ERRORS 0x10000000 Журналы общих ошибок. Большинство этих ошибок можно классифицировать как ошибки инициализации модуля, ошибки SSL, переполнение или недополученные ошибки.
DEBUG_PERFORMANCE 0x20000000 Записывает данные о статистике действий LDAP во время обработки глобальной статистики действий LDAP после получения ответа сервера для запроса LDAP.

Пример

Рассмотрим приложение, App1.exe, которое задает пароли для учетных записей пользователей. Предположим, что App1.exe выдает непредвиденная ошибка. Чтобы использовать ETW для диагностики этой проблемы, выполните следующие действия.

  1. В редакторе реестра создайте следующую запись реестра:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Трассировка\App1.exe

  2. Чтобы запустить сеанс трассировки, откройте окно командной строки и выполните следующую команду:

    tracelog.exe -start ldaptrace -guid \#099614a5-5dd7-4788-8bc9-e29f43db28fc -f .\ldap.etl -flag 0x80000
    

    После запуска этой команды DEBUG_BIND убедитесь, что ETW записывает сообщения трассировки в .\ldap.etl.

  3. Запустите App1.exe и воспроизводит непредвиденное сообщение об ошибке.

  4. Чтобы остановить сеанс трассировки, выполните следующую команду в командной строке:

     tracelog.exe -stop ldaptrace
    
  5. Чтобы предотвратить трассировку приложения другими пользователями, удалите запись реестра HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\для трассировки\ App1.exe\реестра.

  6. Чтобы просмотреть сведения в журнале трассировки, выполните следующую команду в командной строке:

     tracerpt.exe .\ldap.etl -o -report