diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index 891a7e2..97b8d48 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -65,8 +65,8 @@ COPY --from=deps /usr/src/app/node_modules ./node_modules COPY --from=build /usr/src/app/node_modules/.pnpm/@prisma+client@5.6.0_prisma@5.6.0 ./node_modules/.pnpm/@prisma+client@5.6.0_prisma@5.6.0 COPY --from=build /usr/src/app/dist ./dist -# Expose the port that the application listens on. -EXPOSE 3100 +# Expose the ports that the application listens on. +EXPOSE 3100 9100 # Run the application. CMD ["node", "dist/apps/api/main.js"] diff --git a/package.json b/package.json index 1dd338e..79f2a51 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@opentelemetry/context-async-hooks": "^1.18.1", "@opentelemetry/core": "^1.18.1", "@opentelemetry/exporter-jaeger": "^1.18.1", + "@opentelemetry/exporter-prometheus": "^0.45.1", "@opentelemetry/instrumentation-fastify": "^0.32.4", "@opentelemetry/instrumentation-http": "^0.45.1", "@opentelemetry/instrumentation-nestjs-core": "^0.33.3", diff --git a/packages/opentelemetry/src/lib/opentelemetry.module.ts b/packages/opentelemetry/src/lib/opentelemetry.module.ts index eafdc0f..eebf7e8 100644 --- a/packages/opentelemetry/src/lib/opentelemetry.module.ts +++ b/packages/opentelemetry/src/lib/opentelemetry.module.ts @@ -39,7 +39,16 @@ export class OpenTelemetryModule { }, }, }), - NestOpenTelemetryModule.forRoot(), + NestOpenTelemetryModule.forRoot({ + metrics: { + hostMetrics: true, + apiMetrics: { + enable: true, + ignoreRoutes: ['/favicon.ico'], + ignoreUndefinedRoutes: true, + }, + }, + }), ], exports: [NestOpenTelemetryModule, LoggerModule], }; diff --git a/packages/opentelemetry/src/lib/tracing.ts b/packages/opentelemetry/src/lib/tracing.ts index c364645..6a21a39 100644 --- a/packages/opentelemetry/src/lib/tracing.ts +++ b/packages/opentelemetry/src/lib/tracing.ts @@ -14,10 +14,14 @@ import { JaegerExporter } from '@opentelemetry/exporter-jaeger'; import { FastifyInstrumentation } from '@opentelemetry/instrumentation-fastify'; import { PrismaInstrumentation } from '@prisma/instrumentation'; import { PinoInstrumentation } from '@opentelemetry/instrumentation-pino'; +import { PrometheusExporter } from '@opentelemetry/exporter-prometheus'; export const otelEnabled = process.env['OTEL_ENABLED'] === 'true'; export const otelSDK = new NodeSDK({ + metricReader: new PrometheusExporter({ + port: 9100, + }), spanProcessor: new BatchSpanProcessor(new JaegerExporter()), contextManager: new AsyncLocalStorageContextManager(), textMapPropagator: new CompositePropagator({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index edf8c7f..d4e241e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,9 @@ dependencies: '@opentelemetry/exporter-jaeger': specifier: ^1.18.1 version: 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/exporter-prometheus': + specifier: ^0.45.1 + version: 0.45.1(@opentelemetry/api@1.7.0) '@opentelemetry/instrumentation-fastify': specifier: ^0.32.4 version: 0.32.4(@opentelemetry/api@1.7.0) @@ -3595,6 +3598,18 @@ packages: jaeger-client: 3.19.0 dev: false + /@opentelemetry/exporter-prometheus@0.45.1(@opentelemetry/api@1.7.0): + resolution: {integrity: sha512-VlHEBO74dIZgA/fmYOHru1Ob75+SC9tgakdMt7qKdQvJybLHqBmJokJs5hyaOROlQdcK9nby/335EAkDa+2G6g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.7.0 + '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/resources': 1.18.1(@opentelemetry/api@1.7.0) + '@opentelemetry/sdk-metrics': 1.18.1(@opentelemetry/api@1.7.0) + dev: false + /@opentelemetry/exporter-trace-otlp-grpc@0.45.1(@opentelemetry/api@1.7.0): resolution: {integrity: sha512-c/Wrn6LUqPiRgKhvMydau6kPz4ih6b/uwospiavjXju98ZfVv+KjaIF13cblW+4cQ6ZR3lm7t66umQfXrGBhPQ==} engines: {node: '>=14'}