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

  1. 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".

  2. (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:

  1. Nell'editor del Registro di sistema creare la voce del Registro di sistema seguente:

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

  2. 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.

  3. Avviare App1.exe e riprodurre l'errore imprevisto.

  4. Per arrestare la sessione di tracing, eseguire il comando seguente al prompt dei comandi:

     tracelog.exe -stop ldaptrace
    
  5. 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.

  6. 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.