Skip to content

Commit

Permalink
Use @vercel/otel to setup OTEL (#1750)
Browse files Browse the repository at this point in the history
* Migrate AvaTax

* add example sampler

* add http instrumentation

* resource attributes

* bring back sampler

* remove env

* use ATTR_DEPLOYMENT_ENVIRONMENT

* unset var

* cleanup

* Migrate other apps

* Add changesets

* Update CMS dep & tsconfig

* remove patches

* update commet
  • Loading branch information
krzysztofzuraw authored Mar 4, 2025
1 parent e5f0504 commit e3fe0f7
Show file tree
Hide file tree
Showing 49 changed files with 527 additions and 962 deletions.
5 changes: 5 additions & 0 deletions .changeset/ninety-eyes-call.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@saleor/apps-otel": minor
---

Update functions exported from package and deps.
11 changes: 11 additions & 0 deletions .changeset/tasty-rules-boil.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
"saleor-app-products-feed": patch
"saleor-app-klaviyo": patch
"saleor-app-segment": patch
"saleor-app-avatax": patch
"saleor-app-search": patch
"saleor-app-smtp": patch
"saleor-app-cms": patch
---

Use `@vercel/otel` package to setup OTEL. After this change spans will be automatically flushed by Vercel.
2 changes: 1 addition & 1 deletion apps/avatax/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
"@aws-sdk/util-dynamodb": "3.651.1",
"@hookform/resolvers": "^3.3.1",
"@next/env": "^13.5.4",
"@vercel/otel": "../../node_modules/@vercel/otel",
"@opentelemetry/api": "../../node_modules/@opentelemetry/api",
"@opentelemetry/sdk-node": "../../node_modules/@opentelemetry/sdk-node",
"@opentelemetry/resources": "../../node_modules/@opentelemetry/resources",
"@opentelemetry/semantic-conventions": "../../node_modules/@opentelemetry/semantic-conventions",
"@opentelemetry/sdk-trace-node": "../../node_modules/@opentelemetry/sdk-trace-node",
Expand Down
6 changes: 3 additions & 3 deletions apps/avatax/src/instrumentation.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/* eslint-disable node/no-process-env */
// Use `process.env` here to avoid broken Next.js build

export async function register() {
// eslint-disable-next-line node/no-process-env
if (process.env.NEXT_RUNTIME === "nodejs" && process.env.OTEL_ENABLED === "true") {
await import("./otel-instrumentation.node");
if (process.env.OTEL_ENABLED === "true") {
await import("./instrumentations/otel");
}
}
27 changes: 27 additions & 0 deletions apps/avatax/src/instrumentations/otel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* eslint-disable node/no-process-env */
// Use `process.env` here to avoid broken Next.js build
import { ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
import { ATTR_DEPLOYMENT_ENVIRONMENT_NAME } from "@opentelemetry/semantic-conventions/incubating";
import { createBatchSpanProcessor } from "@saleor/apps-otel/src/batch-span-processor-factory";
import { createHttpInstrumentation } from "@saleor/apps-otel/src/http-instrumentation-factory";
import { registerOTel } from "@vercel/otel";

import pkg from "../../package.json";

registerOTel({
serviceName: process.env.OTEL_SERVICE_NAME,
attributes: {
[ATTR_SERVICE_VERSION]: pkg.version,
[ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: process.env.ENV,
"commit-sha": process.env.VERCEL_GIT_COMMIT_SHA,
// override attribute set by `@vercel/otel` - if you are using OSS version you can remove it
env: undefined,
"vercel.env": process.env.VERCEL_ENV,
},
spanProcessors: [
createBatchSpanProcessor({
accessToken: process.env.OTEL_ACCESS_TOKEN,
}),
],
instrumentations: [createHttpInstrumentation()],
});
4 changes: 3 additions & 1 deletion apps/avatax/src/lib/app-root-tracer.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { trace } from "@opentelemetry/api";

export const appRootTracer = trace.getTracer("saleor-app-avatax");
import pkg from "../../package.json";

export const appRootTracer = trace.getTracer("saleor.app.avatax", pkg.version);
25 changes: 0 additions & 25 deletions apps/avatax/src/otel-instrumentation.node.ts

This file was deleted.

4 changes: 2 additions & 2 deletions apps/cms/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
"dependencies": {
"@datocms/cma-client-browser": "2.0.0",
"@hookform/resolvers": "^3.3.1",
"@vercel/otel": "../../node_modules/@vercel/otel",
"@opentelemetry/api": "../../node_modules/@opentelemetry/api",
"@opentelemetry/sdk-node": "../../node_modules/@opentelemetry/sdk-node",
"@opentelemetry/resources": "../../node_modules/@opentelemetry/resources",
"@opentelemetry/semantic-conventions": "../../node_modules/@opentelemetry/semantic-conventions",
"@opentelemetry/sdk-trace-node": "../../node_modules/@opentelemetry/sdk-trace-node",
Expand Down Expand Up @@ -53,7 +53,7 @@
"react-dom": "18.2.0",
"react-error-boundary": "4.0.10",
"react-hook-form": "^7.43.9",
"strapi-sdk-js": "2.2.0",
"strapi-sdk-js": "2.3.4",
"urql": "4.0.4",
"usehooks-ts": "^2.9.1",
"vite": "5.3.3",
Expand Down
4 changes: 2 additions & 2 deletions apps/cms/src/instrumentation.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Use `process.env` here to avoid broken Next.js build

export async function register() {
if (process.env.NEXT_RUNTIME === "nodejs" && process.env.OTEL_ENABLED === "true") {
await import("./otel-instrumentation.node");
if (process.env.OTEL_ENABLED === "true") {
await import("./instrumentations/otel");
}
}
26 changes: 26 additions & 0 deletions apps/cms/src/instrumentations/otel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Use `process.env` here to avoid broken Next.js build
import { ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
import { ATTR_DEPLOYMENT_ENVIRONMENT_NAME } from "@opentelemetry/semantic-conventions/incubating";
import { createBatchSpanProcessor } from "@saleor/apps-otel/src/batch-span-processor-factory";
import { createHttpInstrumentation } from "@saleor/apps-otel/src/http-instrumentation-factory";
import { registerOTel } from "@vercel/otel";

import pkg from "../../package.json";

registerOTel({
serviceName: process.env.OTEL_SERVICE_NAME,
attributes: {
[ATTR_SERVICE_VERSION]: pkg.version,
[ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: process.env.ENV,
"commit-sha": process.env.VERCEL_GIT_COMMIT_SHA,
// override attribute set by `@vercel/otel` - if you are using OSS version you can remove it
env: undefined,
"vercel.env": process.env.VERCEL_ENV,
},
spanProcessors: [
createBatchSpanProcessor({
accessToken: process.env.OTEL_ACCESS_TOKEN,
}),
],
instrumentations: [createHttpInstrumentation()],
});
4 changes: 3 additions & 1 deletion apps/cms/src/modules/otel/app-root-tracer.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { trace } from "@opentelemetry/api";

export const appRootTracer = trace.getTracer("saleor-app-avatax");
import pkg from "../../../package.json";

export const appRootTracer = trace.getTracer("saleor.app.cms", pkg.version);
23 changes: 0 additions & 23 deletions apps/cms/src/otel-instrumentation.node.ts

This file was deleted.

2 changes: 1 addition & 1 deletion apps/cms/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
Expand Down
2 changes: 1 addition & 1 deletion apps/klaviyo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
"start": "next start"
},
"dependencies": {
"@vercel/otel": "../../node_modules/@vercel/otel",
"@opentelemetry/api": "../../node_modules/@opentelemetry/api",
"@opentelemetry/sdk-node": "../../node_modules/@opentelemetry/sdk-node",
"@opentelemetry/resources": "../../node_modules/@opentelemetry/resources",
"@opentelemetry/semantic-conventions": "../../node_modules/@opentelemetry/semantic-conventions",
"@opentelemetry/sdk-trace-node": "../../node_modules/@opentelemetry/sdk-trace-node",
Expand Down
4 changes: 2 additions & 2 deletions apps/klaviyo/src/instrumentation.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Use `process.env` here to avoid broken Next.js build

export async function register() {
if (process.env.NEXT_RUNTIME === "nodejs" && process.env.OTEL_ENABLED === "true") {
await import("./otel-instrumentation.node");
if (process.env.OTEL_ENABLED === "true") {
await import("./instrumentations/otel");
}
}
26 changes: 26 additions & 0 deletions apps/klaviyo/src/instrumentations/otel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Use `process.env` here to avoid broken Next.js build
import { ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
import { ATTR_DEPLOYMENT_ENVIRONMENT_NAME } from "@opentelemetry/semantic-conventions/incubating";
import { createBatchSpanProcessor } from "@saleor/apps-otel/src/batch-span-processor-factory";
import { createHttpInstrumentation } from "@saleor/apps-otel/src/http-instrumentation-factory";
import { registerOTel } from "@vercel/otel";

import pkg from "../../package.json";

registerOTel({
serviceName: process.env.OTEL_SERVICE_NAME,
attributes: {
[ATTR_SERVICE_VERSION]: pkg.version,
[ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: process.env.ENV,
"commit-sha": process.env.VERCEL_GIT_COMMIT_SHA,
// override attribute set by `@vercel/otel` - if you are using OSS version you can remove it
env: undefined,
"vercel.env": process.env.VERCEL_ENV,
},
spanProcessors: [
createBatchSpanProcessor({
accessToken: process.env.OTEL_ACCESS_TOKEN,
}),
],
instrumentations: [createHttpInstrumentation()],
});
4 changes: 3 additions & 1 deletion apps/klaviyo/src/lib/app-root-tracer.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { trace } from "@opentelemetry/api";

export const appRootTracer = trace.getTracer("saleor-app-klaviyo");
import pkg from "../../package.json";

export const appRootTracer = trace.getTracer("saleor.app.klaviyo", pkg.version);
23 changes: 0 additions & 23 deletions apps/klaviyo/src/otel-instrumentation.node.ts

This file was deleted.

2 changes: 1 addition & 1 deletion apps/klaviyo/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
Expand Down
2 changes: 1 addition & 1 deletion apps/products-feed/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
"dependencies": {
"@aws-sdk/client-s3": "^3.332.0",
"@hookform/resolvers": "^3.3.1",
"@vercel/otel": "../../node_modules/@vercel/otel",
"@opentelemetry/api": "../../node_modules/@opentelemetry/api",
"@opentelemetry/sdk-node": "../../node_modules/@opentelemetry/sdk-node",
"@opentelemetry/resources": "../../node_modules/@opentelemetry/resources",
"@opentelemetry/semantic-conventions": "../../node_modules/@opentelemetry/semantic-conventions",
"@opentelemetry/sdk-trace-node": "../../node_modules/@opentelemetry/sdk-trace-node",
Expand Down
4 changes: 2 additions & 2 deletions apps/products-feed/src/instrumentation.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Use `process.env` here to avoid broken Next.js build

export async function register() {
if (process.env.NEXT_RUNTIME === "nodejs" && process.env.OTEL_ENABLED === "true") {
await import("./otel-instrumentation.node");
if (process.env.OTEL_ENABLED === "true") {
await import("./instrumentations/otel");
}
}
26 changes: 26 additions & 0 deletions apps/products-feed/src/instrumentations/otel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Use `process.env` here to avoid broken Next.js build
import { ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
import { ATTR_DEPLOYMENT_ENVIRONMENT_NAME } from "@opentelemetry/semantic-conventions/incubating";
import { createBatchSpanProcessor } from "@saleor/apps-otel/src/batch-span-processor-factory";
import { createHttpInstrumentation } from "@saleor/apps-otel/src/http-instrumentation-factory";
import { registerOTel } from "@vercel/otel";

import pkg from "../../package.json";

registerOTel({
serviceName: process.env.OTEL_SERVICE_NAME,
attributes: {
[ATTR_SERVICE_VERSION]: pkg.version,
[ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: process.env.ENV,
"commit-sha": process.env.VERCEL_GIT_COMMIT_SHA,
// override attribute set by `@vercel/otel` - if you are using OSS version you can remove it
env: undefined,
"vercel.env": process.env.VERCEL_ENV,
},
spanProcessors: [
createBatchSpanProcessor({
accessToken: process.env.OTEL_ACCESS_TOKEN,
}),
],
instrumentations: [createHttpInstrumentation()],
});
4 changes: 3 additions & 1 deletion apps/products-feed/src/lib/app-root-tracer.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { trace } from "@opentelemetry/api";

export const appRootTracer = trace.getTracer("saleor-app-products-feed");
import pkg from "../../package.json";

export const appRootTracer = trace.getTracer("saleor.app.products-feed", pkg.version);
23 changes: 0 additions & 23 deletions apps/products-feed/src/otel-instrumentation.node.ts

This file was deleted.

2 changes: 1 addition & 1 deletion apps/products-feed/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
Expand Down
2 changes: 1 addition & 1 deletion apps/search/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
},
"dependencies": {
"@hookform/resolvers": "^3.3.1",
"@vercel/otel": "../../node_modules/@vercel/otel",
"@opentelemetry/api": "../../node_modules/@opentelemetry/api",
"@opentelemetry/sdk-node": "../../node_modules/@opentelemetry/sdk-node",
"@opentelemetry/resources": "../../node_modules/@opentelemetry/resources",
"@opentelemetry/semantic-conventions": "../../node_modules/@opentelemetry/semantic-conventions",
"@opentelemetry/sdk-trace-node": "../../node_modules/@opentelemetry/sdk-trace-node",
Expand Down
4 changes: 2 additions & 2 deletions apps/search/src/instrumentation.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Use `process.env` here to avoid broken Next.js build

export async function register() {
if (process.env.NEXT_RUNTIME === "nodejs" && process.env.OTEL_ENABLED === "true") {
await import("./otel-instrumentation.node");
if (process.env.OTEL_ENABLED === "true") {
await import("./instrumentations/otel");
}
}
Loading

0 comments on commit e3fe0f7

Please sign in to comment.