open-telemetry/gen-otlp-protobuf
Generated OpenTelemetry OTLP protobuf classes for PHP. Requires google/protobuf and can use the PECL protobuf extension for much faster production performance. Read-only split from the OpenTelemetry PHP monorepo.
Guzzle), queue workers, and event listeners can directly use OTLP for telemetry. Requires minimal glue code (e.g., wrapping OpenTelemetry\API with this protobuf generator).open-telemetry/opentelemetry-php), this package fills a gap by providing protobuf definitions for OTLP/gRPC. If not, adoption requires pairing with an OTLP collector (e.g., otel-collector).Resource, Span, Metric). Misconfiguration may lead to malformed telemetry or collector rejection.grpc/grpc) may introduce dependencies and complexity. HTTP/JSON is simpler but less performant.open-telemetry/opentelemetry-php).OpenTelemetry\API as a singleton)?Illuminate\Http\Kernel) that can inject spans?open-telemetry/opentelemetry-php for SDK integration. Leverage Laravel’s service provider to bootstrap OpenTelemetry in config/app.php.Http facade or Guzzle. For gRPC, integrate grpc/grpc via a custom client.Illuminate\Queue events (e.g., job.processing) with spans.Events\Dispatcher).otel-collector (Docker or Kubernetes) to receive telemetry. Configure receivers for otlp/grpc or otlp/http.open-telemetry/opentelemetry-php (SDK).grpc/grpc (if using gRPC; optional).vlucas/phpdotenv (for config management).otel-collector-contrib Docker image).// app/Http/Middleware/TraceRequests.php
public function handle($request, Closure $next) {
$tracer = app('opentelemetry')->getTracerProvider()->getTracer(__CLASS__);
$span = $tracer->spanBuilder('HTTP Request')->startSpan();
try {
$response = $next($request);
$span->setAttribute('http.method', $request->method());
$span->end();
return $response;
} finally {
$span->end();
}
}
otel-collector in staging/production with appropriate receivers and exporters.otel-collector-config.yaml:
receivers:
otlp:
protocols:
grpc:
http:
processors:
batch:
exporters:
logging:
loglevel: debug
jaeger:
endpoint: "jaeger:14250"
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [jaeger, logging]
open-telemetry/opentelemetry-php’s supported versions.pecl install grpc).4317 by default).config/app.php to bind OpenTelemetry services.composer require open-telemetry/gen-otlp-protobuf
public function register() {
$this->app->singleton(\OpenTelemetry\API\ProviderInterface::class, function () {
return \OpenTelemetry\SDK\Common\ResourceInfo::create(%env('SERVICE_NAME'))
->withAttributes([
'service.version' => '1.0.0',
'deployment.environment' => 'production',
]);
});
}
otel-collector in Docker.AlwaysOnSampler for dev, ParentBasedSampler for prod).How can I help you explore Laravel packages today?