PHP 애플리케이션을 위해 OpenTelemetry 와 Instana 통합하기

OpenTelemetry 는 PHP 애플리케이션과 함께 IBM Instana Observability와 연동하여 사용할 수 있습니다.

지원되는 OS

OpenTelemetry 이 통합 기능은 Linux 운영 체제에서만 지원 및 테스트되었습니다.

전제조건

OpenTelemetry 를 Instana 와 연동하려면 다음 구성 요소가 필요합니다:

  • OpenTelemetry PHP 확장
  • 의존성 관리를 위한 Composer
  • OpenTelemetry SDK 및 계측 라이브러리
  • 활성 상태의 IBM Instana Observability 계정
  • Instana 사용자 환경에 에이전트가 설치 및 구성되었습니다
참고: 모든 통합 옵션을 사용하려면 다음 구성 요소가 필요합니다.

OpenTelemetry 연동 설정

OpenTelemetry 를 Instana 와 연동하려면 다음 옵션 중 하나를 사용할 수 있습니다:

  • Instana OpenTelemetry 수집기 배포 ( IDOT ): Instana 에서 관리하는 OpenTelemetry 수집기를 사용하여 OpenTelemetry 데이터를 수신하고 처리합니다.
  • Instana OTLP 엔드포인트 : OpenTelemetry OTLP 익스포터를 구성하여 OTel 데이터를 Instana 에이전트 또는 Instana 백엔드 OTLP 엔드포인트로 직접 전송하도록 설정합니다.
  • Instana OpenTelemetry PHP 내보내기 도구 : OTel 스팬을 Instana 네이티브 스팬으로 변환하고 Instana 네이티브 전송 계층을 사용하는 전용 내보내기 도구( Instana, OpenTelemetry, PHP )를 사용합니다.

옵션 1: Instana 사용 OpenTelemetry 수집기 배포

Instana 용 OpenTelemetry Collector 배포판( IDOT )은 OpenTelemetry Collector의 완전 관리형 사전 구성 버전으로, Instana 의 가시성 플랫폼과 원활하게 연동됩니다.

PHP 애플리케이션에서 텔레메트리 데이터를 수집하려면 다음 단계를 수행하여 IDOT 를 설정하고 구성하십시오:

  1. 컬렉터 설치: 인프라 요구 사항에 따라 OpenTelemetry 컬렉터의 ‘ Instana ’ 배포판을 사이드카, 데몬 또는 게이트웨이 형태로 배포하십시오. IDOT 수집기를 구성하는 방법에 대한 자세한 지침은 Instana 의 ‘ OpenTelemetry 수집기’ 문서에서 확인하십시오.

  2. PHP 애플리케이션 구성: PHP 애플리케이션을 설정하여 OpenTelemetry 데이터를 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
    

옵션 2: Instana OTLP 엔드포인트 사용

기본 OpenTelemetry Protocol ( OTLP ) 익스포터를 구성하여 OpenTelemetry 추적 정보를 Instana 에이전트나 Instana 백엔드로 직접 전송하도록 설정함으로써, OpenTelemetry 를 PHP 와 연동할 수 있습니다.

자동(코딩 없이) 계측 활성화

환경 변수를 설정하여 자동 계측 기능을 활성화하면, OpenTelemetry 가 지원되는 PHP 라이브러리를 자동으로 추적할 수 있습니다.

참고로, 여기에서 코딩 없이 PHPWordPress 데모 애플리케이션 계측을 수행하고 OpenTelemetryPHP 와 OpenTelemetry 통합하는 방법을 확인할 Instana 수 있습니다.

다음과 같은 최소한의 환경 변수를 설정하여 자동 계측 기능을 활성화할 수 있습니다:

가변 설명
OTEL_PHP_AUTOLOAD_ENABLED OpenTelemetry 의 제로 코드 계측 기능을 활성화하려면 true 로 설정하세요
OTEL_SERVICE_NAME 인프라 상관관계를 위한 논리적 서비스 이름
OTEL_TRACES_EXPORTER 다음으로 설정해야 합니다 otlp
OTEL_EXPORTER_OTLP_PROTOCOL grpc, http/protobuf, 또는 http/json
OTEL_EXPORTER_OTLP_ENDPOINT URL OTLP 엔드포인트의 경우 Instana 에이전트 또는 백엔드

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

이러한 설정이 완료되면 PHP 애플리케이션을 시작할 수 있으며, 해당 애플리케이션에서 생성된 OpenTelemetry 추적 정보는 Instana UI에서 확인할 수 있습니다.

또한 OTLP 엔드포인트를 사용하여 PHP 애플리케이션을 구성함으로써, OpenTelemetry 추적 정보를 Instana 에이전트나 백엔드로 직접 전송하도록 설정할 수 있습니다.

OTLP 엔드포인트의 에이전트로 데이터 전송

Instana 에이전트는 PHP 애플리케이션에서 OpenTelemetry 데이터를 직접 수신할 수 있는 OTLP 엔드포인트를 제공합니다.

Instana 에이전트의 OTLP 엔드포인트로 데이터를 전송하려면, PHP 애플리케이션을 다음과 같이 구성하십시오:

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

OTLP 백엔드 엔드포인트로 데이터 전송

Instana 에이전트와 직접 통신할 수 없는 환경에서는, PHP 애플리케이션을 구성하여 OpenTelemetry 데이터를 Instana 백엔드로 직접 전송하도록 설정할 수 있습니다.

자세한 내용은 ‘ OpenTelemetry 데이터를 Instana 으로 전송하기 ’를 참조하세요.

Instana 백엔드의 OTLP 엔드포인트로 데이터를 전송하려면, PHP 애플리케이션을 다음과 같이 구성하십시오:

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

를 귀하의 Instana 지역으로, {your-api-token} 를 귀하의 {region}Instana API 토큰으로 대체하십시오.

수동 계측 구성

다음과 같은 경우에는 OpenTelemetry SDK를 사용하여 애플리케이션에 수동으로 계측 기능을 추가해야 합니다:

  • OTel 이나 Instana 에서 지원하는 PHP 라이브러리 계측 기능을 사용하고 있지 않습니다.
  • PHP Tracer 라이브러리의 기능을 확장하고자 합니다.
  • 애플리케이션에 계측 기능을 적용하는 데 있어 더 세밀한 제어가 필요합니다.

수동 계측을 설정하려면 다음 단계를 따르십시오:

  1. OpenTelemetry, API 및 SDK 패키지를 설치하십시오.
    composer require open-telemetry/sdk
    composer require open-telemetry/api
    
  2. OpenTelemetry PHP 수동 계측 문서 에 따라 원하는 수동 OpenTelemetry 계측을 PHP 코드에 추가하십시오.

  3. 분산 애플리케이션에는 ‘ OpenTelemetry ’ 추적 컨텍스트 전파기를 선택하십시오. Instana 추적 전파를 위해 W3C 추적 헤더와 Instana 네이티브 헤더를 지원합니다.

    • Instana 전파기 사용

      OTEL_PROPAGATORS=instana
      
    • 프로파게이터 tracecontext 사용

      OTEL_PROPAGATORS=tracecontext
      

    프로파게이터를 사용하면 Instana 가 OpenTelemetry 스팬 및 기타 Instana 스팬을 애플리케이션의 단일 추적 정보로 통합할 수 있습니다.

    분산 추적을 위한 예제 계측에 대한 자세한 내용은 ‘분산 추적을 위한 컨텍스트 전파 활성화’를 참조하십시오.

다음의 간단한 예제는 부모 스팬과 자식 스팬을 사용한 수동 계측을 보여줍니다:


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 번식가

‘더 OpenTelemetry 프로파게이터’ 는 해당 PHP 애플리케이션과 함께 사용할 Instana 헤더 전파 및 바게이지 HTTP 전파 기능을 제공합니다. 이 프로파게이터는 Instana 트레이스 상관 관계 헤더를 (X-INSTANA-T/X-INSTANA-S/X-INSTANA-L)OpenTelemetry 로 변환하고, SpanContextOpenTelemetrySpanContext 를 Instana 헤더로 변환합니다.

여기에서 Instana 컨텍스트 전파기를 사용하여 수동 계측을 시연하는 간단한 분산형 PHP 애플리케이션 예제를 확인할 수 있습니다.

참고: Instana 프로파게이터는 부모 span이 없는 TraceState 헤더를 처리하지 않습니다.

번식기 설치하기

Composer를 통해 Instana propagator 확장 기능을 설치하려면 다음 명령어를 사용하세요:

composer require open-telemetry/opentelemetry-propagation-instana

프로파게이터 사용법

Instana 프로파게이터는 extract 및 inject 메서드를 모두 사용하여 헤더에 추적 컨텍스트를 추출하고 주입합니다. 프로파게이터는 다음과 같은 방법으로 인스턴스화할 수 있습니다:

  • Instana 전파기 클래스를 인스턴스화합니다.
$propagator = InstanaPropagator::getInstance();
  • 환경 변수 사용
OTEL_PROPAGATORS=instana,baggage

Baggage 전파를 위해 ` OpenTelemetryMultiTextMapPropagator`를 사용하고, 다음과 같이 ` Instana ` 및 Baggage 전파기 등의 전파기 배열 목록을 전달하십시오:

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

옵션 3: Instana OpenTelemetry PHP 내보내기 도구 사용

Instana OpenTelemetry PHP 익스포터는 OpenTelemetry 스팬을 Instana 네이티브 스팬으로 변환하고, Instana 네이티브 전송 계층을 사용하여 추적을 Instana 백엔드로 전달하는 전용 익스포터입니다.

Instana OpenTelemetry PHP 익스포터의 설치, 구성 및 사용법에 대한 자세한 내용은 OpenTelemetry PHP 익스포터를 참조하십시오.