Skip to content

Commit ae315f3

Browse files
committed
Add external log exporters and fix missing external trace exporters in deployed tasks
1 parent da0ef73 commit ae315f3

File tree

9 files changed

+53
-3
lines changed

9 files changed

+53
-3
lines changed

.changeset/cuddly-boats-press.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"trigger.dev": patch
3+
---
4+
5+
Add external log exporters and fix missing external trace exporters in deployed tasks

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ async function bootstrap() {
164164
url: env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://0.0.0.0:4318",
165165
instrumentations: config.telemetry?.instrumentations ?? config.instrumentations ?? [],
166166
exporters: config.telemetry?.exporters ?? [],
167+
logExporters: config.telemetry?.logExporters ?? [],
167168
diagLogLevel: (env.OTEL_LOG_LEVEL as TracingDiagnosticLogLevel) ?? "none",
168169
forceFlushTimeoutMillis: 30_000,
169170
});

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ async function bootstrap() {
163163
instrumentations: config.instrumentations ?? [],
164164
diagLogLevel: (env.OTEL_LOG_LEVEL as TracingDiagnosticLogLevel) ?? "none",
165165
forceFlushTimeoutMillis: 30_000,
166+
exporters: config.telemetry?.exporters ?? [],
167+
logExporters: config.telemetry?.logExporters ?? [],
166168
});
167169

168170
const otelTracer: Tracer = tracingSDK.getTracer("trigger-dev-worker", VERSION);

packages/core/src/v3/config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type {
1111
} from "./index.js";
1212
import type { LogLevel } from "./logger/taskLogger.js";
1313
import type { MachinePresetName } from "./schemas/common.js";
14+
import { LogRecordExporter } from "@opentelemetry/sdk-logs";
1415

1516
export type CompatibilityFlag = "run_engine_v2";
1617

@@ -80,6 +81,13 @@ export type TriggerConfig = {
8081
* @see https://trigger.dev/docs/config/config-file#exporters
8182
*/
8283
exporters?: Array<SpanExporter>;
84+
85+
/**
86+
* Log exporters to use for OpenTelemetry. This is useful if you want to add custom log exporters to your tasks.
87+
*
88+
* @see https://trigger.dev/docs/config/config-file#exporters
89+
*/
90+
logExporters?: Array<LogRecordExporter>;
8391
};
8492

8593
/**

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
import {
1616
BatchLogRecordProcessor,
1717
LoggerProvider,
18+
LogRecordExporter,
1819
SimpleLogRecordProcessor,
1920
} from "@opentelemetry/sdk-logs";
2021
import {
@@ -87,6 +88,7 @@ export type TracingSDKConfig = {
8788
resource?: IResource;
8889
instrumentations?: Instrumentation[];
8990
exporters?: SpanExporter[];
91+
logExporters?: LogRecordExporter[];
9092
diagLogLevel?: TracingDiagnosticLogLevel;
9193
};
9294

@@ -210,6 +212,19 @@ export class TracingSDK {
210212
)
211213
);
212214

215+
for (const externalLogExporter of config.logExporters ?? []) {
216+
loggerProvider.addLogRecordProcessor(
217+
getEnvVar("OTEL_BATCH_PROCESSING_ENABLED") === "1"
218+
? new BatchLogRecordProcessor(externalLogExporter, {
219+
maxExportBatchSize: parseInt(getEnvVar("OTEL_LOG_MAX_EXPORT_BATCH_SIZE") ?? "64"),
220+
scheduledDelayMillis: parseInt(getEnvVar("OTEL_LOG_SCHEDULED_DELAY_MILLIS") ?? "200"),
221+
exportTimeoutMillis: parseInt(getEnvVar("OTEL_LOG_EXPORT_TIMEOUT_MILLIS") ?? "30000"),
222+
maxQueueSize: parseInt(getEnvVar("OTEL_LOG_MAX_QUEUE_SIZE") ?? "512"),
223+
})
224+
: new SimpleLogRecordProcessor(externalLogExporter)
225+
);
226+
}
227+
213228
this._logProvider = loggerProvider;
214229
this._spanExporter = spanExporter;
215230
this._traceProvider = traceProvider;

pnpm-lock.yaml

Lines changed: 7 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

references/d3-chat/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"@trigger.dev/python": "workspace:*",
2828
"@trigger.dev/react-hooks": "workspace:*",
2929
"@trigger.dev/sdk": "workspace:*",
30+
"@opentelemetry/exporter-logs-otlp-http": "0.52.1",
3031
"@vercel/postgres": "^0.10.0",
3132
"ai": "4.2.5",
3233
"class-variance-authority": "^0.7.1",

references/d3-chat/src/trigger/chat.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ export const interruptibleChat = schemaTask({
227227
prompt: z.string().describe("The prompt to chat with the AI"),
228228
}),
229229
run: async ({ prompt }, { signal }) => {
230+
logger.info("interruptible-chat: starting", { prompt });
231+
230232
const chunks: TextStreamPart<{}>[] = [];
231233

232234
// 👇 This is a global onCancel hook, but it's inside of the run function

references/d3-chat/trigger.config.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
11
import { defineConfig } from "@trigger.dev/sdk";
22
import { pythonExtension } from "@trigger.dev/python/extension";
33
import { installPlaywrightChromium } from "./src/extensions/playwright";
4+
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
45

56
export default defineConfig({
67
project: "proj_cdmymsrobxmcgjqzhdkq",
78
dirs: ["./src/trigger"],
9+
telemetry: {
10+
logExporters: [
11+
new OTLPLogExporter({
12+
url: "https://api.axiom.co/v1/logs",
13+
headers: {
14+
Authorization: `Bearer ${process.env.AXIOM_TOKEN}`,
15+
"X-Axiom-Dataset": "d3-chat-tester",
16+
},
17+
}),
18+
],
19+
},
820
maxDuration: 3600,
921
build: {
1022
extensions: [

0 commit comments

Comments
 (0)