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/info 和 https://site/xyz/healthcheck 等请求的遥测:
OTEL_PHP_EXCLUDED_URLS="client/.*/info,healthcheck"
配置
PHP SDK 支持大多数可用的 配置选项。有关符合性详情,请参阅 符合性矩阵。
还有一些 PHP 特有的配置:
| 名称 | 默认值 | 值 | 示例 | 描述 |
|---|---|---|---|---|
OTEL_PHP_TRACES_PROCESSOR | batch | batch, simple | simple | Span 处理器选择 |
OTEL_PHP_DETECTORS | all | env, host, os, process, process_runtime, sdk, sdk_provided, container | env,os,process | 资源检测器选择 |
OTEL_PHP_AUTOLOAD_ENABLED | false | true, false | true | 启用/禁用 SDK 自动加载 |
OTEL_PHP_LOG_DESTINATION | default | error_log, stderr, stdout, psr3, none | stderr | 内部错误和警告将被发送到何处 |
OTEL_PHP_INTERNAL_METRICS_ENABLED | false | true, false | true | SDK 是否应发出有关其内部状态的指标(例如,批处理处理器) |
OTEL_PHP_DISABLED_INSTRUMENTATIONS | [] | Instrumentation 名称,或 all | psr15,psr18 | 禁用一个或多个已安装的自动 instrumentation |
OTEL_PHP_EXCLUDED_URLS | `` | 逗号分隔的正则表达式模式 | client/.*/info,healthcheck | 如果请求 URL 匹配提供的正则表达式之一,则不加载 SDK |
OTEL_PHP_DEBUG_SCOPES_DISABLED | false | true, false | true | 启用或禁用范围分离调试。 |
OTEL_PHP_EXPERIMENTAL_AUTO_ROOT_SPAN | false | true, false | true | 在 composer 自动加载期间启动根 Span |
配置可以作为环境变量提供,或通过 php.ini(或 php.ini 包含的文件)提供。
php.ini 中的布尔值应被双引号保护,例如 "true" 或 "false",这样 PHP 不会将其转换为数字。
OTEL_PHP_AUTOLOAD_ENABLED="true"
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317