From c5581d75f31f4507eb5d3c9bf5c945caf166094f Mon Sep 17 00:00:00 2001 From: Tobias Macey Date: Tue, 5 Aug 2025 11:16:55 -0400 Subject: [PATCH 1/2] config: Add OTEL setup for NextJS --- frontends/main/package.json | 4 ++ frontends/main/src/instrumentation.ts | 3 + yarn.lock | 88 +++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) diff --git a/frontends/main/package.json b/frontends/main/package.json index 74657037d4..2453668a20 100644 --- a/frontends/main/package.json +++ b/frontends/main/package.json @@ -17,9 +17,13 @@ "@mitodl/mitxonline-api-axios": "2025.7.28", "@mitodl/smoot-design": "^6.10.0", "@next/bundle-analyzer": "^14.2.15", + "@opentelemetry/api-logs": "^0.203.0", + "@opentelemetry/instrumentation": "^0.203.0", + "@opentelemetry/sdk-logs": "^0.203.0", "@remixicon/react": "^4.2.0", "@sentry/nextjs": "^9.0.0", "@tanstack/react-query": "^5.66", + "@vercel/otel": "^1.13.0", "api": "workspace:*", "classnames": "^2.5.1", "formik": "^2.4.6", diff --git a/frontends/main/src/instrumentation.ts b/frontends/main/src/instrumentation.ts index 2fc339dbf4..ec0f6ab1c3 100644 --- a/frontends/main/src/instrumentation.ts +++ b/frontends/main/src/instrumentation.ts @@ -1,5 +1,6 @@ // Added by @sentry/wizard import * as Sentry from "@sentry/nextjs" +import { registerOTel } from "@vercel/otel" export async function register() { if (process.env.NEXT_RUNTIME === "nodejs") { @@ -9,6 +10,8 @@ export async function register() { if (process.env.NEXT_RUNTIME === "edge") { await import("../sentry.edge.config") } + + registerOTel({ serviceName: "mitlearn-frontend" }) } export const onRequestError = Sentry.captureRequestError diff --git a/yarn.lock b/yarn.lock index 06d15fcc97..58a84c7481 100755 --- a/yarn.lock +++ b/yarn.lock @@ -3694,6 +3694,15 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.203.0, @opentelemetry/api-logs@npm:^0.203.0": + version: 0.203.0 + resolution: "@opentelemetry/api-logs@npm:0.203.0" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10/e8c890cbf36f1a458ff4fc13c0d2efc81ea8f173d124d06e6878c539f2e84517013c1e2fd4b7149a3f88ba1a3b5befeb8068edea7f391c5d69fb8b02a2a13bc0 + languageName: node + linkType: hard + "@opentelemetry/api-logs@npm:0.56.0": version: 0.56.0 resolution: "@opentelemetry/api-logs@npm:0.56.0" @@ -3748,6 +3757,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/core@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/core@npm:2.0.1" + dependencies: + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/dd891afd427067a9e6c610c36ab5638b0b9e5303ccca7c75ad744f5db53c6162a4b5d9cd2f5a77cdc3e4bda2eae850a4e29983ea244c929b7b872b7e086fc61c + languageName: node + linkType: hard + "@opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.8.0": version: 1.26.0 resolution: "@opentelemetry/core@npm:1.26.0" @@ -4067,6 +4087,19 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation@npm:^0.203.0": + version: 0.203.0 + resolution: "@opentelemetry/instrumentation@npm:0.203.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.203.0" + import-in-the-middle: "npm:^1.8.1" + require-in-the-middle: "npm:^7.1.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/0e85cd7df97e4a7a9cdd23d187be45dae93806bf04783c531fe847cc4b24abd96934ad1196320661190648444d726bed1f702fa96e0af3fc7edb3c04c44fde34 + languageName: node + linkType: hard + "@opentelemetry/instrumentation@npm:^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0": version: 0.56.0 resolution: "@opentelemetry/instrumentation@npm:0.56.0" @@ -4118,6 +4151,31 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/resources@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/resources@npm:2.0.1" + dependencies: + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/282f3831de2755d0fda2d8b6e37f9587ea248066d50c7d2f14c803ac9d5262a0f1db98a4185bcdc5acaeeece0b61f4fce43bc3896a79f1da79045ae4928618bf + languageName: node + linkType: hard + +"@opentelemetry/sdk-logs@npm:^0.203.0": + version: 0.203.0 + resolution: "@opentelemetry/sdk-logs@npm:0.203.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.203.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/resources": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ">=1.4.0 <1.10.0" + checksum: 10/d94118e930c42d6e529bed64d2123e87194cac8689f29d743ac262b7610b7d0b50aeb1a8113ceab68e326c2b21d8c1423d8e2ac84725b082269dc2233c35d84f + languageName: node + linkType: hard + "@opentelemetry/sdk-trace-base@npm:^1.30.1": version: 1.30.1 resolution: "@opentelemetry/sdk-trace-base@npm:1.30.1" @@ -4152,6 +4210,13 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/semantic-conventions@npm:^1.29.0": + version: 1.36.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.36.0" + checksum: 10/f1939066c30147348b326840d67cc48e73072b762f2e2af5c3ea894268d64c62fc4e73fad49a72ed4a52a543b2fa0824c969a676e658ae727f75182f52104007 + languageName: node + linkType: hard + "@opentelemetry/sql-common@npm:^0.40.1": version: 0.40.1 resolution: "@opentelemetry/sql-common@npm:0.40.1" @@ -6809,6 +6874,21 @@ __metadata: languageName: node linkType: hard +"@vercel/otel@npm:^1.13.0": + version: 1.13.0 + resolution: "@vercel/otel@npm:1.13.0" + peerDependencies: + "@opentelemetry/api": ">=1.7.0 <2.0.0" + "@opentelemetry/api-logs": ">=0.46.0 <0.200.0" + "@opentelemetry/instrumentation": ">=0.46.0 <0.200.0" + "@opentelemetry/resources": ">=1.19.0 <2.0.0" + "@opentelemetry/sdk-logs": ">=0.46.0 <0.200.0" + "@opentelemetry/sdk-metrics": ">=1.19.0 <2.0.0" + "@opentelemetry/sdk-trace-base": ">=1.19.0 <2.0.0" + checksum: 10/92f89193e84afee6bd22d7d0a640a240cbbeb1041d44d3174c6d1d59f2450f0b145457aa7e28bbe903c2280d3c3df8ff215e261773e3698dfd23fc78be5bc3a1 + languageName: node + linkType: hard + "@vitest/expect@npm:2.0.5": version: 2.0.5 resolution: "@vitest/expect@npm:2.0.5" @@ -13934,6 +14014,9 @@ __metadata: "@mitodl/mitxonline-api-axios": "npm:2025.7.28" "@mitodl/smoot-design": "npm:^6.10.0" "@next/bundle-analyzer": "npm:^14.2.15" + "@opentelemetry/api-logs": "npm:^0.203.0" + "@opentelemetry/instrumentation": "npm:^0.203.0" + "@opentelemetry/sdk-logs": "npm:^0.203.0" "@remixicon/react": "npm:^4.2.0" "@sentry/nextjs": "npm:^9.0.0" "@tanstack/react-query": "npm:^5.66" @@ -13947,6 +14030,7 @@ __metadata: "@types/react-dom": "npm:^19" "@types/react-slick": "npm:^0.23.13" "@types/slick-carousel": "npm:^1" + "@vercel/otel": "npm:^1.13.0" api: "workspace:*" classnames: "npm:^2.5.1" eslint: "npm:8.57.1" @@ -15153,6 +15237,10 @@ __metadata: version: 0.0.0-use.local resolution: "mit-learn@workspace:." dependencies: + "@opentelemetry/api-logs": "npm:^0.203.0" + "@opentelemetry/instrumentation": "npm:^0.203.0" + "@opentelemetry/sdk-logs": "npm:^0.203.0" + "@vercel/otel": "npm:^1.13.0" syncpack: "npm:^13.0.0" languageName: unknown linkType: soft From 44a9eb80d1361beb2f301f85d19410ba208fb14e Mon Sep 17 00:00:00 2001 From: Tobias Macey Date: Tue, 5 Aug 2025 11:23:56 -0400 Subject: [PATCH 2/2] Update frontends/main/src/instrumentation.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- frontends/main/src/instrumentation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontends/main/src/instrumentation.ts b/frontends/main/src/instrumentation.ts index ec0f6ab1c3..9afb3fd860 100644 --- a/frontends/main/src/instrumentation.ts +++ b/frontends/main/src/instrumentation.ts @@ -11,7 +11,7 @@ export async function register() { await import("../sentry.edge.config") } - registerOTel({ serviceName: "mitlearn-frontend" }) + registerOTel({ serviceName: process.env.OTEL_SERVICE_NAME || "mitlearn-frontend" }) } export const onRequestError = Sentry.captureRequestError