diff --git a/frontends/main/package.json b/frontends/main/package.json index a1fd552202..e23859230e 100644 --- a/frontends/main/package.json +++ b/frontends/main/package.json @@ -17,9 +17,13 @@ "@mitodl/mitxonline-api-axios": "2025.8.12", "@mitodl/smoot-design": "^6.17.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": "^10.0.0", "@tanstack/react-query": "^5.66", + "@vercel/otel": "^1.13.0", "api": "workspace:*", "classnames": "^2.5.1", "dompurify": "^3.2.6", diff --git a/frontends/main/src/instrumentation.ts b/frontends/main/src/instrumentation.ts index 2fc339dbf4..9afb3fd860 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: process.env.OTEL_SERVICE_NAME || "mitlearn-frontend" }) } export const onRequestError = Sentry.captureRequestError diff --git a/yarn.lock b/yarn.lock index 4a005788b4..3ec7a4a4ed 100755 --- a/yarn.lock +++ b/yarn.lock @@ -3705,7 +3705,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api-logs@npm:0.203.0": +"@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: @@ -4076,6 +4076,19 @@ __metadata: 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:^2.0.0": version: 2.0.1 resolution: "@opentelemetry/sdk-trace-base@npm:2.0.1" @@ -6935,6 +6948,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" @@ -14072,6 +14100,9 @@ __metadata: "@mitodl/mitxonline-api-axios": "npm:2025.8.12" "@mitodl/smoot-design": "npm:^6.17.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:^10.0.0" "@tanstack/react-query": "npm:^5.66" @@ -14085,6 +14116,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" dompurify: "npm:^3.2.6"