Instrumentación personalizada de PHP con la API de OpenTelemetry
Overview
There are a few reasons to manually instrument your applications with the OpenTelemetry API:
- You are not using Datadog supported library instrumentation.
- You want to extend the
ddtrace
library’s functionality. - You need finer control over instrumenting your applications.
The ddtrace
library provides several techniques to help you achieve these goals. The following sections demonstrate how to use the OpenTelemetry API for custom instrumentation to use with Datadog.
Configuración
Para configurar OpenTelemetry para utilizar el proveedor de traza de Datadog:
- Instalar paquetes de la API de OpenTelemetry.
composer require open-telemetry/sdk
Añade la instrumentación manual de OpenTelemetry que desees a tu código PHP siguiendo la documentación de instrumentación manual de OpenTelemetry PHP.
Instala la biblioteca de rastreo de Datadog PHP.
Configura DD_TRACE_OTEL_ENABLED
en true
.
Datadog combina estos tramos de OpenTelemetry con otros tramos de Datadog APM tramos en una única traza de tu aplicación.
Añadir etiquetas al tramo
Puedes añadir atributos en el momento exacto en que inicias el tramo:
$span = $tracer->spanBuilder('mySpan')
->setAttribute('key', 'value')
->startSpan();
O mientras el tramo esté activo:
$activeSpan = OpenTelemetry\API\Trace\Span::getCurrent();
$activeSpan->setAttribute('key', 'value');
Configuración de errores en un tramo
La información de la excepción se captura y se adjunta al tramo si hay uno activo cuando se produce la excepción.
// Crear un tramo
$span = $tracer->spanBuilder('mySpan')->startSpan();
throw new \Exception('Oops!');
// 'mySpan' se marcará con un error y tendrá
// la traza del stack y el mensaje de excepción adjuntos como etiquetas
También se puede marcar manualmente una traza como errónea:
use OpenTelemetry\API\Trace\Span;
use OpenTelemetry\Context\Context;
// Solo se puede hacer después de los pasos de configuración, tales como la inicialización del rastreador.
try {
throw new \Exception('Oops!');
} catch (\Exception $e) {
$rootSpan = Span::fromContext(Context::getRoot());
$rootSpan->recordException($e);
}
Añadir tramos
Para añadir un tramo:
// Obtener un rastreador o usar uno existente
$tracerProvider = \OpenTelemetry\API\Globals::tracerProvider();
$tracer = $tracerProvider->getTracer('datadog')
// Crear un tramo
$span = $tracer->spanBuilder('mySpan')->startSpan();
// ... hacer algo
// Cerrar el tramo
$span->end();
Acceso a tramos activos
Para acceder al tramo activo en ese momento:
$span = OpenTelemetry\API\Trace\Span::getCurrent();
Lectura adicional
Más enlaces, artículos y documentación útiles: