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

Windows (ETW) 的事件追蹤,可以是適用于 Active Directory 網域服務 (AD DS) 的重要疑難排解工具。 您可以使用 ETW 來追蹤輕量型目錄存取協定 (ldap) Windows 用戶端與 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>這是用來標示追蹤會話的任意識別碼。

    注意

    稍後當您停止追蹤會話時,您將必須參考此會話名稱。

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

如何結束追蹤會話並關閉事件追蹤

若要停止追蹤

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

    tracelog.exe -stop <SessionName>
    

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

關閉 ETW

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

追蹤旗標的值

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

注意

您可以使用適當旗標值的總和來指定多個旗標。 例如,若要指定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 記錄與基本編碼規則相關的作業和錯誤 (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\追蹤\App1.exe登錄專案。

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

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

    注意

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