Associer des logs PHP à des traces
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Associer des logs PHP à des traces

Injection automatique d’ID de trace

Compte tenu des nombreuses méthodes de logging pouvant être utilisées dans PHP, dont certaines contournent complètement l’API de logging d’erreurs intégrée de PHP, la bibliothèque de tracing PHP de Datadog ne peut pas injecter d’ID de trace et de span de manière fiable et automatique dans les logs. Consultez la section ci-dessous pour savoir comment associer vos logs PHP et vos traces manuellement.

Injection manuelle d’ID de trace

Pour associer vos logs et vos traces, vos logs doivent contenir les attributs dd.trace_id et dd.span_id, qui contiennent respectivement votre ID de trace et votre ID de span.

Si vous n’utilisez pas une intégration de log de Datadog pour analyser vos logs, des règles de parsing de log personnalisées doivent s’assurer que dd.trace_id et dd.span_id sont analysés en tant que chaînes de caractères et remappés grâce au remappeur de traces. Pour en savoir plus, consultez la FAQ Pourquoi mes logs mis en corrélation ne figurent-ils pas dans le volet des ID de trace ?.

Par exemple, ces deux attributs seront ajoutés à vos logs de la manière suivante :

  <?php
  $span = \DDTrace\GlobalTracer::get()->getActiveSpan();
  $append = sprintf(
      ' [dd.trace_id=%d dd.span_id=%d]',
      $span->getTraceId(),
      $span->getSpanId()
  );
  my_error_logger('Error message.' . $append);
?>

Si le logger implémente la bibliothèque monolog/monolog, utilisez Logger::pushProcessor() pour ajouter automatiquement les identifiants à tous les messages de log :

<?php
  $logger->pushProcessor(function ($record) {
      $span = \DDTrace\GlobalTracer::get()->getActiveSpan();
      if (null === $span) {
          return $record;
      }
      $record['message'] .= sprintf(
          ' [dd.trace_id=%d dd.span_id=%d]',
          $span->getTraceId(),
          $span->getSpanId()
      );
      return $record;
  });
?>

Pour aller plus loin