OpenTelemetry PHP 的上下文实现。

1.1.0beta1 2024-08-21 00:29 UTC

README

Releases Source Mirror Latest Version Stable

OpenTelemetry 上下文

不可变执行作用域传播机制,更详细的信息请参阅 opentelemetry-specification

安装

composer require open-telemetry/context

用法

隐式传播

$context = Context::getCurrent();
// modify context
$scope = $context->activate();
try {
    // run within new context
} finally {
    $scope->detach();
}

建议在调用 ::activate() 后使用 try-finally 语句,以确保创建的作用域被正确地 ::detach()

调试作用域

默认情况下,由 ::activate() 创建的作用域在非生产环境中对无效和缺失的 ::detach() 调用发出警告。可以通过将环境变量 OTEL_PHP_DEBUG_SCOPES_DISABLED 设置为真值来禁用此功能。禁用仅建议用于使用 exit / die 的应用程序,以防止无法避免的通知。

异步应用程序

纤程支持 - 自动将上下文传播到新创建的纤程

需要 NTS 构建,ext-ffi,并将环境变量 OTEL_PHP_FIBERS_ENABLED 设置为真值。此外,如果 ffi.enable 设置为 preload,则对于非 CLI SAPI,必须预加载 vendor/autoload.php

事件循环

事件循环必须在回调执行时恢复原始上下文。一个基本的实现可能如下所示,尽管实现应尽可能避免保留对参数的不必要的引用

function bindContext(Closure $closure): Closure {
    $context = Context::getCurrent();
    return static function (mixed ...$args) use ($closure, $context): mixed {
        $scope = $context->activate();
        try {
            return $closure(...$args);
        } finally {
            $scope->detach();
        }
    };
}

贡献

此存储库是只读的 git 子树分割。要贡献,请参阅主要的 OpenTelemetry PHP monorepo