Integrazione di OpenTelemetry con Instana per le applicazioni PHP

È possibile utilizzare OpenTelemetry con le applicazioni PHP, insieme a IBM e Instana Observability.

Sistemi operativi supportati

OpenTelemetry L'integrazione è supportata e testata esclusivamente sui sistemi operativi Linux.

Prerequisiti

Per integrare OpenTelemetry con Instana, sono necessari i seguenti componenti:

  • OpenTelemetry PHP estensione
  • Composer per la gestione delle dipendenze
  • OpenTelemetry SDK e librerie di strumentazione
  • Un account attivo su IBM Instana (Observability)
  • Instana agente installato e configurato nel proprio ambiente
Nota: questi componenti sono necessari per tutte le opzioni di integrazione.

Configurazione dell'integrazione c OpenTelemetry

È possibile utilizzare una delle seguenti opzioni per integrare OpenTelemetry con Instana :

  • Instana Distribuzione del collector OpenTelemetry ( IDOT ): utilizzo del collector OpenTelemetry gestito da Instana per ricevere ed elaborare i dati di OpenTelemetry.
  • Instana OTLP Endpoint : configurazione dell'esportatore OpenTelemetry OTLP per l'invio diretto dei dati OTel all'agente Instana o agli endpoint del backend Instana OTLP.
  • Instana OpenTelemetry PHP Esportatore : utilizzando l'esportatore dedicato Instana OpenTelemetry PHP che converte gli span di OTel in span nativi di Instana e utilizza il livello di trasporto nativo Instana.

Opzione 1: Utilizzo di una distribuzione " Instana " del collettore " OpenTelemetry "

La distribuzione " Instana " del Collector " OpenTelemetry " ( IDOT ) è una versione completamente gestita e preconfigurata del Collector " OpenTelemetry " che si integra perfettamente con la piattaforma di osservabilità di Instana.

Per raccogliere i dati di telemetria dalle applicazioni PHP, segui questi passaggi per installare e configurare IDOT :

  1. Installare il collector: distribuire la versione " Instana " di OpenTelemetry Collector come sidecar, daemon o gateway, a seconda delle esigenze dell'infrastruttura. Per istruzioni dettagliate su come configurare un collettore IDOT, consultare la documentazione relativa al collettore OpenTelemetry disponibile all'indirizzo Instana.

  2. Configura l'applicazione PHP : Configura l'applicazione PHP in modo che invii i dati di OpenTelemetry al collettore 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
    

Opzione 2: Utilizzo degli endpoint Instana e OTLP

È possibile integrare OpenTelemetry con PHP configurando l'esportatore predefinito di OpenTelemetry Protocol ( OTLP ) in modo che invii le tracce di OpenTelemetry direttamente all'agente Instana o al backend Instana.

Abilitazione della strumentazione automatica (senza codice)

È possibile abilitare la strumentazione automatica impostando le variabili d'ambiente; in questo modo, OpenTelemetry traccierà automaticamente le librerie supportate da PHP.

Per ulteriori informazioni, consultare l 'applicazione dimostrativa disponibile all'indirizzo WordPress PHP, che illustra la strumentazione zero-code di OpenTelemetry PHP e l'integrazione di OpenTelemetry con Instana.

È possibile attivare la strumentazione automatica impostando le seguenti variabili d'ambiente minime:

Variabile Descrizione
OTEL_PHP_AUTOLOAD_ENABLED Impostare su true per abilitare la strumentazione zero-code di OpenTelemetry
OTEL_SERVICE_NAME Nome logico del servizio per la correlazione dell'infrastruttura
OTEL_TRACES_EXPORTER Deve essere impostato su otlp
OTEL_EXPORTER_OTLP_PROTOCOL Scegli grpc, http/protobuf, oppure http/json
OTEL_EXPORTER_OTLP_ENDPOINT URL dell'endpoint OTLP, l'agente Instana o il backend

Esempio

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

Una volta completate queste configurazioni, è possibile avviare un'applicazione PHP; le tracce OpenTelemetry generate da essa saranno visibili nell'interfaccia utente Instana.

È inoltre possibile configurare le applicazioni PHP in modo che inviino le tracce dell' OpenTelemetry direttamente all'agente Instana o al backend utilizzando gli endpoint OTLP.

Invio di dati all'endpoint OTLP dell'agente

L'agente " Instana " mette a disposizione endpoint OTLP in grado di ricevere dati OpenTelemetry direttamente dalle applicazioni PHP.

Per inviare dati all'endpoint OTLP dell'agente Instana, configurare l'applicazione PHP come segue:

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

Invio di dati all'endpoint di backend OTLP

Negli ambienti in cui non è possibile comunicare direttamente con l'agente Instana, è possibile configurare l'applicazione PHP in modo che invii i dati OpenTelemetry direttamente al backend Instana.

Per ulteriori informazioni, consultare la sezione "Invio di dati da OpenTelemetry a Instana ".

Per inviare dati all'endpoint OTLP del backend Instana, configura la tua applicazione PHP come segue:

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

Sostituisci {region} con la tua regione Instana e {your-api-token} con il tuo token Instana API.

Configurazione della strumentazione manuale

È necessario integrare manualmente le applicazioni con l'SDK di OpenTelemetry nei seguenti casi:

  • Non stai utilizzando la strumentazione della libreria PHP supportata da OTel o Instana.
  • Vuoi ampliare le funzionalità della libreria Tracer di PHP.
  • È necessario un controllo più preciso sulla strumentazione delle applicazioni.

Per configurare la strumentazione manuale, procedere come segue:

  1. Installa i pacchetti OpenTelemetry, API e SDK.
    composer require open-telemetry/sdk
    composer require open-telemetry/api
    
  2. Aggiungi la strumentazione manuale OpenTelemetry desiderata al tuo codice PHP seguendo la documentazione sulla strumentazione manuale disponibile all'indirizzo OpenTelemetry PHP.

  3. Scegli un propagatore di contesti di tracciamento di tipo " OpenTelemetry " per le applicazioni distribuite. Instana supporta le intestazioni di tracciamento W3C e le intestazioni native Instana per la propagazione delle tracce.

    • Utilizzo di una cassetta di semina " Instana "

      OTEL_PROPAGATORS=instana
      
    • Utilizzo tracecontext del propagatore

      OTEL_PROPAGATORS=tracecontext
      

    L'uso dei propagatori consente a Instana di unire i segmenti di OpenTelemetry e altri segmenti di Instana in un'unica traccia della tua applicazione.

    Per ulteriori informazioni sugli strumenti di esempio per il tracciamento distribuito, consultare Abilitazione della propagazione del contesto per il tracciamento distribuito.

Il seguente semplice esempio illustra la strumentazione manuale con uno span padre e uno figlio:


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 Propagatore

Il propagatore " OpenTelemetry " per Instana fornisce la propagazione dell'intestazione HTTP e la propagazione dei dati di bagaglio da utilizzare con l'applicazione PHP. Questo propagatore converte le intestazioni di correlazione delle tracce (X-INSTANA-T/X-INSTANA-S/X-INSTANA-L)Instana in OpenTelemetrySpanContext e OpenTelemetrySpanContext in Instana.

Qui è possibile trovare un semplice esempio di applicazione distribuita di tipo " PHP " che illustra la strumentazione manuale tramite il propagatore di contesto Instana.

Nota: il propagatore « Instana » non gestisce TraceState un'intestazione priva di un elemento «span» padre.

Installazione del Propagator

Per installare l'estensione " Instana " tramite Composer, utilizzare il seguente comando:

composer require open-telemetry/opentelemetry-propagation-instana

Come usare il propagatore

Il propagatore ` Instana ` utilizza sia il metodo `extract` che il metodo `inject` per estrarre e inserire il contesto di tracciamento nell'intestazione. Il propagatore può essere istanziato nei seguenti modi:

  • Istanziamento di una classe propagator dell' Instana.
$propagator = InstanaPropagator::getInstance();
  • Utilizzo delle variabili d'ambiente
OTEL_PROPAGATORS=instana,baggage

Per la propagazione dei bagagli, utilizzare ` OpenTelemetryMultiTextMapPropagator`, quindi passare l'elenco degli array dei propagatori, come ` Instana ` e il propagatore dei bagagli, come segue:

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

Opzione 3: Utilizzo di Instana OpenTelemetry PHP Exporter

L'esportatore Instana OpenTelemetry PHP è un esportatore dedicato che converte gli span di OpenTelemetry in span nativi di Instana e utilizza il livello di trasporto nativo di Instana per inoltrare le tracce al backend di Instana.

Per informazioni dettagliate sull'installazione, la configurazione e l'utilizzo dell'esportatore Instana OpenTelemetry PHP, consultare la guida all'esportatore OpenTelemetry PHP.