Експортери
Надсилайте телеметрію до OpenTelemetry Collector, щоб переконатися, що вона експортується правильно. Використання Collector у виробничих середовищах є найкращою практикою. Щоб візуалізувати вашу телеметрію, експортуйте її до бекенду, такого як Jaeger, Zipkin, Prometheus або бекенд, специфічний для постачальника.
Доступні експортери
Реєстр містить список експортерів для PHP.
Серед експортерів, OpenTelemetry Protocol (OTLP) експортери розроблені з урахуванням моделі даних OpenTelemetry, випускаючи дані OTel без втрати інформації. Крім того, багато інструментів, які працюють з телеметричними даними, підтримують OTLP (таких як Prometheus, Jaeger і більшість постачальників), надаючи вам високий ступінь гнучкості, коли це потрібно. Щоб дізнатися більше про OTLP, дивіться Специфікацію OTLP.
Ця сторінка охоплює основні експортери OpenTelemetry PHP та як їх налаштувати.
Примітка
Якщо ви використовуєте інструментування без коду, ви можете налаштувати експортери за допомогою конфігурації без коду для налаштування експортерів.OTLP
Щоб надіслати дані трасування на точку доступу OTLP (наприклад, колектор або Jaeger), вам потрібно використовувати пакунок open-telemetry/exporter-otlp
та HTTP клієнт, який задовольняє psr/http-client-implementation
:
composer require \
open-telemetry/exporter-otlp \
php-http/guzzle7-adapter
Щоб використовувати експортер gRPC, вам також потрібно встановити пакунок open-telemetry/transport-grpc
та розширення grpc
:
pecl install grpc
composer require open-telemetry/transport-grpc
Далі, налаштуйте експортер з точкою доступу OTLP. Наприклад:
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\API\Signals;
use OpenTelemetry\Contrib\Grpc\GrpcTransportFactory;
use OpenTelemetry\Contrib\Otlp\OtlpUtil;
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
$transport = (new GrpcTransportFactory())->create('http://jaeger:4317' . OtlpUtil::method(Signals::TRACE));
$exporter = new SpanExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory;
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
$transport = (new OtlpHttpTransportFactory())->create('http://jaeger:4318/v1/traces', 'application/x-protobuf');
$exporter = new SpanExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory;
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
$transport = (new OtlpHttpTransportFactory())->create('http://jaeger:4318/v1/traces', 'application/json');
$exporter = new SpanExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
$tracer->spanBuilder('example')->startSpan()->end();
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory;
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
$transport = (new OtlpHttpTransportFactory())->create('http://jaeger:4318/v1/traces', 'application/x-ndjson');
$exporter = new SpanExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
$tracer->spanBuilder('example')->startSpan()->end();
Потім додайте наступний код для генерації відрізка:
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
$tracer
->spanBuilder('example')
->startSpan()
->end();
Щоб спробувати приклад вище, ви можете запустити Jaeger у контейнері Docker:
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-e COLLECTOR_OTLP_ENABLED=true \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:latest
Zipkin
Якщо ви використовуєте Zipkin для візуалізації трасувань, вам потрібно спочатку налаштувати його. Ось як запустити його локально у контейнері Docker.
docker run --rm -d -p 9411:9411 --name zipkin openzipkin/zipkin
Встановіть пакунок експорту як залежність для вашого застосунку:
composer require open-telemetry/exporter-zipkin
Оновіть приклад для використання експорту Zipkin і надсилання даних на ваш бекенд Zipkin:
$transport = \OpenTelemetry\SDK\Common\Export\Http\PsrTransportFactory::discover()
->create('http://zipkin:9411/api/v2/spans', 'application/json');
$zipkinExporter = new ZipkinExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($zipkinExporter)
);
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
Мінімізація затримок експорту
Більшість PHP середовищ є синхронними та блокуючими. Надсилання телеметричних даних може затримати отримання HTTP відповідей вашими користувачами.
Якщо ви використовуєте fastcgi
, ви можете викликати fastcgi_finish_request()
після надсилання відповіді користувачу, що означає, що затримки у надсилання телеметричних даних не будуть затримувати обробку запитів.
Щоб мінімізувати вплив повільного транспорту телеметричних даних, особливо для зовнішніх або хмарних бекендів, вам слід розглянути використання OpenTelemetry Collector як агента. Агент може швидко приймати, а потім пакетно відправляти телеметричні дані до бекенду.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!