SDK

OpenTelemetry SDK 提供了 API 的工作实现,可以通过多种方式进行设置和配置。

手动设置

手动设置 SDK 可让您对 SDK 的配置拥有最大的控制权。

<?php
$exporter = new InMemoryExporter();
$meterProvider = new NoopMeterProvider();
$tracerProvider =  new TracerProvider(
    new BatchSpanProcessor(
        $exporter,
        Clock::getDefault(),
        2048, //max queue size
        5000, //scheduled delay millis
        5000, //export timeout
        1024, //max batch size
        true, //auto flush
        $meterProvider
    )
);

SDK 生成器

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

<?php

$spanExporter = new InMemoryExporter(); //mock exporter for demonstration purposes

$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();

自动加载

SDK 可以作为 composer 自动加载的一部分进行自动配置和全局注册。此功能的唯一要求是设置 OTEL_PHP_AUTOLOAD_ENABLED=true。配置可以通过不同的方式提供。

环境变量配置

环境变量(或相应的 php.ini 设置)可以提供 SDK 配置 中所述的任何必需/非标准配置。

例如

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 autoloading happens as part of composer initialization

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

声明式配置

PHP 支持 OpenTelemetry 的实验性 声明式配置,可以通过 YAML 文件配置 SDK。

要启用此功能,请将 OTEL_EXPERIMENTAL_CONFIG_FILE 设置为 /path/to/config.yaml,其中 config.yaml 是一个符合声明式配置模式的文件,例如:

config.yaml:

file_format: '0.4'
tracer_provider:
  processors:
    - batch:
        exporter:
          otlp_http:
            endpoint: https://:4318/v1/traces
resource:
  attributes:
    - name: service.name
      value: ${OTEL_SERVICE_NAME}
    - name: service.namespace
      value: my_service_namespace
OTEL_PHP_AUTOLOAD_ENABLED=true \
OTEL_EXPERIMENTAL_CONFIG_FILE=/path/to/config.yaml
php example.php

OTEL_EXPERIMENTAL_CONFIG_FILE 的存在将导致自动加载器尝试使用提供的配置文件进行配置,其他环境变量将被忽略。

排除的 URL

如果请求 URL 匹配正则表达式,您可以禁用 SDK 自动加载。匹配排除的 URL 会阻止生成或导出任何遥测数据。您可以在 Apache 或 NGINX 等无状态 PHP 运行时中使用此功能,用于处理健康检查等请求。

例如,以下配置将禁用对 https://site/client/123/infohttps://site/xyz/healthcheck 等请求的遥测:

OTEL_PHP_EXCLUDED_URLS="client/.*/info,healthcheck"

配置

PHP SDK 支持大多数可用的 配置选项。有关符合性详情,请参阅 符合性矩阵

还有一些 PHP 特有的配置:

名称默认值示例描述
OTEL_PHP_TRACES_PROCESSORbatchbatch, simplesimpleSpan 处理器选择
OTEL_PHP_DETECTORSallenv, host, os, process, process_runtime, sdk, sdk_provided, containerenv,os,process资源检测器选择
OTEL_PHP_AUTOLOAD_ENABLEDfalsetrue, falsetrue启用/禁用 SDK 自动加载
OTEL_PHP_LOG_DESTINATIONdefaulterror_log, stderr, stdout, psr3, nonestderr内部错误和警告将被发送到何处
OTEL_PHP_INTERNAL_METRICS_ENABLEDfalsetrue, falsetrueSDK 是否应发出有关其内部状态的指标(例如,批处理处理器)
OTEL_PHP_DISABLED_INSTRUMENTATIONS[]Instrumentation 名称,或 allpsr15,psr18禁用一个或多个已安装的自动 instrumentation
OTEL_PHP_EXCLUDED_URLS``逗号分隔的正则表达式模式client/.*/info,healthcheck如果请求 URL 匹配提供的正则表达式之一,则不加载 SDK
OTEL_PHP_DEBUG_SCOPES_DISABLEDfalsetrue, falsetrue启用或禁用范围分离调试。
OTEL_PHP_EXPERIMENTAL_AUTO_ROOT_SPANfalsetrue, falsetrue在 composer 自动加载期间启动根 Span

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

OTEL_PHP_AUTOLOAD_ENABLED="true"
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317

最后修改于 2025 年 11 月 17 日: 修复 PHP SDK 手动设置 (#8427) (0a97406a)