Le tracing distribué vous permet de voir l'intégralité du parcours de vos requests à travers un systèmes distribués. L'agent PHP instrumente automatiquement avec le traçage distribué un certain nombre de fonctions PHP natives, ainsi que certains clients HTTP tiers :
- Fonction PHP
file_get_contents
- Fonctions PHP
curl_exec
etcurl_multi_exec
- Guzzle 4, Guzzle 5, Guzzle 6
- Drupal
drupal_http_request function
- Les tâches de la file d'attente de Laravel
Pour l' agent PHP, nous proposons deux types de tracing distribué (pour plus de détails, voir Comment fonctionne le span sampling) :
Standard (échantillonnage en début de workflow) : Avant l'arrivée de toute trace, nous déterminons un pourcentage défini de trace à accepter et à analyser. Cela vous donne un point de départ solide pour voir comment le traçage peut vous aider. Il est activé par défaut dans l'agent PHP 9.21.0 et supérieur.
Traçage infini (échantillonnage en fin de workflow) : Notre service basé sur le cloud accepte toutes vos traces puis les trie pour trouver les plus importantes. Le traçage infini analyse toutes vos traces et vous offre des options configuration pour échantillonner les traces qui comptent le plus pour vous.
Que vous souhaitiez simplement tester le traçage standard distribué (échantillonnage en début de workflow) ou que vous souhaitiez également mettre en place un traçage infini (échantillonnage en fin de workflow), vous devez commencer par mettre en place le traçage standard.
Traçage standard distribué
Il s’agit de la meilleure approche pour configurer le traçage standard distribué si vous n’avez pas encore installé d’agent APM pour vos services.
Conseil
Lorsque vous installez l'agent PHP de New Relic, le tracing distribué standard est activé par défaut. Si vous préférez le désactiver, consultez notre guide de configuration.
Identifier les services
Déterminez quels services touchent à votre demande afin de pouvoir instrumenter chacun d'eux pour envoyer des données trace à New Relic.
instrumenter chaque service avec un agent APM
Pour chaque service impliqué dans vos transactions, vous effectuerez une installation distincte de l'agent. Si certains de vos services utilisent d’autres langues, répétez simplement les étapes d’installation pour ces langues.
Pour démarrer la routine d'installation, cliquez sur la tuile ci-dessous. Une fois l'installation de chaque agent terminée, revenez ici pour voir des conseils pour visualiser votre trace.
Afficher la trace
Après avoir instrumenté chacun de vos services avec l'agent APM, générez du trafic dans votre application afin que nous puissions capturer une trace. Voici quelques façons d'afficher votre trace dans l'UI:
Pour plus d'aide pour trouver votre trace dans l'UI:
Traçage infini
Le traçage standard distribué pour l'agent APM capture jusqu'à 10 % de votre trace, mais si vous souhaitez que nous analysions toutes vos données et trouvions la trace la plus pertinente, vous pouvez configurer le traçage infini.
Avant de commencer, assurez-vous d’abord de répondre aux exigences.
Terminez la configuration pour le traçage standard distribué
La configuration Infinite Tracing s'appuie sur le traçage standard distribué. Assurez-vous donc d’avoir terminé les étapes ci-dessus, puis continuez avec la configuration de l’observateur de trace.
Configurer l'observateur de trace
L'observateur de trace est un service New Relic basé sur AWSqui collecte et analyse toutes vos traces. Suivez les instructions dans Configurer Trace Observer. Une fois que vous avez terminé, revenez ici avec les informations de votre observateur de trace et passez à l’étape suivante pour configurer l’agent.
Configurer l'agent pour Infinite Tracing
Les paramètres configuration d'Infinite Tracing incluent le traçage standard distribué ainsi que des informations sur l'observateur de trace. Notez que la configuration côté serveur n'est pas disponible pour Infinite Tracing.
Conseil
Si vous avez besoin d'aide avec la configuration du proxy, consultez Assistance proxy.
(Facultatif) Personnaliser le traçage infini
Après avoir ajouté les agent configuration paramètres, vous devriez commencer à voir les données dans l’UI de New Relic. Après avoir passé un certain temps à analyser vos données, vous souhaiterez peut-être ajuster certaines fonctionnalités d'Infinite Tracing :
Définir le niveau de détail de la trace
Le support du tracing distribué dépend du agent traceur de transaction de l' PHP. Lorsque le tracing distribué est activé, une étendue est créée pour chaque segment vu par le traceur de transaction.
Au fur et à mesure que les intervalles sont échantillonnés, l'agent PHP donnera la priorité aux intervalles liés aux appels externes par rapport aux autres intervalles, qui sont ensuite enregistrés par ordre décroissant de leur durée.
Si vous constatez qu'il y a trop d'intervalles sans importance signalés pour les appels de fonction PHP, vous pouvez réduire les détails du traceur de transaction en définissant newrelic.transaction_tracer.detail
sur 0
. Vous pouvez ensuite utiliser le newrelic.transaction_tracer.custom
configuration paramètre ou la newrelic_add_custom_tracer
API méthode pour ajouter trace des segments et des étendues pour la fonction ou les méthodes PHP spécifiques que vous souhaitez ajouter à votre trace.
Important
Pour les versions agent PHP 8.4 à 8.7 : lorsque le tracing distribué est activé, ces versions se comportent comme si newrelic.transaction_tracer.detail
était défini sur 0
(comme décrit ci-dessus), ce qui fait que les appels de fonction PHP ne génèrent pas d'étendues. Pour obtenir les étendues liées aux appels de fonctions PHP, mettez à jour vers la version 9.0 ou supérieure.
Instrumenter manuellement les applications et les services avec l'API de l'agent PHP
Important
La prise en charge W3C Trace Context a été ajoutée dans la version 9.8. Avec cela, l' API pour l'application instrumentée manuellement a changé par rapport aux fonctions liées aux charges JSON :
newrelic_create_distributed_trace_payload()newrelic_accept_distributed_trace_payload($payload)
Aux formulaires d'en-tête d'éventail :
newrelic_insert_distributed_trace_headers($outbound_headers)newrelic_accept_distributed_trace_headers($inbound_headers)
Les fonctions JSON sont désormais considérées comme obsolètes et seront supprimées lors d'une prochaine sortie.
Si vous utilisez une bibliothèque non prise en charge ou si vous disposez d'un composant système distribué non basé sur HTTP (tel qu'un fichier d'attente de messages), vous pouvez utiliser l'agent PHP API pour identifier manuellement les transactions à inclure dans une tracesystème distribuée. Il s’agit d’un processus en deux étapes :
- Modifiez votre service ou application pour create ou insert les données de tracing distribué
- Modifiez votre service ou application pour accept traceles données distribuées créées par d'autres transactions ou requests.
L'exemple suivant utilise une file d'attente de messages/travaux générique. Bien que les détails réels varient en fonction du type de système que vous essayez d'ajouter à une tracedistribuée, les concepts de base sont les mêmes. De plus, bien que nous ayons utilisé une file d'attente de travaux comme exemple, vous pouvez utiliser ces méthodes avec le composant any systèmes distribués.
Conseil
Lorsque vous create a payload ou insert headers, vous indiquez à New Relic que vous souhaitez que cette requête ou transaction ou requête participe à une tracedistribuée. Lorsque vous les accept, vous liez la demande ou la transaction en cours à sa demande ou transaction parent.
Pour plus d'informations sur l'utilisation instrumentation manuelle pour obtenir plus de détails ou pour voir les connexions entre les services, consultez la documentation sur le tracing distribué d'API.
API d'en-tête
API de charge utile (obsolète)
Programmes PHP en ligne de commande
Les programmes PHP exécutés à partir de la ligne de commande PHP sont toujours échantillonnés par le traceur distribué de l'agent. Selon les programmes que vous exécutez, ces processus peuvent voir une surreprésentation dans votre collection de traces distribuées. Dans ces situations, vous pouvez choisir de désactiver l'instrumentation de ligne de commande en utilisant le paramètre per-directory newrelic.enabled
dans votre newrelic.ini files
.