Integração do OpenTelemetry com o Instana para aplicativos do PHP

Você pode usar o OpenTelemetry com as aplicações do PHP, juntamente com o IBM e o Instana Observability.

S.O. suportado

OpenTelemetry A integração é compatível e testada apenas em sistemas operacionais d Linux.

Pré-requisitos

Para integrar OpenTelemetry com Instana, você precisa dos seguintes componentes:

  • OpenTelemetry PHP extensão
  • Composer para gerenciamento de dependências
  • OpenTelemetry SDK e bibliotecas de instrumentação
  • Uma conta ativa do IBM Instana Observability
  • Instana agente instalado e configurado no seu ambiente
Observação: esses componentes são necessários para todas as opções de integração.

Configurando a integração com o OpenTelemetry

Você pode usar qualquer uma das seguintes opções para integrar OpenTelemetry com Instana :

Opção 1: Utilização de uma distribuição do tipo “ Instana ” do coletor “ OpenTelemetry ”

O Collector do OpenTelemetry para a distribuição do Instana ( IDOT ) é uma versão totalmente gerenciada e pré-configurada do Collector do OpenTelemetry que se integra perfeitamente à plataforma de observabilidade do Instana.

Para coletar dados de telemetria de suas aplicações do PHP, siga as etapas a seguir para instalar e configurar o IDOT :

  1. Instale o coletor: Implemente a distribuição Instana do coletor OpenTelemetry como sidecar, daemon ou gateway, dependendo das necessidades da sua infraestrutura. Para obter instruções detalhadas sobre como configurar o coletor IDOT, consulte a documentação da Distribuição do Coletor OpenTelemetry do Instana.

  2. Configure seu aplicativo PHP : Configure seu aplicativo PHP para enviar dados OpenTelemetry ao coletor 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
    

Opção 2: Usando os pontos de extremidade Instana e OTLP

Você pode integrar o OpenTelemetry com o PHP configurando o exportador padrão do OpenTelemetry Protocol ( OTLP ) para enviar os traços do OpenTelemetry diretamente para o agente do Instana ou para o backend do Instana.

Ativação da instrumentação automática (sem código)

Você pode ativar a instrumentação automática definindo variáveis de ambiente, o que permite que o ` OpenTelemetry ` rastreie automaticamente as bibliotecas ` PHP ` compatíveis.

Para referência, consulte este aplicativo de demonstração em WordPressPHP, que apresenta a instrumentação sem código em OpenTelemetryPHP e a integração em OpenTelemetry com Instana.

Você pode ativar a instrumentação automática definindo as seguintes variáveis de ambiente mínimas:

Variável Descrição
OTEL_PHP_AUTOLOAD_ENABLED Defina como true para ativar a instrumentação sem código do OpenTelemetry
OTEL_SERVICE_NAME Nome lógico do serviço para correlação de infraestrutura
OTEL_TRACES_EXPORTER Deve ser definido como otlp
OTEL_EXPORTER_OTLP_PROTOCOL Escolha grpc, http/protobuf, ou http/json
OTEL_EXPORTER_OTLP_ENDPOINT URL do endpoint OTLP, seja o agente Instana ou o backend

Exemplo

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

Com essas configurações definidas, você pode iniciar um aplicativo PHP e os rastros OpenTelemetry gerados por ele ficarão visíveis na interface do usuário Instana.

Você também pode configurar aplicativos do PHP para enviar rastreamentos do OpenTelemetry diretamente para o agente ou backend do Instana usando pontos de extremidade do OTLP.

Envio de dados para o endpoint do agente OTLP

O agente do Instana fornece pontos de conexão OTLP que podem receber dados OpenTelemetry diretamente de suas aplicações PHP.

Para enviar dados para o ponto de extremidade OTLP do agente do Instana, configure seu aplicativo PHP da seguinte forma:

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

Envio de dados para o endpoint de backend OTLP

Em ambientes onde não é possível a comunicação direta com o agente do Instana, você pode configurar sua aplicação PHP para enviar dados do OpenTelemetry diretamente para o backend do Instana.

Para obter mais informações, consulte Envio de dados do OpenTelemetry para o Instana.

Para enviar dados para o endpoint OTLP do backend do Instana, configure seu aplicativo PHP da seguinte forma:

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

Substitua {region} pela sua região Instana e {your-api-token} pelo seu token Instana API.

Configuração da instrumentação manual

Você precisa integrar manualmente o SDK do OpenTelemetry às suas aplicações nos seguintes casos:

  • Você não está utilizando a instrumentação da biblioteca PHP compatível com OTel ou Instana.
  • Você deseja ampliar as funcionalidades da biblioteca Tracer do PHP.
  • Você precisa de um controle mais preciso sobre a instrumentação de suas aplicações.

Para configurar a instrumentação manual, siga estas etapas:

  1. Instale o pacote " OpenTelemetry " API e os pacotes SDK.
    composer require open-telemetry/sdk
    composer require open-telemetry/api
    
  2. Adicione a instrumentação manual OpenTelemetry desejada ao seu código PHP, seguindo a documentação sobre instrumentação manual disponível em OpenTelemetry PHP.

  3. Escolha um propagador de contexto de rastreament OpenTelemetry e para aplicações distribuídas. Instana suporta cabeçalhos de rastreamento W3C e cabeçalhos nativos Instana para a propagação do rastreamento.

    • Usando um propagador de tipo ` Instana `

      OTEL_PROPAGATORS=instana
      
    • Usando tracecontext o propagador

      OTEL_PROPAGATORS=tracecontext
      

    O uso de propagadores permite que Instana junte intervalos de OpenTelemetry e outros intervalos de Instana em um único rastreamento da sua aplicação.

    Para obter mais informações sobre exemplos de instrumentação para rastreamento distribuído, consulte Ativando a propagação de contexto para rastreamento distribuído.

O exemplo simples a seguir demonstra a instrumentação manual com um span pai e um span filho:


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 Propagador

O propagador ` OpenTelemetry ` para ` Instana ` fornece propagação de cabeçalhos ` HTTP ` e propagação de bagagem para uso com o aplicativo ` PHP `. Este propagador converte os cabeçalhos de correlação de rastreamento (X-INSTANA-T/X-INSTANA-S/X-INSTANA-L) Instana em cabeçalhos OpenTelemetrySpanContext e OpenTelemetrySpanContext em Instana.

Você pode encontrar aqui um exemplo simples de aplicativo distribuído do tipo “ PHP ”, que demonstra a instrumentação manual utilizando o propagador de contexto Instana.

Observação: O propagador ` Instana ` não processa um TraceState cabeçalho sem um elemento `span` pai.

Instalando o propagador

Para instalar a extensão propagator do Instana através do Composer, use o seguinte comando:

composer require open-telemetry/opentelemetry-propagation-instana

Como usar o propagador

O propagador ` Instana ` utiliza os métodos `extract` e `inject` para extrair e inserir o contexto de rastreamento no cabeçalho. O propagador pode ser instanciado das seguintes maneiras:

  • Instantiação de uma classe de propagador d Instana.
$propagator = InstanaPropagator::getInstance();
  • Usando variáveis de ambiente
OTEL_PROPAGATORS=instana,baggage

Para a propagação de bagagem, use ` OpenTelemetryMultiTextMapPropagator` e, em seguida, passe a lista de propagadores, como ` Instana ` e o propagador de bagagem, da seguinte forma:

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

Opção 3: Usando o Instana OpenTelemetry PHP Exporter

O exportador Instana OpenTelemetry PHP é um exportador dedicado que converte spans do OpenTelemetry em spans nativos do Instana e utiliza a camada de transporte nativa do Instana para encaminhar os rastreamentos para o backend do Instana.

Para obter informações detalhadas sobre a instalação, configuração e uso do exportador Instana OpenTelemetry PHP, consulte o exportador OpenTelemetry PHP.