open-telemetry/api
OpenTelemetry PHP API package providing the core interfaces and no-op implementations for tracing, metrics, and context propagation. Use it to instrument libraries and apps while remaining exporter/SDK agnostic and compatible with OpenTelemetry.
open-telemetry/api package is a core dependency for implementing OpenTelemetry in PHP/Laravel, enabling distributed tracing, metrics, and logging. It aligns perfectly with modern observability architectures, particularly for microservices, APIs, and event-driven systems.Span, Meter, and Logger interfaces integrate seamlessly with Laravel’s event system and service providers.InstrumentationInterface, SpanProcessor) that can be implemented by Laravel-specific SDKs (e.g., open-telemetry/sdk). This allows TPMs to swap implementations without breaking application logic.AppServiceProvider via a singleton OpenTelemetry\API\GlobalOpenTelemetry instance.OpenTelemetry\Instrumentation\Http\ServerMiddleware).Illuminate\Queue and Illuminate\Bus can be instrumented via OpenTelemetry’s Span context propagation.open-telemetry/sdk) is needed. This is a deliberate design to decouple API from exporters.InstrumentationInterface and ConfigurationResolver are deprecated (v1.9.0+). TPMs must migrate to newer patterns (e.g., InstrumentationLibrary).SpanContext) is required for cross-service tracing. Laravel’s service container can simplify this via dependency injection.SpanProcessor to limit retention./api/payments)?Illuminate\Http\Request via middleware (e.g., OpenTelemetry\Instrumentation\Http\ServerMiddleware).OpenTelemetry\Instrumentation\Queue\QueueMiddleware to trace async jobs.OpenTelemetry\Instrumentation\Database\QuerySpan.Monolog handlers with OpenTelemetry\Instrumentation\Logger\LoggerHandler.OpenTelemetry\Instrumentation\Pdo\PdoSpan for database spans.OpenTelemetry\Instrumentation\Grpc\GrpcSpan if using Laravel Octane.Illuminate\Bus and Illuminate\Queue can propagate SpanContext via Span::storeInBaggage().open-telemetry/api to composer.json:
composer require open-telemetry/api
AppServiceProvider:
use OpenTelemetry\API\GlobalOpenTelemetry;
use OpenTelemetry\API\Common\Instrumentation\InstrumentationLibrary;
public function boot()
{
$library = InstrumentationLibrary::create('laravel-app');
GlobalOpenTelemetry::getMeterProvider()->registerInstrumentationLibrary($library);
}
// app/Http/Kernel.php
protected $middleware = [
\OpenTelemetry\Instrumentation\Http\ServerMiddleware::class,
];
AlwaysOnSampler for dev, ProbabilitySampler for prod).open-telemetry/sdk) and configure an exporter (e.g., OTLP):
use OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor;
use OpenTelemetry\SDK\Trace\Export\OtlpHttpSpanExporter;
$exporter = new OtlpHttpSpanExporter('http://otel-collector:4318/v1/traces');
GlobalOpenTelemetry::getTracerProvider()->addSpanProcessor(
new BatchSpanProcessor($exporter)
);
$tracer = GlobalOpenTelemetry::getTracer('laravel-app');
$span = $tracer->spanBuilder('process-order')->startSpan();
try {
$span->addEvent('order-created', ['order_id' => $order->id]);
// Business logic...
} finally {
$span->end();
}
open-telemetry/sdk-metrics to expose Laravel metrics (e.g., http.server.duration).OpenTelemetry\Instrumentation\Logger\LoggerHandler to OTLP.ErrorHandler to enrich Sentry events.| Step | Priority | Dependencies | Risk Level |
|---|---|---|---|
Add API to composer.json |
1 | None | Low |
Bootstrap in AppServiceProvider |
1 | open-telemetry/api |
Low |
| Add HTTP middleware | 2 | Laravel middleware pipeline | Medium |
| Configure sampling | 2 | open-telemetry/sdk (future) |
Medium |
| Integrate queues/jobs | 3 | Laravel Queue system | Medium |
| Add SDK + exporter | 4 | OTLP collector/Jaeger | High |
| Custom business spans | 5 | Application logic | Low |
open-telemetry/sdk) may introduce breaking changes. Pin versions in composer.json:
"open-telemetry/api": "^1.9",
"open-telemetry/sdk": "^1.9"
How can I help you explore Laravel packages today?