Activation et configuration du traçage PHP

Par défaut, la traçabilité de PHP est activée dans le fichier de configuration de l'agent. Lorsque le traçage PHP est activé, le capteur PHP installe automatiquement le traceur PHP (également appelé extension Instana PHP Tracing) dans votre moteur d'exécution PHP.

Note : Les termes PHP Tracer et PHP Tracing extension sont utilisés de manière interchangeable dans ce document.

Configuration requise

Le capteur PHP n'active la traçabilité que si l'exécution PHP détectée prend en charge l' extension JSON. Si l'une des extensions suivantes est détectée dans une exécution PHP, l'installation de PHP Tracer est automatiquement désactivée :

  • SourceGuardian
  • New Relic
  • Dynatrace
  • Datadog

Si l'extension ionCube Loader est détectée dans une exécution PHP, le traceur PHP est installé avec le traçage de PHP désactivé.

Processus de traçage PHP

Lorsque le traçage PHP est activé dans le fichier de configuration de l'agent, le processus d'installation et de configuration de l'extension PHP Tracing est géré automatiquement par le capteur PHP, comme indiqué dans les étapes suivantes :

  1. Le capteur PHP télécharge l'extension PHP Tracing et l'active dans la configuration INI du runtime PHP comme suit :

    • Si le runtime PHP est configuré avec un répertoire séparé pour les fichiers INI supplémentaires, le capteur PHP place un fichier zzz-instana.ini contenant les paramètres INI de l'extension PHP Tracing dans ce répertoire.
    • Sinon, le capteur PHP configure PHP Tracer en ajoutant les paramètres INI au fichier principal php.ini .

    Ne modifiez pas zzz-instana.ini car le capteur PHP l'écrase à chaque installation en fonction des configurations du fichier configuration.yaml de l'agent Instana.

  2. Le capteur PHP tente alors de redémarrer l'environnement PHP afin de charger l'extension PHP Tracing en mémoire.

  3. Si l'exécution de PHP est redémarrée avec succès, l'extension PHP Tracing commence à collecter des traces dans l'exécution de PHP.

  4. Si le redémarrage automatique ne fonctionne pas en raison du type SAPI de l'exécution de PHP, vous devez redémarrer manuellement PHP pour charger l'extension PHP Tracing en mémoire. Pour plus d'informations sur l'automatisation du redémarrage de PHP, voir Redémarrages automatiques.

  5. Le capteur PHP génère des valeurs par défaut raisonnables pour les paramètres INI de l'extension PHP Tracing. Cependant, vous pouvez ajuster ces paramètres pour répondre à des besoins très spécifiques. Pour plus d'informations, voir Personnalisation avancée.

Si vous rencontrez des problèmes lors de l'installation automatique de l'extension PHP Tracing, vous pouvez également l'installer manuellement. Pour plus d'informations, voir Installation manuelle de l'extension PHP Tracing.

Personnalisation avancée

Le capteur PHP écrase fréquemment zzz-instana.ini, ne modifiez donc pas ce fichier INI. Au lieu de cela, vous pouvez ajouter votre propre fichier INI personnalisé qui remplace les paramètres INI par défaut d'Instana dans zzz-instana.ini. PHP charge les fichiers INI dans l'ordre alphanumérique, la dernière occurrence d'un paramètre étant la valeur effective. Pour vous assurer que les paramètres INI de votre fichier INI personnalisé remplacent les paramètres INI de zzz-instana.ini, nommez votre fichier INI personnalisé zzzzz-instana-extras.ini (remarquez le préfixe zzzzz-) de manière à ce qu'il se charge après zzz-instana.ini. Dans les scénarios de conteneurisation, votre fichier INI personnalisé peut être monté dynamiquement ou faire partie de l'image.

Les paramètres suivants sont disponibles pour toutes les versions de PHP :

  • instana.batch_threshold_us : seuil de longueur et de distance afférant au traitement par lots des étendues. La valeur par défaut est 10.000.
  • instana.backtrace_limit : contrôle la profondeur des piles d'appels enregistrées. La valeur par défaut ou plafonnée est de 25 entrées.
  • instana.disabled_instrumentation (obsolète) : Spécifie un masque de bits d'instrumentations à désactiver. La valeur par défaut est 0 (aucun). Pour plus de détails, voir la section Désactivation de l'instrumentation. Ce paramètre INI est obsolète et remplacé par la fonction de désactivation de la portée, qui offre une meilleure configurabilité de la désactivation de l'instrumentation.
  • instana.disable_userland_tracing: Désactive le traçage des extensions PHP non natives et du code utilisateur PHP comme les frameworks. La valeur par défaut est 0 (off).
  • instana.enable_cli: Activer ou désactiver le traçage pour le CLI SAPI. 1 = activé. 0 = désactivé. La valeur par défaut est 0 (off).
  • instana.log_level: Niveau d'enregistrement : 0 = off, 1 = ERROR, 2 = WARN, 3 = INFO et 4 = DEBUG. La valeur par défaut est 0 (off).
  • instana.segfault_error_log: Capturer ou éviter un backtrace vers le journal d'erreur de PHP sur les segfaults. La valeur par défaut est 0 (off).
  • instana.span_chunk_size: Le nombre de travées à conserver dans la mémoire de PHP avant qu'elles ne soient envoyées à l'agent. Ce nombre a une incidence directe sur la mise en lots. Par exemple, les morceaux d'un désactivent effectivement la mise en lot.

Les paramètres suivants sont exclusifs à PHP 5 :

  • instana.socket: L'adresse du socket TCP du capteur Instana PHP. L'adresse du socket est déterminée lors de l'installation et la valeur par défaut est tcp://127.0.0.1:16816.

Les paramètres suivants sont exclusifs à PHP 7.0 et aux versions ultérieures :

  • instana.buffer_hard_limit: Nombre maximal de travées à conserver dans la mémoire tampon si l'agent ne répond plus. Les plages commençant par la plus ancienne sont abandonnées jusqu'à ce que la mémoire tampon soit contenue dans cette limite. La valeur par défaut est 1000.
  • instana.buffer_maximum_delay_ms: Intervalle maximal entre les dégagements successifs d'un tampon de portée. La valeur par défaut est de 1000 ms.
  • instana.buffer_soft_limit: Nombre maximal de travées à mettre en mémoire tampon avant que la mémoire tampon d'une travée ne soit effacée. La valeur par défaut est 500.

Les paramètres suivants sont exclusifs à PHP 8.1 et aux versions ultérieures :

  • instana.span_filter_config_file: Spécifie le chemin absolu du fichier YAML qui contient la configuration pour désactiver les traces. Le capteur PHP met à jour ce paramètre pour permettre la désactivation du span via le fichier de l'agent configuration.yaml . La valeur par défaut est <System_Temp>/instana-php/instana_span_filter_config.yaml. Pour plus de détails sur ce paramètre, voir la section Configuration supplémentaire.

Le tableau suivant est une liste complète des variables d'environnement pour la configuration de l'extension PHP :

Variable d"environnement Valeur par défaut
INSTANA_AGENT_HOST 127.0.0.1
INSTANA_AGENT_PORT 42699
INSTANA_SERVICE_NAME VIDE
INSTANA_DEBUG OFF
INSTANA_STACK_TRACE_LENGTH 25
INSTANA_EXTRA_HTTP_HEADERS AUCUN
INSTANA_SECRETS password, key, secret
INSTANA_LOG_LEVEL AUCUN

La présence de ces variables d'environnement aura la priorité sur les configurations dans zzz-instana.ini. Pour plus d'informations, voir les variables d'environnement.

Si vous avez besoin d'aide pour ces réglages, contactez le service d'assistance IBM.

Capturer les en-têtes personnalisés de HTTP

PHP Tracer peut capturer des en-têtes HTTP personnalisés dans les portées d'entrée et de sortie. Pour capturer ces en-têtes, spécifiez la liste des en-têtes dans l'une des configurations suivantes :

  • Paramètres PHP INI :

    instana.extra_http_headers=HEADER1,HEADER2

  • Configuration des variables d'environnement :

    INSTANA_EXTRA_HTTP_HEADERS=HEADER1;HEADER2

Vous pouvez également capturer les en-têtes HTTP de chaque requête ou réponse suivie en définissant la liste des en-têtes dans le fichier configuration.yaml de l'agent. Pour plus d'informations, voir Capturer les en-têtes personnalisés de HTTP

Le traceur PHP préserve les espaces dans les clés et les valeurs de l'en-tête.

Désactivation des travées

Le traceur PHP permet de désactiver les traces ou les spans pour un type de span spécifique (frameworks, librairies et instrumentations) ou pour des groupes entiers de librairies (catégorie de span). Grâce à cette fonction de désactivation de l'étendue, vous pouvez personnaliser le traçage en fonction des besoins de votre application, ce qui permet de réduire les coûts du réseau en ne signalant que les traces essentielles à votre application.

Utilisez l'une des méthodes suivantes pour fournir la configuration permettant de désactiver le traçage :

Note : Si vous activez cette fonctionnalité pour la première fois ou à partir d'une configuration YAML vide, assurez-vous de redémarrer le moteur d'exécution PHP après avoir mis à jour la configuration. Une fois redémarrée, toute modification future de la configuration est appliquée sans qu'il soit nécessaire de redémarrer à nouveau.

Des étapes supplémentaires sont nécessaires pour configurer la désactivation de span dans les serveurs Apache et IIS. Pour plus de détails, voir Configuration supplémentaire. Pour plus de détails sur la façon dont Instana priorise la désactivation des travées, voir Configuration precedence for disabling spans (Priorité de configuration pour la désactivation des travées ).

Configuration à l'aide de variables d'environnement

Pour désactiver le traçage par l'intermédiaire d'une variable d'environnement, définissez la variable d'environnement INSTANA_CONFIG_PATH au chemin absolu du fichier YAML contenant votre configuration.

Par exemple, pour désactiver le suivi de tous les appels de bases de données (à l'exception de MongoDB ) et de tous les cadres de journalisation, copiez le code suivant dans un fichier YAML distinct :

tracing:
  disable:
    - databases: true
    - mongodb: false
    - logging: true
 

Définissez la variable d'environnement INSTANA_CONFIG_PATH au chemin absolu du fichier YAML dans lequel le contenu est placé comme suit :

INSTANA_CONFIG_PATH=<your YAML file>
 
Note : Comme le contenu du fichier de configuration est surveillé pour appliquer les changements en temps réel, placez le fichier dans un répertoire dédié pour réduire les activités inutiles des API de surveillance des fichiers qui pourraient entraîner une consommation élevée de CPU par le processus PHP.

Configuration par l'intermédiaire de l'agent Instana

Pour désactiver le traçage via la configuration de l'agent Instana, désactivez les traces dans la section com.instana.tracing.disable du fichier de l'agent configuration.yaml .

Pour désactiver le suivi de tous les appels de base de données (à l'exception de Redis ) et de tous les cadres de journalisation, mettez à jour la section com.instana.tracing dans le fichier configuration.yaml de votre agent, comme indiqué dans l'exemple suivant :

com.instana.tracing:
  disable:
    - databases: true
    - redis: false
    - logging: true
 

Pour plus d'informations sur la personnalisation de la configuration, voir Désactivation du suivi.

La désactivation du traçage pour une catégorie désactive la génération de span pour toutes les bibliothèques de cette catégorie. Voir la liste suivante des catégories supportées par PHP Tracer :

Priorité de configuration pour la désactivation des travées

Les règles de désactivation des travées sont appliquées dans l'ordre de priorité suivant, du plus élevé au plus bas :

  1. Désactivation des règles d'épandage à partir du fichier de configuration qui est transmis par la variable d'environnement INSTANA_CONFIG_PATH la variable d'environnement.
  2. Désactivation du span configurée dans le paramètre instana.disabled_instrumentation ini.
  3. Désactivation des règles d'épandage à partir du fichier de l'agent configuration.yaml .

Cette priorité est appliquée au niveau de l'élément. Si un moteur d'exécution PHP détecte plusieurs configurations dans une fonctionnalité, il applique les règles de désactivation du span à partir de la configuration ayant la priorité la plus élevée. Par exemple, si un moteur d'exécution PHP a les règles suivantes de désactivation de la portée, définies par la variable d'environnement INSTANA_CONFIG_PATH variable d'environnement :

com.instana.tracing:
  disable:
    - logging: true
    - databases: true
    - redis: false
 

Et le même runtime a le paramètre ini suivant :

instana.disabled_instrumentation=24 ; disables redis (16) and curl (8) instrumentations
 

Avec cet exemple de configuration, le traceur PHP fonctionne comme suit :

  • Le suivi de toutes les bibliothèques de journalisation est désactivé.
  • Le suivi de toutes les bases de données est désactivé, à l'exception de Redis.

Le paramètre instana.disabled_instrumentation ini est ignoré car la variable d'environnement est prioritaire INSTANA_CONFIG_PATH a la priorité sur la variable d'environnement. Par conséquent, tous les instruments qui ne sont pas désactivés par le fichier de configuration spécifié par la variable d'environnement INSTANA_CONFIG_PATH sont activées.

Si les règles de désactivation du span sont définies à la fois par la variable d'environnement INSTANA_CONFIG_PATH et le fichier configuration.yaml de l'agent, les règles du fichier configuration.yaml sont ignorées.

Configuration additionnelle

Le capteur PHP détecte tout changement dans le fichier de l'agent configuration.yaml et effectue une copie de la section com.instana.tracing.disable dans un fichier distinct situé à l'adresse <System Temp>/instana-php/instana_span_filer_config.yaml. Le chemin absolu du fichier généré est défini dans le paramètre instana.span_filter_config_file ini afin que PHP Tracer puisse détecter et appliquer toute modification ultérieure du fichier configuration.yaml sans avoir à redémarrer l'exécution de PHP. Par conséquent, le programme d'exécution PHP doit avoir un accès en lecture au dossier temp du système, si vous configurez des règles de désactivation de span par le biais du fichier de l'agent configuration.yaml .

Les sous-sections suivantes fournissent les étapes supplémentaires qui sont nécessaires dans certains environnements pour que l'exécution de PHP ait un accès suffisant au dossier temp du système.

Apache serveur

Apache sur un système d'exploitation basé sur Linux peut être configuré pour avoir un dossier temporaire isolé au lieu d'utiliser le dossier temporaire du système. Pour que le traceur PHP puisse accéder au fichier de configuration situé dans le dossier temporaire du système, assurez-vous que l'adresse PrivateTmp est définie sur false en effectuant les étapes suivantes :

  1. Modifiez le fichier Systemd unit en exécutant la commande suivante :

    sudo systemctl edit apache2.service
     
  2. Ajouter ou mettre à jour la propriété PrivateTmp dans la section Service :

    [Service]
    PrivateTmp=false
     
  3. Redémarrez le serveur Apache pour appliquer les modifications.

Pour éviter de mettre à jour le site PrivateTmp, vous pouvez configurer les règles de désactivation des travées à l'aide d'une variable d'environnement.

IIS Server

Les processus de travail IIS n'ont parfois pas accès au dossier temporaire de Windows. Cet accès insuffisant au dossier temporaire est dû au fait que l'identité du pool d'applications utilisé pour exécuter les processus de travail n'a pas les droits de lecture ou d'écriture suffisants sur le dossier temporaire. Pour résoudre ce problème d'accès, procédez comme suit :

  1. Confirmez l'identité de votre pool d'applications en exécutant la commande suivante dans votre terminal PowerShell :

    & $env:windir\system32\inetsrv\appcmd.exe list apppool <your AppPool> /text:processModel.identityType
     
  2. Si l'identité n'est pas ApplicationPoolIdentity, exécutez la commande suivante pour mettre à jour l'identité :

    & $env:windir\system32\inetsrv\appcmd.exe set AppPool <your AppPool> -processModel.identityType:ApplicationPoolIdentity
     
  3. Redémarrez votre pool d'applications pour appliquer les modifications :

    & $env:windir\system32\inetsrv\appcmd.exe recycle apppool <your AppPool>
     

    Le serveur IIS détecte le pool d'applications fonctionnant avec l'identité ApplicationPoolIdentity, et crée un utilisateur virtuel avec le nom de votre pool d'applications.

  4. Pour donner à l'exécution de PHP, c'est-à-dire aux processus de travail IIS, un accès en lecture au répertoire <SYSTEM_TEMP> , utilisez la commande suivante :

    
    icacls "<SYSTEM_TEMP>" /grant "IIS APPPOOL\<your AppPool>:(OI)(CI)R" /T /C
     

Désactivation de l'instrumentation

Pour désactiver l'instrumentation d'une bibliothèque spécifique ou d'un ensemble de bibliothèques dans les paramètres PHP ini, utilisez le paramètre instana.disabled_instrumentation . Il prend la valeur du masque de bits des bibliothèques pour lesquelles vous souhaitez désactiver le traçage. Pour obtenir les valeurs des masques de bits des bibliothèques, reportez-vous à la colonne Instrumentation flag située dans la section " Instrumented libraries and frameworks".

Pour désactiver l'instrumentation pour plusieurs bibliothèques, ajoutez les valeurs Instrumentation flag correspondantes. Par exemple, pour désactiver le suivi des appels à MongoDB (avec l'indicateur d'instrumentation : 32) et des appels au magasin de données Redis (avec l'indicateur d'instrumentation : 16), ajoutez la ligne suivante dans votre fichier de configuration ini :

instana.disabled_instrumentation=48 ; 32 + 16 = 48
 

Utilisez la fonction de désactivation des travées au lieu du paramètre instana.disabled_instrumentation pour mieux contrôler la génération des travées dans votre traceur PHP.

Redémarrages automatiques

Étant donné que PHP Tracer est une extension PHP chargée dans le moteur d'exécution PHP, l'activation et la désactivation du traçage PHP ou la modification de la version installée de l'extension PHP Tracing nécessitent un redémarrage du moteur d'exécution PHP pour que les modifications soient prises en compte.

Le capteur PHP est capable de redémarrer automatiquement et gracieusement Apache et PHP-FPM. Mais un redémarrage manuel est nécessaire pour les scénarios d'exécution de PHP suivants :

  • Exécution de PHP avec CGI SAPI : Vous devez redémarrer manuellement le moteur d'exécution PHP.
  • Exécution de PHP avec des processus de travail pré-forkés : Vous devez redémarrer manuellement le processus principal de PHP.

Vous pouvez automatiser les redémarrages manuels requis dans les cas précédents et modifier la façon dont le capteur PHP tente de redémarrer votre exécution PHP en spécifiant un script de notification pour tracing.notificationScript dans la section com.instana.plugin.php dans le fichier de l'agent configuration.yaml .

Ce paramètre prend le chemin absolu d'un script shell exécutable ( Linux ) ou d'un script PowerShell (Windows). Lorsqu'un redémarrage de PHP est nécessaire, le capteur PHP exécute le script défini dans tracing.notificationScript au lieu d'utiliser les commandes de redémarrage par défaut.

Éléments à prendre en compte pour la conception du script de notification

Le script de notification s'exécute une fois par exécution de PHP, ce qui signifie que le script peut ne pas être déclenché pour tous les processus exécutant le même fichier exécutable PHP. Pour charger l'extension PHP Tracing en mémoire, vous devez vous assurer que votre script redémarre tous les processus s'exécutant à partir de ce fichier exécutable PHP.

Lorsque ce script est configuré et exécuté avec succès, il remplace le mécanisme par défaut de redémarrage automatique. Contrairement au mécanisme par défaut, le script est exécuté pour tout SAPI, ce qui permet d'automatiser les redémarrages dans les environnements PHP-CGI. Si vous souhaitez désactiver complètement les redémarrages automatiques, configurez un script vide.

Le capteur PHP définit les variables d'environnement suivantes pour l'exécution du script :

INSTANA_EXT_VERSION_OLD = the version of the tracing extension currently in memory
INSTANA_EXT_VERSION_NEW = the version of the tracing extension after a restart
INSTANA_PID_HOST = the PID of the process on the host, e.g. your Apache, PHP-FPM or PHP-CGI
INSTANA_PID_CONTAINER = the PID the host process has in a container (if applicable)
INSTANA_CONTAINER = the ID/name of the container the process is running in (if applicable)
 

L'exemple suivant montre un script qui enregistre les modifications de l'extension dans un fichier et redémarre Apache :

#!/bin/bash
echo "Found new tracing extension." >> php_update.log;
echo "INSTANA_EXT_VERSION_OLD=$INSTANA_EXT_VERSION_OLD" >> php_update.log;
echo "INSTANA_EXT_VERSION_NEW=$INSTANA_EXT_VERSION_NEW" >> php_update.log;
echo "INSTANA_PID_HOST=$INSTANA_PID_HOST" >> php_update.log;
echo "INSTANA_PID_CONTAINER=$INSTANA_PID_CONTAINER" >> php_update.log;
echo "INSTANA_CONTAINER=$INSTANA_CONTAINER" >> php_update.log;
echo "restarting apache" >> php_update.log;
apachectl -k graceful >> php_update.log;
 

Si votre Apache fonctionne dans un conteneur, remplacez la dernière ligne de l'exemple de script par la ligne suivante :

docker exec $INSTANA_CONTAINER apachectl -k graceful;
 

Pour PHP-FPM, vous pouvez envoyer une adresse SIGUSR2 pour le redémarrer de manière gracieuse, comme le montre l'exemple suivant :

docker exec $INSTANA_CONTAINER kill -USR2 $INSTANA_PID_CONTAINER;
 

Un redémarrage en douceur charge l'extension PHP en mémoire sans redémarrer le processus principal. Ce chargement fonctionne donc même lorsque le processus s'exécute en tant que PID 1 à l'intérieur du conteneur. Si vous ne pouvez ou ne voulez pas utiliser l'approche du redémarrage, vous pouvez également créer un instantané de l'instance du conteneur en cours d'exécution, l'arrêter et ouvrir facilement une nouvelle instance :

#!/bin/bash
IMAGE_HASH=$(docker inspect --format='{{.Config.Image}}' $INSTANA_CONTAINER)
IMAGE_NAME=$(docker images | grep $IMAGE_HASH | awk '{print $1}')
IMAGE_TAG="instana-php-$INSTANA_EXT_VERSION_NEW"
docker commit $INSTANA_CONTAINER $IMAGE_NAME:$IMAGE_TAG &&
docker stop $INSTANA_CONTAINER &&
docker run -d --rm $IMAGE_NAME:$IMAGE_TAG
 

Cette action utilise l'ID du conteneur transmis au script pour trouver le nom de l'image du conteneur. Il commute ensuite le conteneur en cours d'exécution dans une nouvelle image qui est étiquetée avec le nouveau numéro de version de l'extension PHP. Il arrête alors le conteneur d'origine et démarre un conteneur à partir de l'image nouvellement étiquetée. Bien que cette action déclenche à nouveau la routine d'installation dans le capteur PHP, elle ne déclenche pas à nouveau le script de notification car l'extension est déjà installée.

Ces exemples supposent que vous utilisez Docker comme moteur de conteneur. Mais comme le script shell déclenché est entièrement sous votre contrôle, vous pouvez y mettre toute la logique dont vous avez besoin pour que les redémarrages automatiques fonctionnent dans votre configuration.

Désactiver le suivi de PHP

Pour désactiver le suivi de PHP, procédez comme suit :

  1. Dans la section com.instana.plugin.php du fichier de l'agent configuration.yaml , remplacer tracing.enabled par false. Si le fichier de l'agent configuration.yaml ne contient pas la section com.instana.plugin.php vous devez l'ajouter comme suit :

    com.instana.plugin.php:
      tracing:
        enabled: false
     
    Remarque : le fait de commenter la section com.instana.plugin.php ne désactive pas le traçage de PHP car il est activé par défaut.

    Le capteur PHP supprime automatiquement les paramètres INI de l'extension PHP Tracing de la configuration PHP INI et tente de redémarrer le moteur d'exécution PHP pour supprimer l'extension PHP Tracing de la mémoire. Après le redémarrage du moteur d'exécution de PHP, le traçage de PHP est complètement désactivé.

  2. Si le capteur PHP ne peut pas redémarrer automatiquement l'exécution de PHP, redémarrez manuellement l'exécution de PHP pour désactiver complètement le traçage de PHP. La capacité du capteur PHP à redémarrer automatiquement le moteur d'exécution PHP dépend du type SAPI. Vous pouvez contrôler ce comportement et automatiser le redémarrage de PHP qui est nécessaire pour supprimer le traceur PHP de la mémoire. Pour plus d'informations, voir Redémarrage automatique.

    Note : Vous devez lire Redémarrage automatique et examiner attentivement si votre moteur d'exécution PHP doit être redémarré manuellement pour supprimer l'extension PHP Tracing de la mémoire.
  3. Vérifiez que l'extension PHP Tracing n'est plus activée dans votre runtime PHP en vérifiant que instana n'est pas listé dans la liste des extensions activées dans votre configuration PHP INI. Vous pouvez obtenir la liste des extensions PHP activées en exécutant le binaire PHP utilisé par votre runtime PHP avec l'option -m. L'exemple suivant montre comment lister les extensions PHP activées en utilisant le binaire php-fpm :

    $> php-fpm -m
    [PHP Modules]
    curl
    json
    PDO
    sqlite3
    Zend OPcache
    zlib
    
    [Zend Modules]
    Zend OPcache
     
    Remarque : pour vérifier si l'extension PHP Tracing est désactivée dans Apache avec le moteur d'exécution mod_php , créez un script PHP avec le contenu <?php phpinfo(); dans la racine du document du serveur web pour que Apache serve le script. Vous pouvez ensuite ouvrir la page URL de ce script dans votre navigateur et vérifier que instana n'est pas présent dans la liste des extensions PHP activées.

    Si vous rencontrez des erreurs au cours de cette procédure, vous pouvez désactiver manuellement le suivi de PHP et désinstaller l'extension PHP Tracing. Pour plus d'informations, voir Désactiver manuellement le suivi de PHP.

La désinstallation de l'agent Instana ne supprime pas automatiquement l'extension PHP Tracing des exécutions PHP déjà instrumentées. Avant de désinstaller l'agent Instana, désactivez le traçage PHP pour désinstaller l'extension PHP Tracing de toutes les exécutions PHP de l'hôte. Pour plus d'informations, voir Désinstallation de l'agent Instana.

Désactiver l'installation de l'extension PHP Tracing

Pour désactiver l'installation automatique de l'extension PHP Tracing dans les environnements d'exécution PHP nouvellement détectés, remplacez tracing.installExtension par false dans la section com.instana.plugin.php dans le fichier de l'agent configuration.yaml :

com.instana.plugin.php:
  tracing:
    enabled: true
    installExtension: false
 
Remarque : cette configuration ne désactive pas l'extension Instana PHP Tracing dans les exécutions PHP où elle est déjà installée.

Traitement des incidents

Absence de traces PHP dans l'interface utilisateur d'Instana

Important : assurez-vous que vous utilisez une version de PHP compatible. Pour plus d'informations, voir Versions de PHP prises en charge.

Si vous utilisez Plesk, vous devez exécuter plesk bin php_handler --reread.

Si vous ne voyez pas de traces apparaître dans l'interface utilisateur Instana pour les applications PHP, effectuez les étapes suivantes :

  1. Vérifiez les conditions préalables suivantes :

  2. Rechargez l'extension PHP Tracing en exécutant la commande suivante reload sur le service qui exécute les applications PHP :

    • Pour Apache :

      systemctl reload apache2
       
    • Pour PHP-FPM :

      systemctl reload php<version>-fpm
       

      Remplacez <version> dans la commande reload par la version réelle installée dans le système.

Si vous ne voyez toujours pas de traces dans l'interface utilisateur d'Instana et que votre système d'exploitation inclut SELinux par défaut ou l'ajoute à l'environnement à des fins de sécurité, SELinux peut être à l'origine du problème.

L'extension PHP Tracer communique avec le démon PHP sur le socket Unix TCP <socket path> et avec l'agent Instana sur le port TCP/IP 42699. Lorsque SELinux est configuré en mode "enforcing", il empêche l'extension PHP et le démon de communiquer entre eux, à moins que SELinux ne soit configuré pour l'autoriser.

Pour vérifier si SELinux est à l'origine du problème, vérifiez sur /var/log/audit/audit.log les dénis silencieux enregistrés pour le démon PHP. Vous pouvez également effectuer un test de fumée en suivant les étapes suivantes :

  1. Désactiver temporairement SELinux.
  2. Redémarrer le démon PHP.

Si SELinux est identifié comme la cause du problème, vous pouvez le résoudre en utilisant l'une des options suivantes :

  • Configurez SELinux pour permettre à PHP Tracer de communiquer : Avec SELinux, vous pouvez suivre vos propres politiques de sécurité et configurer une politique personnalisée pour permettre la communication. Pour plus d'informations sur la création et la modification de la politique SELinux, voir les liens suivants :

  • Réglez SELinux sur le mode permissif : Dans ce mode, vos services peuvent fonctionner sans restrictions. Vous pouvez rétablir les paramètres par défaut en redémarrant le serveur. Pour mettre SELinux en mode permissif, voir SELinux mode permissif.

  • Désactiver SELinux : Instana ne vous encourage pas activement à désactiver les logiciels de sécurité. Une approche correcte et sûre consiste à créer une politique SELinux. Toutefois, si vous décidez de désactiver SELinux, consultez la section Désactiver Linux.

Activer la journalisation

Par défaut, la journalisation est désactivée. Pour l'activer, suivez les étapes suivantes.

  • Activer la journalisation en utilisant des variables d'environnement.
  1. Pour définir le niveau de journalisation sur débogage, définissez INSTANA_DEBUG sur TRUE ou INSTANA_LOG_LEVEL=4
  • Activer la journalisation en utilisant le fichier INI.
  1. Localisez un fichier nommé zzz-instana.ini dans le répertoire scan de votre installation PHP. Par exemple, l'exécution de php --ini | grep zzz-instana.ini ou php-fpm<version> -i | grep zzz-instana.ini révèle son emplacement.

  2. Ajouter la ligne instana.log_level=4 à zzz-instana.ini.

  3. Lorsque vous exécutez le moteur d'exécution PHP de votre choix, assurez-vous que la journalisation est présente dans la sortie et que l'extension est activée. Par exemple, vous pouvez exécuter php --ri instana ou php-fpm<version> -i | grep instana pour vérifier.

    Exemple :

    [instana.INFO] Initializing, logging at level 4
     
  4. Rechargez l'extension de traçage PHP comme décrit ici. Si vous sautez cette étape, il n'y aura pas d'enregistrement.

Les journaux sont acheminés vers le moteur d'exécution PHP dans lequel l'extension de traçage PHP est installée. De ce fait, sa localisation précise dépend fortement de sa configuration. Les emplacements habituels sont /var/log/apache2/error.log pour Apache2 et /var/log/php<version>-fpm.log pour PHP-FPM.

Installation manuelle de l'extension PHP Tracing

Pour installer manuellement l'extension PHP Tracing, suivez les étapes suivantes :

  1. Téléchargez l'extension Instana PHP Tracing comme suit :

    1. Téléchargez le script shell à partir du dépôt suivant :

      https://artifact-public.instana.io/artifactory/shared/com/instana/php/instana-ext-download-script/php-instana-ext-download-script.sh
       
    2. Exécutez le script shell pour télécharger l'extension adaptée à votre environnement. La commande suivante montre les options disponibles :

      ./php-instana-ext-download-script.sh -a <aarch64/x86_64> -l <musl/glibc> -p <PHP version> -t <NTS/ZTS> -d <serverless/native> -s <OpenSSL version> -v <Instana extension version>
       
      • Pour la version de PHP, indiquez les numéros de version majeure et mineure. Par exemple, pour télécharger l'extension Instana pour PHP 8.4.12, exécutez le script shell avec le drapeau -p 8.4.

      • Pour la version OpenSSL, utilisez l'option -s ssl1 pour télécharger l'extension qui supporte OpenSSL 1.1 ou utilisez -s ssl3 pour télécharger l'extension qui supporte OpenSSL 3.x.

      • Pour la version de l'extension Instana, la valeur par défaut est release, ce qui permet de télécharger la dernière version disponible. Utilisez l'option -v pour télécharger l'artefact pour une version spécifique. Par exemple, exécutez le script avec -v 4.7.0 pour télécharger l'extension avec la version 4.7.0.

      • Pour voir toutes les options disponibles pour le script, exécutez la commande suivante :

        ./php-instana-ext-download-script.sh
         
  2. Installez l'extension comme suit :

    1. Déplacez le fichier .so téléchargé dans le répertoire de l'extension PHP CLI.

    2. Créez un fichier INI, zzz-instana.ini, comme le montre l'exemple suivant, et enregistrez-le dans le répertoire INI additionnel de PHP CLI. Remplacez <hostIP> par l'adresse IP de l'hôte de l'agent Instana afin que l'agent soit accessible depuis l'environnement PHP.

      ; this file was automatically generated by Instana
      ;
      ; any changes made to this file are expected to be overwritten when
      ; a new version of the Instana PHP Tracer extension is installed
      [instana]
      extension=<php cli extension dir path where extension.so file is placed>
      instana.socket=<hostIP>:16816
      instana.agent_endpoint=http://<hostIP>:42699
      instana.use_agent_endpoint=1
      instana.auto_profile_socket=tcp://<hostIP>:42699
      instana.enable_auto_profile=0
      instana.secrets_matcher=contains-ignore-case
      instana.secrets_list="key,pass,secret"
      instana.extra_http_headers=
      instana.pid_in_root_namespace=<pid of PHP process in hostnamespace>
      instana.enable_cli=1
       

Désactiver manuellement le traçage de PHP

En suivant les étapes décrites dans Désactivation du traçage PHP, vous désactivez complètement le traçage PHP, y compris la suppression de l'extension PHP Tracing de votre moteur d'exécution PHP.

Si vous rencontrez des erreurs au cours de cette procédure et que vous souhaitez désactiver manuellement le suivi de PHP et désinstaller l'extension PHP Tracing, procédez comme suit :

  1. Assurez-vous que le traçage PHP est désactivé dans le fichier de l'agent configuration.yaml comme suit :

    com.instana.plugin.php:
      tracing:
        enabled: false
     

    Cette configuration empêche le capteur PHP de réinstaller à nouveau l'extension PHP Tracing.

  2. Désactivez l'extension PHP Tracing dans votre configuration PHP INI. Voir Désactivation de l'extension PHP Tracing.

  3. Supprimez le fichier d'extension PHP Tracing de votre système. Voir Suppression du fichier d'extension PHP Tracing.

Désactivation de l'extension PHP Tracing

Lorsque le capteur PHP a installé l'extension, il a également activé l'extension pour votre installation PHP. L'activation de l'extension signifie que le capteur PHP a placé le fichier zzz-instana.ini dans votre dossier Additional Ini files ou l'a activé directement dans votre dossier php.ini.

Pour savoir où l'extension a été activée, exécutez le fichier binaire php pour lequel vous avez activé le traçage. L'exemple suivant montre ceci avec un binaire PHP-FPM :

$> php-fpm7.0 -i | egrep "^(Scan|Loaded)"
Loaded Configuration File => /etc/php/7.0/fpm/php.ini
Scan this dir for additional .ini files => /etc/php/7.0/fpm/conf.d
 

Dans cet exemple, le fichier zzz-instana.ini est situé dans /etc/php/7.0/fpm/conf.d. Si aucun dossier Additional Ini files n'est disponible ou si le fichier zzz-instana.ini n'existe pas à cet endroit, vérifiez plutôt votre php.ini . Dans cet exemple, le fichier se trouve à l'adresse /etc/php/7.0/fpm/php.ini.

Sous Windows, exécutez la commande suivante dans PowerShell pour obtenir l'emplacement du fichier php.ini ou l'emplacement du dossier Additional Ini files pour PHP-CGI :

PS C:\> php-cgi -i | Select-String -Pattern '(Scan|Loaded Configuration)' | ForEach-Object { ($_ -replace '<br\s*/?>', "`n") -replace '<[^>]+>', ''}
Loaded Configuration File C:\Php\php.ini
Scan this dir for additional .ini files (none)
 
Note : Pour Apache avec mod_php, placez un fichier PHP avec le contenu <?php phpinfo(); dans un endroit accessible sur Apache et ouvrez-le dans un navigateur pour obtenir les mêmes informations.

Pour désactiver l'extension de traçage PHP, procédez comme suit :

  1. Ouvrez le fichier ini approprié dans un éditeur et préfixez le point-virgule (;) dans la ligne extension=/path/to/instana.so comme suit. L'ajout d'un point-virgule commente la ligne.

    ;extension=/path/to/instana.so

    Une autre solution consiste à supprimer complètement la ligne extension=/path/to/instana.so . Ne l'enlevez pas si vous avez l'intention d'activer l'extension ultérieurement.

  2. Si vous avez le fichier zzz-instana.ini , vous pouvez également le supprimer complètement en procédant comme suit :

    $> sudo rm /etc/php/7.0/fpm/conf.d/zzz-instana.ini
     

    Sous Windows, vous pouvez supprimer le fichier en exécutant la commande suivante à l'adresse PowerShell (en tant qu'administrateur) :

    PS C:\> Remove-Item -Path C:\Php\conf\zzz-instana.ini
     
    Important : Ne supprimez pas l'intégralité de votre fichier php.ini .
  3. Redémarrez votre moteur d'exécution PHP pour supprimer l'extension PHP Tracing de la mémoire. Si votre système d'exécution PHP utilise des travailleurs pré-forkés, vous devez redémarrer le processus principal de PHP maintenant.

Remarque : la désactivation de l'extension ne supprime pas le fichier d'extension de votre système.

Suppression du fichier d'extension PHP Tracing

PHP enregistre des erreurs de démarrage lorsqu'il ne trouve pas d'extension. Par conséquent, avant de supprimer l'extension, vous devez également la désactiver. Pour plus d'informations, voir Désactiver l'extension PHP Tracing.

Le capteur PHP place l'extension Instana PHP tracing dans le répertoire indiqué dans le paramètre extension_dir de votre site php.ini. Pour rechercher ce paramètre, exécutez le fichier binaire php pour lequel vous avez activé le traçage. L'exemple suivant montre ceci avec un binaire PHP-FPM :

$> php-fpm7.0 -i | egrep ^extension_dir
extension_dir => /usr/lib/php/20151012 => /usr/lib/php/ext
 
Note : Pour Apache avec mod_php, placez un fichier PHP avec le contenu <?php phpinfo(); dans un endroit accessible sur Apache et ouvrez-le dans un navigateur pour obtenir les mêmes informations.

Le capteur PHP n'utilise que la première valeur, donc dans l'exemple, vous pouvez trouver l'extension à /usr/lib/php/20151012. Le chemin d'accès à l'extension est également indiqué dans votre php.ini ou dans le fichier zzz-instana.ini .

Sous Windows, vous pouvez exécuter la commande suivante dans PowerShell pour trouver extension_dir:

PS C:\> php-cgi -i | Select-String -Pattern 'extension_dir' | ForEach-Object { ($_ -replace '<br\s*/?>', "`n") -replace '<[^>]+>', ' '}
  extension_dir  C:\php\ext  C:\php\ext
 

Pour supprimer l'extension, exécutez la commande suivante :

$> sudo rm /usr/lib/php/20151012/instana.so
 

Sous Windows, vous pouvez supprimer le fichier en exécutant la commande suivante dans PowerShell (en tant qu'administrateur) :

PS C:\> Remove-Item -Path C:\Php\ext\instana.dll
 

Si vous utilisez des travailleurs pré-forkés et que vous n'avez pas déjà redémarré votre processus maître PHP lorsque vous avez désactivé l'extension, vous devez le redémarrer pour que les changements soient pris en compte.