Skip to content

Commit 870f87d

Browse files
committed
Add support for custom metrics exporters
1 parent bd89f6d commit 870f87d

File tree

4 files changed

+21
-1
lines changed

4 files changed

+21
-1
lines changed

packages/cli-v3/src/entryPoints/dev-run-worker.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ async function doBootstrap() {
208208
instrumentations: config.telemetry?.instrumentations ?? config.instrumentations ?? [],
209209
exporters: config.telemetry?.exporters ?? [],
210210
logExporters: config.telemetry?.logExporters ?? [],
211+
metricExporters: config.telemetry?.metricExporters ?? [],
211212
metricReaders: config.telemetry?.metricReaders ?? [],
212213
diagLogLevel: (env.TRIGGER_OTEL_LOG_LEVEL as TracingDiagnosticLogLevel) ?? "none",
213214
forceFlushTimeoutMillis: 30_000,

packages/cli-v3/src/entryPoints/managed-run-worker.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ async function doBootstrap() {
189189
forceFlushTimeoutMillis: 30_000,
190190
exporters: config.telemetry?.exporters ?? [],
191191
logExporters: config.telemetry?.logExporters ?? [],
192+
metricExporters: config.telemetry?.metricExporters ?? [],
192193
metricReaders: config.telemetry?.metricReaders ?? [],
193194
resource: config.telemetry?.resource,
194195
hostMetrics: true,

packages/core/src/v3/config.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Instrumentation } from "@opentelemetry/instrumentation";
22
import type { SpanExporter } from "@opentelemetry/sdk-trace-base";
3-
import type { MetricReader } from "@opentelemetry/sdk-metrics";
3+
import type { MetricReader, PushMetricExporter } from "@opentelemetry/sdk-metrics";
44
import type { BuildExtension } from "./build/extensions.js";
55
import type {
66
AnyOnFailureHookFunction,
@@ -110,6 +110,14 @@ export type TriggerConfig = {
110110
*/
111111
logExporters?: Array<LogRecordExporter>;
112112

113+
/**
114+
* Metric exporters to use for OpenTelemetry. This is useful if you want to export metrics to external services.
115+
* Each exporter is automatically wrapped in a PeriodicExportingMetricReader.
116+
*
117+
* For more control over the reader configuration, use `metricReaders` instead.
118+
*/
119+
metricExporters?: Array<PushMetricExporter>;
120+
113121
/**
114122
* Metric readers for OpenTelemetry. Add custom metric readers to export
115123
* metrics to external services alongside the default Trigger.dev exporter.

packages/core/src/v3/otel/tracingSDK.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
MeterProvider,
3333
PeriodicExportingMetricReader,
3434
type MetricReader,
35+
type PushMetricExporter,
3536
} from "@opentelemetry/sdk-metrics";
3637
import { RandomIdGenerator, SpanProcessor } from "@opentelemetry/sdk-trace-base";
3738
import {
@@ -83,6 +84,7 @@ export type TracingSDKConfig = {
8384
instrumentations?: Instrumentation[];
8485
exporters?: SpanExporter[];
8586
logExporters?: LogRecordExporter[];
87+
metricExporters?: PushMetricExporter[];
8688
metricReaders?: MetricReader[];
8789
diagLogLevel?: TracingDiagnosticLogLevel;
8890
resource?: Resource;
@@ -319,6 +321,14 @@ export class TracingSDK {
319321
exportIntervalMillis: collectionIntervalMs,
320322
exportTimeoutMillis: Math.min(exportTimeoutMillis, collectionIntervalMs),
321323
}),
324+
...(config.metricExporters ?? []).map(
325+
(exporter) =>
326+
new PeriodicExportingMetricReader({
327+
exporter,
328+
exportIntervalMillis: collectionIntervalMs,
329+
exportTimeoutMillis: Math.min(exportTimeoutMillis, collectionIntervalMs),
330+
})
331+
),
322332
...(config.metricReaders ?? []),
323333
];
324334

0 commit comments

Comments
 (0)