Utilisation d’ETW pour résoudre les problèmes des connexions LDAP
Le suivi d’événements pour Windows (ETW) peut être un outil de résolution des problèmes précieux pour Active Directory Domain Services (AD DS). Vous pouvez utiliser ETW pour suivre les communications LDAP (Lightweight Directory Access Protocol) entre les clients Windows et les serveurs LDAP, y compris les contrôleurs de domaine AD DS.
Comment activer ETW et démarrer une trace
Pour activer ETW
Ouvrez l’Éditeur du Registre et créez la sous-clé de Registre suivante :
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\ProcessName
Dans cette sous-clé, ProcessName est le nom complet du processus que vous souhaitez suivre, y compris son extension (par exemple, « Svchost.exe »).
(Facultatif) Sous cette sous-clé, créez une nouvelle entrée nommée PID. Pour utiliser cette entrée, attribuez un ID de processus en tant que valeur DWORD.
Si vous spécifiez un ID de processus, ETW trace uniquement l’instance de l’application qui a cet ID de processus.
Pour démarrer une session de suivi
Ouvrez une fenêtre d'invite de commandes et exécutez la commande suivante :
tracelog.exe -start <SessionName> -guid \#099614a5-5dd7-4788-8bc9-e29f43db28fc -f <FileName> -flag <TraceFlags>
Les espaces réservés dans cette commande représentent les valeurs suivantes.
- <SessionName> est un identificateur arbitraire utilisé pour étiqueter la session de suivi.
Notes
Vous devrez vous référer à ce nom de session plus tard lorsque vous arrêterez la session de suivi.
- <FileName> spécifie le fichier journal dans lequel les événements seront écrits.
- <TraceFlags> doit être une ou plusieurs des valeurs répertoriées dans la table indicateurs de trace.
Comment mettre fin à une session de suivi et désactiver le suivi d’événements
Pour arrêter le suivi
À l'invite de commandes, exécutez la commande suivante :
tracelog.exe -stop <SessionName>
Dans cette commande, <SessionName> est le même nom que celui que vous avez utilisé dans la commande tracelog.exe -start.
Pour désactiver ETW
- Dans l’Éditeur du Registre, supprimez la sous-clé ProcessNameHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\.
Valeurs des indicateurs de suivi
Pour utiliser un indicateur, remplacez la valeur de l’indicateur par l’espace réservé <TraceFlags> dans les arguments de la commande tracelog.exe -start.
Notes
Vous pouvez spécifier plusieurs indicateurs à l’aide de la somme des valeurs d’indicateur appropriées. Par exemple, pour spécifier les indicateurs DEBUG_SEARCH (0x00000001) et DEBUG_CACHE (0x00000010), la valeur <TraceFlags> appropriée est 0x00000011.
Nom de l’indicateur | Valeur d’indicateur | Description de l’indicateur |
---|---|---|
DEBUG_SEARCH | 0x00000001 | Consigne les requêtes de recherche et les paramètres qui sont passés à ces requêtes. Les réponses ne sont pas consignées ici. Seules les requêtes de recherche sont consignées. (Utilisez DEBUG_SPEWSEARCH pour consigner les réponses aux requêtes de recherche.) |
DEBUG_WRITE | 0x00000002 | Consigne les requêtes d’écriture et les paramètres transmis à ces requêtes. Les requêtes d’écriture incluent les opérations d’ajout, de suppression, de modification et d’extension. |
DEBUG_REFCNT | 0x00000004 | Consigne les données et les opérations de comptage de référence pour les connexions et les requêtes. |
DEBUG_HEAP | 0x00000008 | Consigne toutes les allocations de mémoire et les libérations de mémoire. |
DEBUG_CACHE | 0x00000010 | Consigne l’activité du cache. Cette activité inclut des ajouts, des suppressions, des accès, des manques, et ainsi de suite. |
DEBUG_SSL | 0x00000020 | Consigne les informations et les erreurs relatives à SSL. |
DEBUG_SPEWSEARCH | 0x00000040 | Consigne toutes les réponses du serveur aux requêtes de recherche. Ces réponses incluent les attributs qui ont été demandés, ainsi que toutes les données reçues. |
DEBUG_SERVERDOWN | 0x00000080 | Consigne les erreurs de connexion et d’arrêt du serveur. |
DEBUG_CONNECT | 0x00000100 | Consigne les données liées à l’établissement d’une connexion. Utilisez DEBUG_CONNECTION pour consigner d’autres données liées aux connexions. |
DEBUG_RECONNECT | 0x00000200 | Consigne l’activité de reconnexion automatique. Cette activité inclut les tentatives de reconnexion, les échecs et les erreurs associées. |
DEBUG_RECEIVEDATA | 0x00000400 | Consigne l’activité liée à la réception de messages du serveur. Cette activité inclut des événements tels que « en attente de la réponse du serveur » et la réponse reçue du serveur. |
DEBUG_BYTES_SENT | 0x00000800 | Consigne toutes les données envoyées par le client LDAP au serveur. Cette fonction consiste essentiellement à enregistrer des paquets, mais elle consigne toujours des données non chiffrées. (Si un paquet est envoyé via SSL, cette fonction consigne le paquet non chiffré.) Cette journalisation peut être détaillée. Cet indicateur est probablement mieux utilisé seul ou combiné avec DEBUG_BYTES_RECEIVED. |
DEBUG_EOM | 0x00001000 | Consigne les événements liés à l’atteinte de la fin d’une liste de messages. Ces événements incluent des informations telles que « liste de messages effacée », etc. |
DEBUG_BER | 0x00002000 | Consigne les opérations et les erreurs liées aux règles d’encodage de base (BER). Ces opérations et erreurs incluent des problèmes d’encodage, des problèmes de taille de la mémoire tampon, etc. |
DEBUG_OUTMEMORY | 0x00004000 | Consigne les échecs d’allocation de mémoire. Consigne également tout échec de calcul de la mémoire requise (par exemple, un dépassement de capacité qui se produit lors du calcul de la taille de la mémoire tampon requise). |
DEBUG_CONTROLS | 0x00008000 | Consigne les données relatives aux contrôles. Ces données incluent les contrôles qui sont insérés, les problèmes qui affectent les contrôles, les contrôles obligatoires sur une connexion, etc. |
DEBUG_BYTES_RECEIVED | 0x00010000 | Consigne toutes les données reçues par le client LDAP. Ce comportement consiste essentiellement à consigner des paquets, mais il enregistre toujours des données non chiffrées. (Si un paquet est envoyé via SSL, cette option consigne le paquet non chiffré.) Ce type de journalisation peut être détaillé. Cet indicateur est probablement mieux utilisé seul ou combiné avec DEBUG_BYTES_SENT. |
DEBUG_CLDAP | 0x00020000 | Consigne les événements spécifiques à UDP et LDAP sans connexion. |
DEBUG_FILTER | 0x00040000 | Consigne les événements et les erreurs rencontrés lors de la construction d’un filtre de recherche. Note Cette option consigne les événements client uniquement pendant la construction du filtre. Elle ne consigne aucune réponse du serveur à propos d’un filtre. |
DEBUG_BIND | 0x00080000 | Consigne les événements et les erreurs de liaison. Ces données incluent des informations de négociation, de réussite de liaison, d’échec de liaison, etc. |
DEBUG_NETWORK_ERRORS | 0x00100000 | Consigne les erreurs réseau générales. Ces données incluent les erreurs d’envoi et de réception. Note Si une connexion est perdue ou si le serveur n’est pas accessible, DEBUG_SERVERDOWN est la balise préférée. |
DEBUG_VERBOSE | 0x00200000 | Consigne les messages généraux. Utilisez cette option pour tous les messages qui ont tendance à générer une grande quantité de sortie. Par exemple, cette option permet de consigner des messages tels que « fin du message atteinte », « le serveur n’a pas encore répondu », etc. Cette option est également utile pour les messages génériques. |
DEBUG_PARSE | 0x00400000 | Consigne les événements et erreurs de message généraux, ainsi que les événements et erreurs d’analyse et d’encodage de paquets. |
DEBUG_REFERRALS | 0x00800000 | Consigne les données relatives aux références et à la recherche de références. |
DEBUG_REQUEST | 0x01000000 | Consigne le suivi des requêtes. |
DEBUG_CONNECTION | 0x02000000 | Consigne les données générales de connexion et les erreurs. |
DEBUG_INIT_TERM | 0x04000000 | Consigne l’initialisation et le nettoyage du module (DLL Main, etc.). |
DEBUG_API_ERRORS | 0x08000000 | Prend en charge la journalisation de l’utilisation incorrecte de l’API. Par exemple, cette option consigne les données si l’opération de liaison est appelée deux fois sur la même connexion. |
DEBUG_ERRORS | 0x10000000 | Consigne les erreurs générales. La plupart de ces erreurs peuvent être classées comme des erreurs d’initialisation de module, des erreurs SSL ou des erreurs de dépassement ou d’insuffisance de capacité. |
DEBUG_PERFORMANCE | 0x20000000 | Consigne des données sur les statistiques d’activité LDAP globales du processus après réception d’une réponse du serveur à une requête LDAP. |
Exemple
Envisagez une application, App1.exe, qui définit des mots de passe pour les comptes d’utilisateur. Supposons que App1.exe génère une erreur inattendue. Pour utiliser ETW pour vous aider à diagnostiquer ce problème, procédez comme suit :
Dans l’Éditeur du Registre, créez l’entrée de Registre suivante :
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\App1.exe
Pour démarrer une session de suivi, ouvrez une fenêtre d’invite de commandes et exécutez la commande suivante :
tracelog.exe -start ldaptrace -guid \#099614a5-5dd7-4788-8bc9-e29f43db28fc -f .\ldap.etl -flag 0x80000
Une fois cette commande démarrée, DEBUG_BIND vérifie que ETW écrit les messages de suivi dans .\ldap.etl.
Démarrez App1.exe et reproduisez l’erreur inattendue.
Pour arrêter la session de suivi, exécutez la commande suivante à l’invite de commandes :
tracelog.exe -stop ldaptrace
Pour empêcher d’autres utilisateurs de tracer l’application, supprimez l’entrée de Registre HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ldap\Tracing\App1.exe.
Pour passer en revue les informations contenues dans le journal de suivi, exécutez la commande suivante à l’invite de commandes :
tracerpt.exe .\ldap.etl -o -report
Notes
Dans cette commande, tracerpt.exe est un outil consommateur de suivi.