temporal / open-telemetry-interceptors
本包为Temporal PHP SDK提供OpenTelemetry拦截器
Requires
- php: >=8.1
- open-telemetry/sdk: ^1
- temporal/sdk: ^2.7
Requires (Dev)
- phpunit/phpunit: ^10.2
- vimeo/psalm: ^5.12
This package is not auto-updated.
Last update: 2024-09-11 14:38:24 UTC
README
介绍
temporal/open-telemetry-interceptors
包为Temporal系统中使用 OpenTelemetry SDK 跟踪工作流和活动提供了一组OpenTelemetry拦截器。
这些拦截器允许您捕获和跟踪各种操作和事件,例如处理活动、启动或向工作流发送信号,以及执行工作流事件。通过集成OpenTelemetry跟踪,您可以了解Temporal应用程序的行为和性能。

安装
要安装此包,请使用Composer运行以下命令
composer require temporal/open-telemetry-interceptors
用法
使用拦截器创建Pipeline Provider
首先创建一个包含您想要使用的拦截器的pipeline provider。
以下示例显示了如何使用 OpenTelemetryActivityInboundInterceptor
创建一个pipeline provider
use OpenTelemetry\SDK\Trace; use Temporal\OpenTelemetry\Interceptor\OpenTelemetryActivityInboundInterceptor; use Temporal\Interceptor\SimplePipelineProvider; $spanProcessor = (new Trace\SpanProcessorFactory())->create( (new Trace\ExporterFactory())->create(); ); $tracerProvider = new Trace\TracerProvider($spanProcessor); $propagator = Trace\Propagation\TraceContextPropagator::getInstance(); $tracer = new Temporal\OpenTelemetry\Tracer( $tracerProvider->getTracer('My super app'), $propagator ); $activityInterceptor = new OpenTelemetryActivityInboundInterceptor($tracer); $provider = new SimplePipelineProvider([ $activityInterceptor ]);
在此代码片段中,我们首先使用OpenTelemetry SDK创建一个span处理器和一个tracer provider。我们还初始化了一个用于跟踪上下文传播的传播器。
接下来,我们创建一个 Temporal\OpenTelemetry\Tracer
类的实例,它封装了来自tracer provider的OpenTelemetry tracer。我们为我们的应用程序提供了一个唯一的名称和传播器。
使用拦截器创建Workflow Client和Worker
接下来,创建一个包含您想要使用的拦截器的workflow client和worker。
$client = new Temporal\Client\WorkflowClient( ..., interceptorProvider: $provider ); $worker = new WorkerFactory( ..., pipelineProvider: $provider );
这些步骤确保拦截器被应用于相应的客户端和worker实例,从而可以跟踪所需的操作和事件。
拦截器
本包提供三种类型的拦截器
OpenTelemetryActivityInboundInterceptor
Temporal\OpenTelemetry\Interceptor\OpenTelemetryActivityInboundInterceptor
跟踪工作流中活动的处理。
它捕获并跟踪以下span
RunActivity
:在处理活动时创建的span。
OpenTelemetryWorkflowClientCallsInterceptor
Temporal\OpenTelemetry\Interceptor\OpenTelemetryWorkflowClientCallsInterceptor
从客户端跟踪工作流的启动和信号。它捕获名为的span
StartWorkflow:<workflow type>
SignalWithStartWorkflow:<workflow type>
.
这些span提供了对工作流启动和信号的可视化。
OpenTelemetryWorkflowOutboundRequestInterceptor
Temporal\OpenTelemetry\Interceptor\OpenTelemetryWorkflowOutboundRequestInterceptor
跟踪执行各种工作流事件,包括 ExecuteActivity
、ExecuteLocalActivity
、ExecuteChildWorkflow
、ContinueAsNew
、NewTimer
、CompleteWorkflow
、SignalExternalWorkflow
、CancelExternalWorkflow
、GetVersion
、Panic
、SideEffect
、UpsertSearchAttributes
和 Cancel
。
它捕获名为 WorkflowOutboundRequest:<event>
的span,提供了关于出站事件请求的详细信息。
可用的拦截器接口
Temporal SDK提供了一组接口,允许您实现用于Temporal工作流和活动生命周期的各种操作和事件的拦截器。这些接口使您能够通过拦截和修改执行流程来自定义和扩展Temporal组件的行为。
ActivityInboundInterceptor
此接口定义了拦截工作流中活动执行的合同。实现此接口允许您在工作流开始活动且Temporal执行它时进行拦截。
- 当活动在工作流中执行时,会调用
interceptActivityInbound()
方法,提供了拦截和修改行为的机会。
通过实现此接口,您可以在活动执行前后添加自定义逻辑、执行验证或应用额外功能。
WorkflowClientCallsInterceptor
此接口定义了拦截客户端启动工作流或发送信号的合同。实现此接口允许您拦截从客户端发起的工作流相关操作。
- 当客户端启动工作流或发送信号时,会调用
interceptWorkflowClientCalls()
方法,提供了拦截和修改行为的机会。
通过实现此接口,您可以在输入上执行预处理,根据特定条件修改工作流执行,或添加自定义逻辑。
WorkflowOutboundCallsInterceptor
此接口定义了拦截各种工作流出站调用的合同。实现此接口允许您拦截工作流发出的特定出站调用。
- 当工作流执行出站调用时,如执行本地活动、执行子工作流或向外部工作流发送信号时,会调用
interceptWorkflowOutboundCalls()
方法。
通过实现此接口,您可以拦截和修改出站调用,添加自定义行为,或在特定工作流事件执行前后执行额外操作。
WorkflowOutboundRequestInterceptor
此接口定义了拦截工作流发出的出站事件请求的合同。实现此接口允许您拦截特定出站事件请求,例如执行活动、以新工作流继续、向外部工作流发送信号或取消工作流。
- 当工作流发出出站事件请求时,会调用
interceptWorkflowOutboundRequest()
方法,提供了拦截和修改请求的机会。
通过实现此接口,您可以拦截和修改出站事件请求,添加自定义元数据、修改有效负载,或在发送请求之前执行额外操作。