PHP ログとトレースの接続

PHP ログとトレースの接続

自動挿入

PHP にロギングを実装するさまざまな方法がありPHP の組み込みエラーロギング API が完全に回避されている場合、Datadog PHP トレースライブラリは、トレースとスパン ID をログに自動的に挿入できることが確実ではありません。 PHP ログとトレースを手動で接続する方法については、以下のセクションをご覧ください。

手動挿入

注: 関数 \DDTrace\current_context() は、バージョン 0.61.0 で導入されています。

ログとトレースを一緒に接続するには、ログに、それぞれトレース ID とスパン ID を含む dd.trace_id 属性と dd.span_id 属性が含まれている必要があります。

Datadog ログインテグレーションを使ってログをパースしていない場合は、カスタムログパースルールによって dd.trace_iddd.span_id が文字列としてパースされ、トレースリマッパーのおかげで再マップされていることを確実にする必要があります。詳細については、FAQ トレース ID パネルに相関ログが表示されないのはなぜですか?を参照してください。

たとえば、次でこの 2 つの属性をログに追加します。

  <?php
  $context = \DDTrace\current_context();
  $append = sprintf(
      ' [dd.trace_id=%d dd.span_id=%d]',
      $context['trace_id'],
      $context['span_id']
  );
  my_error_logger('Error message.' . $append);
?>

ロガーが monolog/monolog ライブラリを実装する場合、Logger::pushProcessor() を使ってすべてのログメッセージに識別子を自動的に付加します:

<?php
  $logger->pushProcessor(function ($record) {
      $context = \DDTrace\current_context();
      $record['message'] .= sprintf(
          ' [dd.trace_id=%d dd.span_id=%d]',
          $context['trace_id'],
          $context['span_id']
      );
      return $record;
  });
?>

アプリケーションで、ログメッセージに trace_id および span_id を付加するのではなく json ログフォーマットを使用している場合は、以下の ID を含む一時レベルキー “dd” を追加できます。

<?php
  $context = \DDTrace\current_context();
  $logger->pushProcessor(function ($record) {
      $record['dd'] = [
          'trace_id' => $context['trace_id'],
          'span_id'  => $context['span_id'],
      ];

      return $record;
  });
?>

その他の参考資料