Intégration d' OpenTelemetry. avec Instana. pour les applications PHP

Vous pouvez utiliser OpenTelemetry avec les applications PHP, ainsi qu'avec IBM et Instana Observability.

Systèmes d'exploitation pris en charge

OpenTelemetry L'intégration est prise en charge et testée uniquement sur les systèmes d'exploitation d' Linux.

Prérequis

Pour intégrer OpenTelemetry à Instana, vous avez besoin des composants suivants :

  • OpenTelemetry PHP extension
  • Composer pour la gestion des dépendances
  • OpenTelemetry SDK et bibliothèques d'instrumentation
  • Un compte Observability actif sur IBM Instana
  • Instana agent installé et configuré dans votre environnement
Remarque : ces composants sont nécessaires pour toutes les options d'intégration.

Configuration de l'intégration d' OpenTelemetry

Vous pouvez utiliser l'une des options suivantes pour intégrer OpenTelemetry à Instana :

Option 1 : Utilisation d'une distribution « Instana » du collecteur « OpenTelemetry »

La distribution « Instana » du collecteur OpenTelemetry ( IDOT ) est une version entièrement gérée et préconfigurée du collecteur OpenTelemetry qui s'intègre de manière transparente à la plateforme d'observabilité de Instana.

Pour collecter des données de télémétrie à partir de vos applications PHP, suivez les étapes suivantes pour installer et configurer IDOT :

  1. Installez le collecteur : déployez la distribution « Instana » du collecteur « OpenTelemetry » en tant que sidecar, démon ou passerelle, selon les besoins de votre infrastructure. Pour obtenir des instructions détaillées sur la configuration du collecteur IDOT, consultez la documentation relative au collecteur OpenTelemetry disponible à l'adresse Instana.

  2. Configurez votre application PHP : Configurez votre application PHP pour qu'elle envoie les données d' OpenTelemetry s au collecteur Instana :

    OTEL_PHP_AUTOLOAD_ENABLED=true
    OTEL_SERVICE_NAME=your_service_name
    OTEL_TRACES_EXPORTER=otlp
    OTEL_EXPORTER_OTLP_PROTOCOL=grpc
    OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:24317
    OTEL_PROPAGATORS=instana,tracecontext
    

Option 2 : Utilisation des points de terminaison Instana et OTLP

Vous pouvez intégrer OpenTelemetry à PHP en configurant l'exportateur par défaut OpenTelemetry Protocol ( OTLP ) pour qu'il envoie les traces OpenTelemetry directement à l'agent Instana ou au backend Instana.

Activation de l'instrumentation automatique (sans code)

Vous pouvez activer l'instrumentation automatique en définissant des variables d'environnement, ce qui permet à OpenTelemetry de tracer automatiquement les bibliothèques PHP prises en charge.

À titre de référence, consultez cette application de démonstration disponible à l'adresse WordPress PHP, qui présente l'instrumentation sans code de OpenTelemetry PHP et l'intégration de OpenTelemetry avec Instana.

Vous pouvez activer l'instrumentation automatique en définissant les variables d'environnement minimales suivantes :

Variables Description
OTEL_PHP_AUTOLOAD_ENABLED Définissez sur true pour activer l'instrumentation sans code d' OpenTelemetry
OTEL_SERVICE_NAME Nom de service logique pour la corrélation de l'infrastructure
OTEL_TRACES_EXPORTER Doit être réglé sur otlp
OTEL_EXPORTER_OTLP_PROTOCOL Choisissez grpc, http/protobuf, ou http/json
OTEL_EXPORTER_OTLP_ENDPOINT URL du point de terminaison OTLP, soit l'agent Instana, soit le backend

Exemple

OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_SERVICE_NAME=wordpress_otel_instrumentation
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
OTEL_PROPAGATORS=instana,tracecontext

Une fois ces configurations mises en place, vous pouvez lancer une application PHP; les traces OpenTelemetry générées par celle-ci seront alors visibles dans l'interface utilisateur de Instana.

Vous pouvez également configurer les applications PHP pour qu'elles envoient les traces d' OpenTelemetry s directement à l'agent Instana ou au backend en utilisant les points de terminaison OTLP.

Envoi de données vers le point de terminaison de l'agent OTLP

L'agent « Instana » fournit des points de terminaison « OTLP » capables de recevoir des données « OpenTelemetry » directement depuis vos applications « PHP ».

Pour envoyer des données au point de terminaison OTLP de l'agent d' Instana, configurez votre application PHP comme suit :

OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_SERVICE_NAME=your_service_name
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
OTEL_PROPAGATORS=instana,tracecontext

Envoi de données vers le point de terminaison backend OTLP

Dans les environnements où une communication directe avec l'agent d' Instana s n'est pas possible, vous pouvez configurer votre application PHP pour qu'elle envoie les données d' OpenTelemetry directement au backend Instana.

Pour plus d'informations, consultez la section « Envoi de données d' OpenTelemetry vers Instana ».

Pour envoyer des données au point de terminaison OTLP du backend d' Instana, configurez votre application PHP comme suit :

OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_SERVICE_NAME=your_service_name
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT="https://{instana-backend-otlp-acceptor-endpoint}":4317"
OTEL_EXPORTER_OTLP_HEADERS="x-instana-key:=apiToken {your-api-token}"
OTEL_PROPAGATORS=instana,tracecontext

Remplacez {region} par votre région Instana et {your-api-token} par votre jeton Instana API.

Configuration de l'instrumentation manuelle

Vous devez intégrer manuellement le SDK d' OpenTelemetry s à vos applications dans les cas suivants :

  • Vous n'utilisez pas l'instrumentation de la bibliothèque PHP prise en charge par OTel ou Instana.
  • Vous souhaitez étendre les fonctionnalités de la bibliothèque Tracer d' PHP.
  • Vous avez besoin d'un contrôle plus précis sur l'instrumentation de vos applications.

Pour configurer l'instrumentation manuelle, procédez comme suit :

  1. Installez l' OpenTelemetry, API et les paquets SDK.
    composer require open-telemetry/sdk
    composer require open-telemetry/api
    
  2. Ajoutez l'instrumentation manuelle OpenTelemetry de votre choix à votre code PHP en suivant les instructions fournies dans la documentation sur l'instrumentation manuelle disponible à l'adresse OpenTelemetryPHP.

  3. Choisissez le propagateur de contexte de traçage d' OpenTelemetry s pour les applications distribuées. Instana prend en charge les en-têtes de trace W3C et les en-têtes natifs Instana pour la propagation des traces.

    • Utilisation d'un propagateur « Instana »

      OTEL_PROPAGATORS=instana
      
    • Utilisation tracecontext du propagateur

      OTEL_PROPAGATORS=tracecontext
      

    L'utilisation de propagateurs permet à Instana de regrouper les segments OpenTelemetry et les segments Instana en une seule trace de votre application.

    Pour plus d'informations sur les exemples d'instrumentation pour le traçage distribué, consultez la section « Activation de la propagation du contexte pour le traçage distribué ».

L'exemple simple suivant illustre l'instrumentation manuelle à l'aide d'un span parent et d'un span enfant :


use OpenTelemetry\SDK\Registry;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
use OpenTelemetry\API\Trace\SpanKind;

$tracerProvider = new TracerProvider(
   new SimpleSpanProcessor(
      Registry::spanExporterFactory("otlp")->create()
      )
    );
$tracer = $tracerProvider->getTracer('test');
$rootSpan = $tracer->spanBuilder('rootSpan')->startSpan();
$scope = $rootSpan->activate();

// Do some work
sleep(1);
// Create a child span (automatically becomes a child of the active span)
$childSpan = $tracer->spanBuilder('child-operation')
    ->startSpan();
$childScope = $childSpan->activate();
$childSpan->end();
$childScope->detach();

// Do more work
sleep(1);

// Add string attribute
$rootSpan->setAttribute('string.attribute', 'value');
$scope->detach();
$rootSpan->end();
$tracerProvider->shutdown();

OpenTelemetry Instana Propagateur

Le propagateur « OpenTelemetry » pour « Instana » permet la propagation des en-têtes et des données de bagages d' HTTP, à utiliser avec l'application « PHP ». Ce propagateur convertit les en-têtes de corrélation de trace Instana(X-INSTANA-T/X-INSTANA-S/X-INSTANA-L) en en-têtes OpenTelemetrySpanContext et OpenTelemetrySpanContext en en-têtes Instana.

Vous trouverez ici un exemple simple d'application d' PHP s distribuées illustrant l'instrumentation manuelle à l'aide du propagateur de contexte Instana.

Remarque : le propagateur « Instana » ne prend pas en charge un élément TraceState «header» qui ne possède pas d'élément «span» parent.

Installation du propagateur

Pour installer l'extension « propagator » d' Instana via Composer, utilisez la commande suivante :

composer require open-telemetry/opentelemetry-propagation-instana

Utilisation du propagateur

Le propagateur « Instana » utilise à la fois les méthodes « extract » et « inject » pour extraire et insérer le contexte de trace dans l'en-tête. Le propagateur peut être instancié de la manière suivante :

  • Instanciation de la classe de propagation « Instana ».
$propagator = InstanaPropagator::getInstance();
  • Utilisation d'une variable d'environnement
OTEL_PROPAGATORS=instana,baggage

Pour la propagation des bagages, utilisez ` OpenTelemetryMultiTextMapPropagator`, puis transmettez la liste des propagateurs, tels que ` Instana ` et le propagateur de bagages, comme suit :

$propagator = new MultiTextMapPropagator([InstanaPropagator::getInstance(), BaggagePropagator::getInstance()]);

Option 3 : Utilisation d' Instana, OpenTelemetry et PHP Exporter

L'exportateur Instana OpenTelemetry PHP est un exportateur dédié qui convertit les segments OpenTelemetry en segments natifs Instana et utilise la couche de transport native Instana pour transférer les traces vers le backend Instana.

Pour plus d'informations sur l'installation, la configuration et l'utilisation de l'exportateur Instana OpenTelemetry PHP, consultez la documentation relative à l'exportateur OpenTelemetry PHP.