使用 ETW 對 LDAP 連線進行疑難排解
Windows 事件追蹤 (ETW) 可以是 Active Directory 網域服務 (AD DS) 的寶貴疑難排解工具。 您可以使用 ETW 來追蹤 Windows 用戶端與 LDAP 伺服器之間的輕量型目錄存取通訊協定 (LDAP),包括 AD DS 網域控制站。
如何開啟 ETW 並啟動追蹤
若要開啟 ETW
開啟登錄編輯程式,並建立下列登錄子機碼:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\ProcessName
在此子機碼中,ProcessName 是您要追蹤的處理程序完整名稱,包括其副檔名 (例如「Svchost.exe」)。
(選擇性) 在此子機碼下,建立名為 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 來協助診斷此問題,請遵循下列步驟:
在登錄編輯程式中,建立下列登錄子機碼:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\App1.exe
若要啟動追蹤工作階段,請開啟 [命令提示字元] 視窗,然後執行下列命令:
tracelog.exe -start ldaptrace -guid \#099614a5-5dd7-4788-8bc9-e29f43db28fc -f .\ldap.etl -flag 0x80000
此命令啟動之後,DEBUG_BIND 會確保 ETW 將追蹤訊息寫入 .\ldap.etl。
啟動 App1.exe,並重現非預期的錯誤。
若要停止追蹤工作階段,在命令提示字元中執行下列命令:
tracelog.exe -stop ldaptrace
若要防止其他使用者追蹤應用程式,請刪除 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\App1.exe 登錄項目。
若要檢閱追蹤記錄中的資訊,請在命令提示字元中執行下列命令:
tracerpt.exe .\ldap.etl -o -report
注意
在此命令中,tracerpt.exe 是追蹤取用者工具。