SDK(软件开发工具包)

OpenTelemetry SDK(软件开发工具包)提供了一个可工作的API实现,并可以以多种方式设置和配置。

手动设置

手动设置SDK可以最大程度地控制SDK的配置:

<?php
$exporter = new InMemoryExporter();
$meterProvider = new NoopMeterProvider();
$tracerProvider =  new TracerProvider(
    new BatchSpanProcessor(
        $exporter,
        ClockFactory::getDefault(),
        2048, //最大队列大小
        5000, //导出超时时间
        1024, //最大批处理大小
        true, //自动刷新
        $meterProvider
    )
);

SDK Builder(构建器)

SDK Builder提供了一个方便的接口来配置SDK的部分功能。但是,它不支持手动设置的所有功能。

<?php

$spanExporter = new InMemoryExporter(); //用于演示的模拟导出器

$meterProvider = MeterProvider::builder()
    ->addReader(
        new ExportingReader(new MetricExporter((new StreamTransportFactory())->create(STDOUT, 'application/x-ndjson'), /*Temporality::CUMULATIVE*/))
    )
    ->build();

$tracerProvider = TracerProvider::builder()
    ->addSpanProcessor(
        (new BatchSpanProcessorBuilder($spanExporter))
            ->setMeterProvider($meterProvider)
            ->build()
    )
    ->build();

$loggerProvider = LoggerProvider::builder()
    ->addLogRecordProcessor(
        new SimpleLogsProcessor(
            (new ConsoleExporterFactory())->create()
        )
    )
    ->setResource(ResourceInfo::create(Attributes::create(['foo' => 'bar'])))
    ->build();

Sdk::builder()
    ->setTracerProvider($tracerProvider)
    ->setLoggerProvider($loggerProvider)
    ->setMeterProvider($meterProvider)
    ->setPropagator(TraceContextPropagator::getInstance())
    ->setAutoShutdown(true)
    ->buildAndRegisterGlobal();

自动加载

如果所有的配置都来自环境变量(或php.ini),您可以使用SDK的自动加载来自动配置并全局注册SDK。唯一的要求是您设置OTEL_PHP_AUTOLOAD_ENABLED=true,并按照sdk-configuration中的说明提供任何需要的/非标准的配置。

例如:

OTEL_PHP_AUTOLOAD_ENABLED=true \
OTEL_EXPORTER_OTLP_PROTOCOL=grpc \
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317 \
php example.php
<?php
require 'vendor/autoload.php'; // SDK的自动加载发生在composer初始化的一部分

$tracer = OpenTelemetry\API\Common\Instrumentation\Globals::tracerProvider()->getTracer('name', 'version', 'schema.url', [/*attributes*/]);
$meter = OpenTelemetry\API\Common\Instrumentation\Globals::meterProvider()->getMeter('name', 'version', 'schema.url', [/*attributes*/]);

SDK的自动加载发生在composer的自动加载器的一部分。

配置

PHP SDK支持大多数可用的配置。我们对规范的符合性列在了spec compliance matrix中。

此外,还有一些特定于PHP的配置:

名称 默认值 可选值或示例 描述
OTEL_PHP_TRACES_PROCESSOR batch batch, simple 选择Span处理器
OTEL_PHP_DETECTORS all env, host, os, process, process_runtime, sdk, sdk_provided, container 选择资源检测器
OTEL_PHP_AUTOLOAD_ENABLED false true, false 启用/禁用SDK的自动加载
OTEL_PHP_LOG_DESTINATION default error_log, stderr, stdout, psr3, none 内部错误和警告的输出位置
OTEL_PHP_INTERNAL_METRICS_ENABLED false true, false 是否SDK应该发出有关其内部状态(例如批处理处理器)的度量信息
OTEL_PHP_DISABLED_INSTRUMENTATIONS [] 自动仪表化的名称 禁用一个或多个已安装的自动仪表化

配置可以通过环境变量或php.ini(或php.ini包含的文件)提供。

最后修改 December 13, 2023: improve glossary translation (46f8201b)