Dépannage du suivi d'.NET s sur Docker

Si le traçage ne fonctionne pas comme prévu, commencez par suivre les étapes générales de dépannage avant de passer à des cas particuliers.

identification et résolution des problèmes généraux

Procédez comme suit :

  1. Vérifier les conditions préalables :

    • Vérifiez la compatibilité de la version d'.NET : assurez-vous que votre application fonctionne sur .NET Core Runtime 5.0 ou une version ultérieure.
    • Vérifiez que l'agent d' Instana ation est en cours d'exécution et accessible depuis le conteneur :

      • Vérifiez l'état de l'agent dans l'interface utilisateur d' Instana.
      • Vérifiez la connectivité réseau depuis l'intérieur du conteneur vers l'hôte et le port de l'agent.
  2. Vérifiez que les modules de traçage d' Instana s suivants sont installés et à jour :

    • Instana.Tracing.Core
    • Instana.Tracing.Core.Rewriter.Linux
  3. Assurez-vous que les variables d'environnement suivantes, essentielles à l' Instana, sont correctement définies dans la configuration de votre Docker :

    INSTANA_AGENT_HOST=<instana-agent-host>
    INSTANA_AGENT_PORT=42699
    CORECLR_ENABLE_PROFILING=1
    CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916dd}
    CORECLR_PROFILER_PATH=/opt/instana/netcore/Instana.Tracing.Profiler.Native.so
  4. Vérifiez si IL-Rewriter est correctement chargé :

    1. Vérifiez les journaux d'application pour voir s'ils contiennent des messages d'initialisation d'IL-Rewriter. Résultat attendu en cas de réussite :

      *Initializing Instana IL-Rewriter for .NET Core*
      *Logging path is not set*
      *Loading configuration-file /app/instana_tracing/instrumentation.json*
      Remarque : le chemin d'accès peut varier en fonction de votre environnement.
    2. Si les lignes IL-Rewriter n'apparaissent pas, assurez-vous que toutes les variables d'environnement requises CORECLR sont correctement définies et accessibles à l'application.

      • CORECLR_ENABLE_PROFILING
      • CORECLR_PROFILER_PATH
      • CORECLR_PROFILER
  5. Vérifiez que les diagnostics sont activés pour l'.NET : assurez-vous que les variables COMPlus_EnableDiagnostics d'environnement et DOTNET_EnableDiagnostics sont définies sur 1. Si ces options sont désactivées, IL-Rewriter ne peut pas se connecter au processus; par conséquent, les appels ne peuvent pas être réécrits et aucune trace ne peut être générée.

Dépannage spécifique à chaque cas

Si les étapes de dépannage générales ne permettent pas de résoudre votre problème, consultez les scénarios de dépannage suivants :

Scénario 1 : Traces ou portées manquantes

Symptômes : l'application affiche des métriques mais pas de traces; certains services génèrent des rapports tandis que d'autres n'en génèrent pas; ou encore, le traçage s'arrête après un déploiement ou une mise à jour.

Procédure de résolution des incidents :

  1. Vérifiez que la version de l'application disponible sur .NET est prise en charge :

    • .NET Core Environnement d'exécution : 5.0 ou version ultérieure
  2. Vérifiez que les variables d'environnement sont bien présentes dans le fichier Dockerfile, conformément à l'exemple de configuration fourni dans la section « Configuration du traçage d'.NET » sur Docker.
  3. Vérifiez que les chemins d'accès utilisés pour les variables d'environnement sont valides, accessibles par le processus ou l'application, et corrects.
  4. Vérifiez que la fonction de traçage est activée dans le fichier de l'agent configuration.yaml .
  5. Récupérez les journaux de trace en suivant les méthodes décrites dans la section « Récupération des journaux ».
  6. Consultez les journaux de traçage de l' Instana :

    • Si les journaux sont vides ou si aucune trace n'apparaît, cela signifie que l'application ne génère pas de segments.
    • Si des traces apparaissent dans les journaux mais que certaines informations (par exemple, l'hôte) sont manquantes, le problème provient du traçage de l'.NET.
    • Si des traces apparaissent dans les journaux et contiennent des informations qui ne figurent pas dans l'interface utilisateur, cela signifie que le problème s'est produit soit au niveau du backend d' Instana, soit au niveau de l'agent.

Scénario 2 : le conteneur d'applications plante après l'ajout de l'agent d' Instana

Symptôme : le conteneur d'application plante après l'ajout de l'agent « Instana », mais fonctionne normalement une fois cet agent supprimé.

Procédure de résolution des incidents :

  1. Vérifiez que la version de l'application disponible sur .NET est prise en charge :

    • .NET Core Environnement d'exécution : 5.0 ou version ultérieure
  2. Récupérer les journaux des conteneurs :

    docker logs <container_name_or_id> > container.log
  3. Récupérer les fichiers de vidage en vue d'une analyse plus approfondie :

    docker exec -it <container> \
    /usr/share/dotnet/shared/Microsoft.NETCore.App/*/createdump \
    -p 1 \
    -o /tmp/sampleapp.dmp
  4. Vérifiez si les journaux contiennent des exceptions indiquant que le service « Instana » pourrait être à l'origine d'un problème.

Collecte des journaux

Log Collector ne fonctionne pas avec les applications hébergées dans des conteneurs d' Docker. Par conséquent, les journaux doivent être collectés manuellement.

Instana propose les méthodes suivantes pour collecter manuellement les journaux :

Collecte manuelle des journaux

Procédez comme suit :

  1. Activez les journaux de débogage en ajoutant les variables d'environnement suivantes à votre Dockerfile :

    Remarque : assurez-vous que les chemins d'accès sont valides, accessibles par le processus ou l'application, et corrects.
    ENV INSTANA_LOG_SPANS=1
    ENV INSTANA_DEBUG_TRACER=1
    ENV INSTANA_NET_LOG_PATH="<Log_path>"
    ENV INSTANA_NET_LOG_LEVEL=DEBUG
    ENV INSTANA_TRACER_ENTEREXIT_LOGGING=1
    ENV INSTANA_EXTENDED_DEBUG=1
    ENV INSTANA_CLRLOG_PATH=/var/tmp/clr_
  2. Redémarrez l'application et effectuez des appels.
  3. Recueillez et examinez les journaux suivants :

    • Journaux de débogage CLR
    • Instana journaux de débogage de l'agent
    • Instana l'agent enregistre les journaux
    • Docker journaux des conteneurs
  4. Pour collecter les journaux de l'agent d' Instana, procédez comme suit :

    1. Arrêtez l'agent :

      systemctl stop instana-agent.service
    2. Supprimer les fichiers journaux : effacez tous les fichiers du répertoire des journaux pour repartir de zéro en exécutant la commande suivante :

      sudo rm -rf /data/logs/*
    3. Régler le niveau de journalisation sur « Debug » : modifiez le niveau de gravité de la journalisation dans le fichier de l'agent configuration.yaml . Pour plus d'informations, consultez la section « Configuration du fichier de configuration de l'agent ».
    4. Démarrez l'agent.
    5. Reproduire le problème : laissez le problème se produire et laissez l'agent fonctionner pendant environ 15 minutes.

    L'agent d' Instana e envoie ses journaux vers la console, qui est gérée par Docker et accessible via les journaux de Docker.

  5. Pour collecter les journaux de trace d' Instana, procédez comme suit :

    1. com.instana.agent.main.sender.File.cfgGo pour [agent-dir]\etc\instana et ouvrir le fichier.
    2. Ajoutez les lignes suivantes dans le fichier :

      prefix=instanaTraces
      type=traces

      Cette configuration vous fournit un fichier journal contenant toutes les traces commençant [agent-dir]/data/log par le instanaTraces préfixe.

    3. Redémarrez l'agent d' Instana.
    4. Redémarrez l'application.
    5. Laissez le produit agir pendant environ 15 minutes.
    6. Récupérez les fichiers journaux dans les chemins d'accès suivants :

      • Chemin indiqué par la variable INSTANA_NET_LOG_PATH
      • instana-agent-installation-folder/data/log
  6. Pour collecter les journaux du conteneur d' Docker, exécutez la commande suivante :

    docker logs <container_name_or_id> > container.log

Collecte manuelle des journaux à l'aide du montage de volume « bind » d' Docker (méthode recommandée)

Pour collecter les journaux Tracer d'.NET s et les journaux de débogage CLR, utilisez un montage lié de type « Docker » avec un chemin d'accès hôte existant.

Procédez comme suit :

  1. Assurez-vous de disposer d'un chemin d'accès hôte valide avec des droits d'écriture pour le conteneur.
  2. Exécutez votre conteneur Docker en veillant à ce que les variables d'environnement « Bind Mount » et « .NET » (traceur et chemin du journal de débogage CLR) pointent vers le chemin mappé, comme indiqué dans l'exemple suivant :

    Remarque : assurez-vous que les chemins d'accès sont valides, accessibles par le processus ou l'application, et corrects.
    docker run -d \
        -p 8080:8080 \
        -v /var/log/instana:/var/tmp \
        --env=INSTANA_CLRLOG_PATH="/var/tmp/clr_" \
        --env=INSTANA_NET_LOG_PATH="/var/tmp" \
        --name sampleapp \
        myuser/sampleapp:v2.0
  3. Redémarrez l'application et effectuez des appels.
  4. /var/log/instanaRécupérer les journaux à partir du chemin d'accès de l'hôte.

Ouverture d'un ticket de demande de service

Si le problème persiste après avoir suivi ces étapes de dépannage, veuillez recueillir des données d' MustGather s avant d'ouvrir un ticket d'assistance. MustGather Ces données permettent au service d'assistance d' IBM de diagnostiquer votre problème plus efficacement.

Pour plus d'informations, consultez MustGather:, Instana, .NET et Tracer - Docker.