temporal/open-telemetry-interceptors

本包为Temporal PHP SDK提供OpenTelemetry拦截器

dev-master 2024-08-28 09:13 UTC

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应用程序的行为和性能。

otel

安装

要安装此包,请使用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 跟踪执行各种工作流事件,包括 ExecuteActivityExecuteLocalActivityExecuteChildWorkflowContinueAsNewNewTimerCompleteWorkflowSignalExternalWorkflowCancelExternalWorkflowGetVersionPanicSideEffectUpsertSearchAttributesCancel

它捕获名为 WorkflowOutboundRequest:<event> 的span,提供了关于出站事件请求的详细信息。

可用的拦截器接口

Temporal SDK提供了一组接口,允许您实现用于Temporal工作流和活动生命周期的各种操作和事件的拦截器。这些接口使您能够通过拦截和修改执行流程来自定义和扩展Temporal组件的行为。

ActivityInboundInterceptor

此接口定义了拦截工作流中活动执行的合同。实现此接口允许您在工作流开始活动且Temporal执行它时进行拦截。

  • 当活动在工作流中执行时,会调用 interceptActivityInbound() 方法,提供了拦截和修改行为的机会。

通过实现此接口,您可以在活动执行前后添加自定义逻辑、执行验证或应用额外功能。

WorkflowClientCallsInterceptor

此接口定义了拦截客户端启动工作流或发送信号的合同。实现此接口允许您拦截从客户端发起的工作流相关操作。

  • 当客户端启动工作流或发送信号时,会调用interceptWorkflowClientCalls()方法,提供了拦截和修改行为的机会。

通过实现此接口,您可以在输入上执行预处理,根据特定条件修改工作流执行,或添加自定义逻辑。

WorkflowOutboundCallsInterceptor

此接口定义了拦截各种工作流出站调用的合同。实现此接口允许您拦截工作流发出的特定出站调用。

  • 当工作流执行出站调用时,如执行本地活动、执行子工作流或向外部工作流发送信号时,会调用interceptWorkflowOutboundCalls()方法。

通过实现此接口,您可以拦截和修改出站调用,添加自定义行为,或在特定工作流事件执行前后执行额外操作。

WorkflowOutboundRequestInterceptor

此接口定义了拦截工作流发出的出站事件请求的合同。实现此接口允许您拦截特定出站事件请求,例如执行活动、以新工作流继续、向外部工作流发送信号或取消工作流。

  • 当工作流发出出站事件请求时,会调用interceptWorkflowOutboundRequest()方法,提供了拦截和修改请求的机会。

通过实现此接口,您可以拦截和修改出站事件请求,添加自定义元数据、修改有效负载,或在发送请求之前执行额外操作。