diff --git a/packages/cli-v3/src/entryPoints/dev-run-worker.ts b/packages/cli-v3/src/entryPoints/dev-run-worker.ts index 7cd88ab5a9..f65cde31d4 100644 --- a/packages/cli-v3/src/entryPoints/dev-run-worker.ts +++ b/packages/cli-v3/src/entryPoints/dev-run-worker.ts @@ -207,6 +207,7 @@ async function doBootstrap() { instrumentations: config.telemetry?.instrumentations ?? config.instrumentations ?? [], exporters: config.telemetry?.exporters ?? [], logExporters: config.telemetry?.logExporters ?? [], + spanProcessors : config.telemetry?.spanProcessors ?? [], diagLogLevel: (env.TRIGGER_OTEL_LOG_LEVEL as TracingDiagnosticLogLevel) ?? "none", forceFlushTimeoutMillis: 30_000, resource: config.telemetry?.resource, diff --git a/packages/cli-v3/src/entryPoints/managed-run-worker.ts b/packages/cli-v3/src/entryPoints/managed-run-worker.ts index f1512f27f0..80b6be01ce 100644 --- a/packages/cli-v3/src/entryPoints/managed-run-worker.ts +++ b/packages/cli-v3/src/entryPoints/managed-run-worker.ts @@ -188,6 +188,7 @@ async function doBootstrap() { forceFlushTimeoutMillis: 30_000, exporters: config.telemetry?.exporters ?? [], logExporters: config.telemetry?.logExporters ?? [], + spanProcessors: config.telemetry?.spanProcessors ?? [], resource: config.telemetry?.resource, }); diff --git a/packages/core/src/v3/config.ts b/packages/core/src/v3/config.ts index 9c6871a264..1df7053b93 100644 --- a/packages/core/src/v3/config.ts +++ b/packages/core/src/v3/config.ts @@ -1,5 +1,5 @@ import type { Instrumentation } from "@opentelemetry/instrumentation"; -import type { SpanExporter } from "@opentelemetry/sdk-trace-base"; +import type { SpanExporter, SpanProcessor } from "@opentelemetry/sdk-trace-base"; import type { BuildExtension } from "./build/extensions.js"; import type { AnyOnFailureHookFunction, @@ -95,6 +95,12 @@ export type TriggerConfig = { */ instrumentations?: Array; + /** + * Span processors to use for OpenTelemetry. This is useful if you want to add custom span processors to your tasks. + * There are executed in the order passed before running exporters + */ + spanProcessors?: Array; + /** * Exporters to use for OpenTelemetry. This is useful if you want to add custom exporters to your tasks. * diff --git a/packages/core/src/v3/otel/tracingSDK.ts b/packages/core/src/v3/otel/tracingSDK.ts index 694212f71b..e6316f4d45 100644 --- a/packages/core/src/v3/otel/tracingSDK.ts +++ b/packages/core/src/v3/otel/tracingSDK.ts @@ -1,4 +1,5 @@ import { + Context, DiagConsoleLogger, DiagLogLevel, TraceFlags, @@ -66,6 +67,7 @@ export type TracingSDKConfig = { url: string; forceFlushTimeoutMillis?: number; instrumentations?: Instrumentation[]; + spanProcessors?: SpanProcessor[]; exporters?: SpanExporter[]; logExporters?: LogRecordExporter[]; diagLogLevel?: TracingDiagnosticLogLevel; @@ -120,6 +122,11 @@ export class TracingSDK { const spanProcessors: Array = []; + //add span processor passed via config before adding exporters + for (const spanProcessor of config.spanProcessors ?? []) { + spanProcessors.push(spanProcessor); + } + spanProcessors.push( new TaskContextSpanProcessor( VERSION,