PHP
Integration
Section titled “Integration”Instrument your PHP applications to send traces, logs, and metrics to Kopai.
Installation
Section titled “Installation”composer require open-telemetry/sdk open-telemetry/exporter-otlp \ php-http/guzzle7-adapter guzzlehttp/guzzle nyholm/psr7Basic Setup
Section titled “Basic Setup”<?phprequire __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();Running Your Application
Section titled “Running Your Application”Set the required environment variables and run:
export OTEL_EXPORTER_OTLP_ENDPOINT="https://otlp.kopai.app"export OTEL_SERVICE_NAME="my-service"php -S 0.0.0.0:8080| Variable | Description |
|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT | Kopai OTLP endpoint |
OTEL_SERVICE_NAME | Name shown in Kopai UI |
Working Example
Section titled “Working Example”For a complete working example: