Splunk Observability Cloud 用に PHP アプリケーションを手動でインストルメンテーションする

スパンにカスタム属性を追加する場合、またはメトリクスを手動で生成する場合は、 PHP アプリケーションを手動でインストルメンテーションしてください。Splunk Observability Cloud に PHP アプリケーションを手動でインストルメンテーションする方法については、続きをお読みください。

PHP 用 OpenTelemetry インストルメンテーションは、独自の手動インストルメンテーションを追加することによって構築できるベースを提供します。自動インストルメンテーションと手動インストルメンテーションの両方を使うことで、アプリケーションやクライアント、フレームワークのロジックや機能をよりよくインストルメンテーションできるようになります。

カスタムスパンとトレースの作成

カスタムのスパンとトレースを作成するには、以下の手順に従ってください:

  1. インストルメンテーション ライブラリを使用しない場合は、TracerProvider エントリポイントを作成します。

    $tracerProvider = Globals::tracerProvider();
  2. トレーサーを作成する:

    // Acquire the tracer only where needed
    
    $tracer = $tracerProvider->getTracer(
       'instrumentation-scope-name', // Name (Required)
       'instrumentation-scope-version', // Version
       'http://example.com/my-schema', // Schema URL
       ['foo' => 'bar'] // Resource attributes
    );
  3. スパンの作成:

    <?php
    public function roll($rolls) {
       $span = $this->tracer->spanBuilder("rollTheDice")->startSpan();
       $result = [];
       for ($i = 0; $i < $rolls; $i++) {
          $result[] = $this->rollOnce();
       }
       $span->end();
       return $result;
    }
  4. オプションで、スパンのメタデータを充実させる属性を設定します。

    $span->setAttribute(TraceAttributes::CODE_FUNCTION, 'rollOnce');
    $span->setAttribute(TraceAttributes::CODE_FILEPATH, __FILE__);

カスタムメトリクスの作成

カスタムメトリクスを作成するには、以下の手順に従います:

  1. 以下の依存関係を追加します:

    use OpenTelemetry\SDK\Metrics\MetricExporter\ConsoleMetricExporterFactory;
    use OpenTelemetry\SDK\Metrics\MeterProvider;
    use OpenTelemetry\SDK\Metrics\MetricReader\ExportingReader;
    
    require 'vendor/autoload.php';
  2. MeterProvider エントリポイントを作成する:

    $meterProvider = Globals::meterProvider();
  3. ゲージなどのインストルメントを作成します。

    $queue = [
       'job1',
       'job2',
       'job3',
    ];
    $reader = $meterProvider
       ->getMeter('demo_meter')
       ->createObservableGauge('queued', 'jobs', 'The number of jobs enqueued')
       ->observe(static function (ObserverInterface $observer) use (&$queue): void {
          $observer->observe(count($queue));
       });
    $reader->collect();
    array_pop($queue);
    $reader->collect();