open-telemetry/api
OpenTelemetry PHP API package: vendor-neutral interfaces and context propagation for traces, metrics, and logs. Use it to instrument libraries/apps while staying decoupled from any specific SDK implementation. Documentation at opentelemetry.io.
open-telemetry/api package provides a standardized, vendor-neutral API for instrumenting Laravel applications with traces, metrics, and context propagation, aligning with modern observability best practices. It integrates seamlessly with OpenTelemetry’s ecosystem (e.g., Jaeger, Zipkin, Prometheus) and supports distributed tracing—critical for microservices and cloud-native Laravel deployments.Span, Meter, Propagator) that can be implemented by backend services (e.g., OTLP exporters). This allows TPMs to swap implementations (e.g., switch from Jaeger to Honeycomb) without refactoring instrumentation logic.OpenTelemetry\API\Trace\TracerInterface to a concrete tracer (e.g., OpenTelemetry\SDK\Trace\Tracer) in AppServiceProvider.OpenTelemetry\Contrib\HTTP\TraceMiddleware), auto-instrumenting routes, exceptions, and responses.opentelemetry-php/db (for PDO) or custom listeners for Laravel Events (illuminate\queue\JobProcessed) can extend instrumentation.InstrumentationInterface in v1.9.0) and active refactoring (e.g., logger changes). A TPM must:
1.8.x) and monitor upstream deprecations.Baggage.opentelemetry-php/sdk.)request_id)?TraceFlags::SAMPLED)?JobFailed) or Eloquent queries?HandleIncomingRequest).opentelemetry-php/db for PDO instrumentation or wrap Eloquent queries.illuminate\queue\Events (e.g., JobProcessed) or use opentelemetry-php/async for worker tracing.Log facade to emit structured logs with trace IDs.open-telemetry/api (interfaces) + open-telemetry/sdk (concrete implementations).open-telemetry/exporter-otlp (recommended) or open-telemetry/exporter-zipkin.opentelemetry-php/http, opentelemetry-php/db, or custom packages.open-telemetry/api and open-telemetry/sdk to composer.json.// app/Providers/AppServiceProvider.php
use OpenTelemetry\API\Trace\TracerInterface;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
public function register()
{
$tracerProvider = new TracerProvider();
$tracerProvider->addSpanProcessor(new SimpleSpanProcessor());
$this->app->singleton(TracerInterface::class, fn() => $tracerProvider->getTracer('laravel'));
}
use OpenTelemetry\SDK\Trace\Exporter\Otlp\OtlpSpanExporter;
$exporter = new OtlpSpanExporter();
$processor = new SimpleSpanProcessor($exporter);
$tracerProvider->addSpanProcessor($processor);
use OpenTelemetry\API\Trace\TracerInterface;
class ProcessOrderJob implements ShouldQueue
{
public function handle(TracerInterface $tracer)
{
$span = $tracer->spanBuilder('process_order')->startSpan();
try {
// Business logic
} finally {
$span->end();
}
}
}
open-telemetry/exporter-prometheus for metrics.opentelemetry-php/http for automatic header propagation.Meter for custom metrics (e.g., order_processing_time).TraceFlags::SAMPLED) to reduce volume.open-telemetry/api to a stable minor version (e.g., ^1.8) to avoid breaking changes.How can I help you explore Laravel packages today?