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

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

Как включить ETW и запустить трассировку

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

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

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\processName

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

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

    Если указать идентификатор процесса, ETW будет отслеживать только экземпляр приложения с этим ИДЕНТИФИКАТОРом процесса.

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

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

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

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

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

    Примечание

    Вы должны будете обращаться к этому имени сеанса позже, когда вы останавливаете сеанс трассировки.

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

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

Завершение трассировки

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

    tracelog.exe -stop <SessionName>
    

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

Отключение ETW

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

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

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

Примечание

Можно указать несколько флагов, используя сумму соответствующих значений флагов. Например, чтобы указать флаги DEBUG_SEARCH (0x00000001) и DEBUG_CACHE (0x00000010), соответствующее значение флагов трассировки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 Записывает в журнал операции и ошибки, связанные с базовыми правилами кодирования (ЛИЧЕСТВО). Эти операции и ошибки включают проблемы с кодированием, проблемами размера буфера и т. д.
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 и т. д.).
DEBUG_API_ERRORS 0x08000000 Поддерживает ведение журнала неправильного использования API. Например, этот параметр записывает данные в журнал, если операция привязки вызывается два раза в одном соединении.
DEBUG_ERRORS 0x10000000 Регистрирует общие ошибки. Большинство этих ошибок можно классифицировать как ошибки инициализации модулей, ошибки SSL или ошибки переполнения или потери значимости.
DEBUG_PERFORMANCE 0x20000000 Записывает в журнал данные о глобальной статистике действий LDAP после получения ответа от сервера на запрос LDAP.

Пример

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

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

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\App1.exe

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

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

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

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

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

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

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

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

    Примечание

    В этой команде tracerpt.exe является средством для потребителей трассировки .