使用 ETW 對 LDAP 連線進行疑難排解

Windows 事件追蹤 (ETW) 可以是 Active Directory 網域服務 (AD DS) 的寶貴疑難排解工具。 您可以使用 ETW 來追蹤 Windows 用戶端與 LDAP 伺服器之間的輕量型目錄存取通訊協定 (LDAP),包括 AD DS 網域控制站。

如何開啟 ETW 並啟動追蹤

若要開啟 ETW

  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>
    

    此命令中的預留位置代表下列值。

    • <SessionName> 是用來標記追蹤工作階段的任意識別碼。

    注意

    稍後停止追蹤工作階段時,必須參考此工作階段名稱。

    • <FileName> 指定要寫入事件的記錄檔。
    • <TraceFlags> 應是追蹤旗標資料表中所列的一或多個值。

如何結束追蹤工作階段並關閉事件追蹤

若要停止追蹤

  • 在命令提示字元中,執行下列命令:

    tracelog.exe -stop <SessionName>
    

    在此命令中,<SessionName> 與您在 tracelog.exe -start 命令中使用的名稱相同。

若要關閉 ETW

  • 在登錄編輯程式中,刪除 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\ProcessName 子機碼。

追蹤旗標的值

若要使用旗標,請在 tracelog.exe -start 命令的引數中以旗標值取代 <TraceFlags> 預留位置。

注意

您可以使用適當的旗標值總和來指定多個旗標。 例如,若要指定 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 活動統計資料的相關資料。

範例

請考慮設定使用者帳戶密碼的應用程式 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 將追蹤訊息寫入 .\ldap.etl。

  3. 啟動 App1.exe,並重現非預期的錯誤。

  4. 若要停止追蹤工作階段,在命令提示字元中執行下列命令:

     tracelog.exe -stop ldaptrace
    
  5. 若要防止其他使用者追蹤應用程式,請刪除 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\App1.exe 登錄項目。

  6. 若要檢閱追蹤記錄中的資訊,請在命令提示字元中執行下列命令:

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

    注意

    在此命令中,tracerpt.exe追蹤取用者工具。