From 572f7871b709f8097be300eb33baca4cc6be8da3 Mon Sep 17 00:00:00 2001 From: Ivan Santos <301291+pragmaticivan@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:00:38 -0500 Subject: [PATCH 1/4] feat(nodejs): add logger sdk, fix metrics and update some packages --- nodejs/packages/layer/package.json | 24 +++++++++--------- nodejs/packages/layer/src/wrapper.ts | 37 +++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 16 deletions(-) diff --git a/nodejs/packages/layer/package.json b/nodejs/packages/layer/package.json index 14153a26b2..f315539f8c 100644 --- a/nodejs/packages/layer/package.json +++ b/nodejs/packages/layer/package.json @@ -27,14 +27,14 @@ "node": ">=16.0.0" }, "dependencies": { - "@opentelemetry/api": "^1.7.0", - "@opentelemetry/exporter-trace-otlp-proto": "^0.52.1", + "@opentelemetry/api": "^1.9.0", "@opentelemetry/exporter-metrics-otlp-proto": "^0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "^0.52.1", "@opentelemetry/instrumentation": "^0.52.1", "@opentelemetry/instrumentation-aws-lambda": "^0.43.0", - "@opentelemetry/instrumentation-aws-sdk": "^0.43.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.43.1", "@opentelemetry/instrumentation-dns": "^0.38.0", - "@opentelemetry/instrumentation-express": "^0.41.0", + "@opentelemetry/instrumentation-express": "^0.41.1", "@opentelemetry/instrumentation-graphql": "^0.42.0", "@opentelemetry/instrumentation-grpc": "^0.52.1", "@opentelemetry/instrumentation-hapi": "^0.40.0", @@ -46,17 +46,17 @@ "@opentelemetry/instrumentation-net": "^0.38.0", "@opentelemetry/instrumentation-pg": "^0.43.0", "@opentelemetry/instrumentation-redis": "^0.41.0", - "@opentelemetry/propagator-aws-xray": "^1.3.1", - "@opentelemetry/resource-detector-aws": "^1.3.4", - "@opentelemetry/resources": "^1.18.1", - "@opentelemetry/sdk-metrics": "^1.18.1", - "@opentelemetry/sdk-trace-base": "^1.18.1", - "@opentelemetry/sdk-trace-node": "^1.18.1" + "@opentelemetry/propagator-aws-xray": "^1.25.1", + "@opentelemetry/resource-detector-aws": "^1.5.2", + "@opentelemetry/resources": "^1.25.1", + "@opentelemetry/sdk-metrics": "^1.25.1", + "@opentelemetry/sdk-trace-base": "^1.25.1", + "@opentelemetry/sdk-trace-node": "^1.25.1" }, "devDependencies": { - "@types/mocha": "^10.0.6", + "@types/mocha": "^10.0.7", "@types/sinon": "^17.0.3", - "mocha": "^10.4.0", + "mocha": "^10.7.0", "sinon": "^18.0.0", "ts-node": "^10.9.2" } diff --git a/nodejs/packages/layer/src/wrapper.ts b/nodejs/packages/layer/src/wrapper.ts index 26f9b5d71d..2a36a07f1b 100644 --- a/nodejs/packages/layer/src/wrapper.ts +++ b/nodejs/packages/layer/src/wrapper.ts @@ -13,16 +13,22 @@ import { processDetector, } from '@opentelemetry/resources'; import { AwsInstrumentation, AwsSdkInstrumentationConfig } from '@opentelemetry/instrumentation-aws-sdk'; -import { AwsLambdaInstrumentation } from '@opentelemetry/instrumentation-aws-lambda'; +import { AwsLambdaInstrumentation, AwsLambdaInstrumentationConfig} from '@opentelemetry/instrumentation-aws-lambda'; import { diag, DiagConsoleLogger, DiagLogLevel, } from "@opentelemetry/api"; import { getEnv } from '@opentelemetry/core'; -import { AwsLambdaInstrumentationConfig } from '@opentelemetry/instrumentation-aws-lambda'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'; -import { MeterProvider, MeterProviderOptions } from '@opentelemetry/sdk-metrics'; +import { MeterProvider, MeterProviderOptions, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; +import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto' +import { + LoggerProvider, + SimpleLogRecordProcessor, + ConsoleLogRecordExporter, + LoggerProviderConfig, +} from '@opentelemetry/sdk-logs'; function defaultConfigureInstrumentations() { // Use require statements for instrumentation to avoid having to have transitive dependencies on all the typescript @@ -68,6 +74,7 @@ declare global { function configureMeterProvider(meterProvider: MeterProvider): void function configureLambdaInstrumentation(config: AwsLambdaInstrumentationConfig): AwsLambdaInstrumentationConfig function configureInstrumentations(): Instrumentation[] + function configureLoggerProvider(loggerProvider: LoggerProvider): void } console.log('Registering OpenTelemetry'); @@ -124,8 +131,14 @@ async function initializeProvider() { tracerProvider.register(sdkRegistrationConfig); // Configure default meter provider (doesn't export metrics) + const metricExporter = new OTLPMetricExporter(); let meterConfig: MeterProviderOptions = { resource, + readers: [ + new PeriodicExportingMetricReader({ + exporter: metricExporter, + }) + ], } if (typeof configureMeter === 'function') { meterConfig = configureMeter(meterConfig); @@ -136,11 +149,27 @@ async function initializeProvider() { configureMeterProvider(meterProvider) } + let loggerConfig: LoggerProviderConfig = { + resource, + } + const loggerProvider = new LoggerProvider(loggerConfig); + if (typeof configureLoggerProvider === 'function') { + configureLoggerProvider(loggerProvider) + } + + // logging for debug + if (logLevel === DiagLogLevel.DEBUG) { + loggerProvider.addLogRecordProcessor( + new SimpleLogRecordProcessor(new ConsoleLogRecordExporter()) + ); + } + // Re-register instrumentation with initialized provider. Patched code will see the update. registerInstrumentations({ instrumentations, tracerProvider, - meterProvider + meterProvider, + loggerProvider, }); } initializeProvider(); From c54f57ce3ee1f3bd71d63403e760c92385fe2ab1 Mon Sep 17 00:00:00 2001 From: Ivan Santos <301291+pragmaticivan@users.noreply.github.com> Date: Mon, 5 Aug 2024 16:41:04 -0500 Subject: [PATCH 2/4] chore: add missing logs package --- nodejs/packages/layer/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/nodejs/packages/layer/package.json b/nodejs/packages/layer/package.json index f315539f8c..425de2fce5 100644 --- a/nodejs/packages/layer/package.json +++ b/nodejs/packages/layer/package.json @@ -49,6 +49,7 @@ "@opentelemetry/propagator-aws-xray": "^1.25.1", "@opentelemetry/resource-detector-aws": "^1.5.2", "@opentelemetry/resources": "^1.25.1", + "@opentelemetry/sdk-logs": "^0.52.1", "@opentelemetry/sdk-metrics": "^1.25.1", "@opentelemetry/sdk-trace-base": "^1.25.1", "@opentelemetry/sdk-trace-node": "^1.25.1" From c8dbb5e6774236ee18954ae0ad8c36514b42f443 Mon Sep 17 00:00:00 2001 From: Ivan Santos <301291+pragmaticivan@users.noreply.github.com> Date: Tue, 6 Aug 2024 10:02:36 -0500 Subject: [PATCH 3/4] feat: log exporter needed --- nodejs/packages/layer/package.json | 1 + nodejs/packages/layer/src/wrapper.ts | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/nodejs/packages/layer/package.json b/nodejs/packages/layer/package.json index 425de2fce5..6238a7fa05 100644 --- a/nodejs/packages/layer/package.json +++ b/nodejs/packages/layer/package.json @@ -28,6 +28,7 @@ }, "dependencies": { "@opentelemetry/api": "^1.9.0", + "@opentelemetry/exporter-logs-otlp-proto": "^0.52.1", "@opentelemetry/exporter-metrics-otlp-proto": "^0.52.1", "@opentelemetry/exporter-trace-otlp-proto": "^0.52.1", "@opentelemetry/instrumentation": "^0.52.1", diff --git a/nodejs/packages/layer/src/wrapper.ts b/nodejs/packages/layer/src/wrapper.ts index 2a36a07f1b..836b78c446 100644 --- a/nodejs/packages/layer/src/wrapper.ts +++ b/nodejs/packages/layer/src/wrapper.ts @@ -22,7 +22,8 @@ import { import { getEnv } from '@opentelemetry/core'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'; import { MeterProvider, MeterProviderOptions, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; -import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto' +import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto'; +import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-proto'; import { LoggerProvider, SimpleLogRecordProcessor, @@ -149,12 +150,15 @@ async function initializeProvider() { configureMeterProvider(meterProvider) } + const logExporter = new OTLPLogExporter(); let loggerConfig: LoggerProviderConfig = { resource, } const loggerProvider = new LoggerProvider(loggerConfig); if (typeof configureLoggerProvider === 'function') { configureLoggerProvider(loggerProvider) + } else { + loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(logExporter)); } // logging for debug From 4a9ab90da9424a78e4f482a0e6b949cb46a2f19e Mon Sep 17 00:00:00 2001 From: Ivan Santos <301291+pragmaticivan@users.noreply.github.com> Date: Fri, 9 Aug 2024 11:22:49 -0500 Subject: [PATCH 4/4] fix: set global logger --- nodejs/packages/layer/package.json | 1 + nodejs/packages/layer/src/wrapper.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/nodejs/packages/layer/package.json b/nodejs/packages/layer/package.json index 6238a7fa05..5e17c2f495 100644 --- a/nodejs/packages/layer/package.json +++ b/nodejs/packages/layer/package.json @@ -28,6 +28,7 @@ }, "dependencies": { "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api-logs": "^0.52.1", "@opentelemetry/exporter-logs-otlp-proto": "^0.52.1", "@opentelemetry/exporter-metrics-otlp-proto": "^0.52.1", "@opentelemetry/exporter-trace-otlp-proto": "^0.52.1", diff --git a/nodejs/packages/layer/src/wrapper.ts b/nodejs/packages/layer/src/wrapper.ts index 836b78c446..b88f7bcdcd 100644 --- a/nodejs/packages/layer/src/wrapper.ts +++ b/nodejs/packages/layer/src/wrapper.ts @@ -30,6 +30,7 @@ import { ConsoleLogRecordExporter, LoggerProviderConfig, } from '@opentelemetry/sdk-logs'; +import { logs } from '@opentelemetry/api-logs'; function defaultConfigureInstrumentations() { // Use require statements for instrumentation to avoid having to have transitive dependencies on all the typescript @@ -159,6 +160,7 @@ async function initializeProvider() { configureLoggerProvider(loggerProvider) } else { loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(logExporter)); + logs.setGlobalLoggerProvider(loggerProvider); } // logging for debug