Uso di ETW per la risoluzione dei problemi relativi alle connessioni LDAP
Event Tracing for Windows (ETW) può essere uno strumento prezioso per la risoluzione dei problemi per Active Directory Domain Services (AD DS). È possibile usare ETW per tracciare le comunicazioni Lightweight Directory Access Protocol (LDAP) tra client Windows e server LDAP, inclusi i controller di dominio di Active Directory Domain Services.
Come attivare ETW e avviare una traccia
Per attivare ETW
Aprire l'editor del Registro di sistema e creare la seguente sottochiave del Registro di sistema:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\ProcessName
In questa sottochiave ProcessName è il nome completo del processo che si vuole tracciare, inclusa l'estensione, ad esempio "Svchost.exe".
(Facoltativo) In questa sottochiave creare una nuova voce denominata PID. Per usare questa voce, assegnare un ID processo come valore DWORD.
Se si specifica un ID processo, ETW traccia solo l'istanza dell'applicazione con questo ID processo.
Per avviare una sessione di tracing
Aprire una finestra del prompt dei comandi ed eseguire il comando seguente:
tracelog.exe -start <SessionName> -guid \#099614a5-5dd7-4788-8bc9-e29f43db28fc -f <FileName> -flag <TraceFlags>
I segnaposto in questo comando rappresentano i valori seguenti.
- <SessionName> è un identificatore arbitrario usato per etichettare la sessione di tracing.
Nota
Sarà necessario fare riferimento a questo nome di sessione in un secondo momento quando si arresta la sessione di tracing.
- <FileName> specifica il file di log in cui verranno scritti gli eventi.
- I <TraceFlags> devono essere uno o più dei valori elencati nella tabella dei flag di tracing.
Come terminare una sessione di tracing e disattivare Tracing eventi
Per interrompere il tracing
Al prompt dei comandi eseguire il comando seguente:
tracelog.exe -stop <SessionName>
In questo comando <SessionName> è lo stesso nome usato nel comando tracelog.exe -start.
Per disattivare ETW
- Nell'editor del Registro di sistema eliminare la sottochiave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\ProcessName.
Valori per i flag di tracing
Per usare un flag, sostituire il valore del flag per il <TraceFlags> segnaposto negli argomenti del comando tracelog.exe -start.
Nota
È possibile specificare più flag usando la somma dei valori di flag appropriati. Ad esempio, per specificare i flag DEBUG_SEARCH (0x00000001) e DEBUG_CACHE (0x00000010), il valore < TraceFlags> appropriato è 0x00000011.
Nome flag | Valore flag | Descrizione flag |
---|---|---|
DEBUG_SEARCH | 0x00000001 | Registra le richieste di ricerca e i parametri passati a tali richieste. Le risposte non vengono registrate qui. Vengono registrate solo le richieste di ricerca. (Usare DEBUG_SPEWSEARCH per registrare le risposte alle richieste di ricerca.) |
DEBUG_WRITE | 0x00000002 | Registra le richieste di scrittura e i parametri passati a tali richieste. Le richieste di scrittura includono le operazioni di aggiunta, eliminazione, modifica ed estensione. |
DEBUG_REFCNT | 0x00000004 | Registra i dati e le operazioni di conteggio dei riferimenti per le connessioni e le richieste. |
DEBUG_HEAP | 0x00000008 | Registra tutte le allocazioni di memoria e le versioni di memoria. |
DEBUG_CACHE | 0x00000010 | Registra l'attività della cache. Questa attività include aggiunta, rimozione, riscontri, mancati riscontri e così via. |
DEBUG_SSL | 0x00000020 | Registra le informazioni e gli errori SSL. |
DEBUG_SPEWSEARCH | 0x00000040 | Registra tutte le risposte del server alle richieste di ricerca. Queste risposte includono gli attributi richiesti, oltre a tutti i dati ricevuti. |
DEBUG_SERVERDOWN | 0x00000080 | Registra gli errori di connessione e di arresto del server. |
DEBUG_CONNECT | 0x00000100 | Registra i dati correlati alla creazione di una connessione. Usare DEBUG_CONNECTION per registrare altri dati correlati alle connessioni. |
DEBUG_RECONNECT | 0x00000200 | Registra l'attività di riconnessione automatica. Questa attività include tentativi di riconnessione, errori ed errori correlati. |
DEBUG_RECEIVEDATA | 0x00000400 | Registra l'attività correlata alla ricezione di messaggi dal server. Questa attività include eventi come "in attesa della risposta dal server" e la risposta ricevuta dal server. |
DEBUG_BYTES_SENT | 0x00000800 | Registra tutti i dati inviati dal client LDAP al server. Questa funzione è essenzialmente la registrazione dei pacchetti, ma registra sempre dati non crittografati. (Se un pacchetto viene inviato tramite SSL, questa funzione registra il pacchetto non crittografato.) Questa registrazione può essere dettagliata. Questo flag è probabilmente meglio usato autonomamente o combinato con DEBUG_BYTES_RECEIVED. |
DEBUG_EOM | 0x00001000 | Registra gli eventi correlati al raggiungimento della fine di un elenco di messaggi. Questi eventi includono informazioni come "elenco di messaggi cancellati" e così via. |
DEBUG_BER | 0x00002000 | Registra operazioni ed errori correlati alle regole di codifica di base (BER). Queste operazioni ed errori includono problemi di codifica, dimensioni del buffer e così via. |
DEBUG_OUTMEMORY | 0x00004000 | Registra gli errori di allocazione della memoria. Registra anche eventuali errori di calcolo della memoria necessaria, ad esempio un overflow che si verifica durante il calcolo delle dimensioni del buffer necessarie. |
DEBUG_CONTROLS | 0x00008000 | Registra i dati correlati ai controlli. Questi dati includono controlli inseriti, problemi che influiscono sui controlli, sui controlli obbligatori su una connessione e così via. |
DEBUG_BYTES_RECEIVED | 0x00010000 | Registra tutti i dati ricevuti dal client LDAP. Questo comportamento è essenzialmente la registrazione dei pacchetti, ma registra sempre dati non crittografati. (Se un pacchetto viene inviato tramite SSL, questa opzione registra il pacchetto non crittografato.) Questo tipo di registrazione può essere dettagliato. Questo flag è probabilmente meglio usato autonomamente o combinato con DEBUG_BYTES_SENT. |
DEBUG_CLDAP | 0x00020000 | Registra eventi specifici per UDP e LDAP senza connessione. |
DEBUG_FILTER | 0x00040000 | Registra gli eventi e gli errori rilevati quando si crea un filtro di ricerca. Nota Questa opzione registra gli eventi client solo durante la creazione del filtro. Non registra alcuna risposta dal server in merito a un filtro. |
DEBUG_BIND | 0x00080000 | I log associano eventi ed errori. Questi dati includono informazioni sulla negoziazione, associazione riuscita, errore di associazione e così via. |
DEBUG_NETWORK_ERRORS | 0x00100000 | Registra errori di rete generali. Questi dati includono errori di invio e ricezione. Nota Se una connessione viene persa o non è possibile raggiungere il server, DEBUG_SERVERDOWN è il tag preferito. |
DEBUG_VERBOSE | 0x00200000 | Registra i messaggi generali. Usare questa opzione per tutti i messaggi che tendono a generare una grande quantità di output. Ad esempio, registra messaggi come "fine del messaggio raggiunta", "il server non ha ancora risposto" e così via. Questa opzione è utile anche per i messaggi generici. |
DEBUG_PARSE | 0x00400000 | Registra gli eventi e gli errori generali dei messaggi, oltre all'analisi dei pacchetti e alla codifica di eventi ed errori. |
DEBUG_REFERRALS | 0x00800000 | Registra i dati sulle segnalazioni. |
DEBUG_REQUEST | 0x01000000 | Registra il rilevamento delle richieste. |
DEBUG_CONNECTION | 0x02000000 | Registra i dati e gli errori di connessione generali. |
DEBUG_INIT_TERM | 0x04000000 | Registra l'inizializzazione e la pulizia del modulo (DLL Main e così via). |
DEBUG_API_ERRORS | 0x08000000 | Supporta la registrazione di un uso non corretto dell'API. Ad esempio, questa opzione registra i dati se l'operazione di associazione viene richiamata due volte nella stessa connessione. |
DEBUG_ERRORS | 0x10000000 | Registra gli errori generali. La maggior parte di questi errori può essere categorizzata come errori di inizializzazione del modulo, errori SSL o errori di overflow o underflow. |
DEBUG_PERFORMANCE | 0x20000000 | Registra i dati sulle statistiche sulle attività LDAP globali del processo dopo aver ricevuto una risposta del server per una richiesta LDAP. |
Esempio
Si consideri un'applicazione, App1.exe, che imposta le password per gli account utente. Si supponga che App1.exe produca un errore imprevisto. Per usare ETW per diagnosticare questo problema, seguire questa procedura:
Nell'editor del Registro di sistema creare la voce del Registro di sistema seguente:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\App1.exe
Per avviare una sessione di tracing, aprire una finestra del prompt dei comandi ed eseguire il comando seguente:
tracelog.exe -start ldaptrace -guid \#099614a5-5dd7-4788-8bc9-e29f43db28fc -f .\ldap.etl -flag 0x80000
Dopo l'avvio di questo comando, DEBUG_BIND verifica che ETW scriva i messaggi di tracing in .\ldap.etl.
Avviare App1.exe e riprodurre l'errore imprevisto.
Per arrestare la sessione di tracing, eseguire il comando seguente al prompt dei comandi:
tracelog.exe -stop ldaptrace
Per impedire ad altri utenti di tracciare l'applicazione, eliminare il voce del Registro di sistema HKEY_LOCAL_MACHINE\Sistema\CurrentControlSet\Servizi\ldap\Tracing\App1.exe.
Per esaminare le informazioni nel log di tracing, eseguire il comando seguente al prompt dei comandi:
tracerpt.exe .\ldap.etl -o -report
Nota
In questo comando tracerpt.exe è uno strumento di trace consumer.