Skip to content

PHP

Instrument your PHP applications to send traces, logs, and metrics to Kopai.

Terminal window
composer require open-telemetry/sdk open-telemetry/exporter-otlp \
php-http/guzzle7-adapter guzzlehttp/guzzle nyholm/psr7
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Common\Export\Http\PsrTransportFactory;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
use OpenTelemetry\SemConv\ResourceAttributes;
use OpenTelemetry\Contrib\Otlp\ContentTypes;
$endpoint = getenv('OTEL_EXPORTER_OTLP_ENDPOINT') ?: 'http://localhost:4318';
$serviceName = getenv('OTEL_SERVICE_NAME') ?: 'my-service';
// Create resource
$resource = ResourceInfoFactory::emptyResource()->merge(
ResourceInfo::create(Attributes::create([
ResourceAttributes::SERVICE_NAME => $serviceName,
]))
);
// Create OTLP HTTP exporter
$transport = PsrTransportFactory::discover()->create(
"$endpoint/v1/traces",
ContentTypes::JSON
);
$exporter = new SpanExporter($transport);
// Build and register tracer provider
$tracerProvider = TracerProvider::builder()
->addSpanProcessor(new SimpleSpanProcessor($exporter))
->setResource($resource)
->build();
// Get tracer and create spans
$tracer = $tracerProvider->getTracer('my-app');
$span = $tracer->spanBuilder('my-operation')->startSpan();
// ... your code
$span->end();

Set the required environment variables and run:

Terminal window
export OTEL_EXPORTER_OTLP_ENDPOINT="https://otlp.kopai.app"
export OTEL_SERVICE_NAME="my-service"
php -S 0.0.0.0:8080
VariableDescription
OTEL_EXPORTER_OTLP_ENDPOINTKopai OTLP endpoint
OTEL_SERVICE_NAMEName shown in Kopai UI

For a complete working example:

PHP Example