Skip to content

Commit 7203851

Browse files
authored
feat(nodejs): add meterprovider (aws-observability#654)
PR fixes missing meterProvider which was causing errors for aws-lambda-instrumentation package. PR also switches from deprecated detectResources method to detectResourcesSync.
1 parent 20459eb commit 7203851

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

nodejs/packages/layer/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"@opentelemetry/propagator-aws-xray": "^1.2.0",
4949
"@opentelemetry/resource-detector-aws": "^1.2.3",
5050
"@opentelemetry/resources": "^1.12.0",
51+
"@opentelemetry/sdk-metrics": "^1.12.0",
5152
"@opentelemetry/sdk-trace-base": "^1.12.0",
5253
"@opentelemetry/sdk-trace-node": "^1.12.0"
5354
}

nodejs/packages/layer/src/wrapper.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
import { Instrumentation, registerInstrumentations } from '@opentelemetry/instrumentation';
99
import { awsLambdaDetector } from '@opentelemetry/resource-detector-aws';
1010
import {
11-
detectResources,
11+
detectResourcesSync,
1212
envDetector,
1313
processDetector,
1414
} from '@opentelemetry/resources';
@@ -22,6 +22,7 @@ import {
2222
import { getEnv } from '@opentelemetry/core';
2323
import { AwsLambdaInstrumentationConfig } from '@opentelemetry/instrumentation-aws-lambda';
2424
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
25+
import { MeterProvider, MeterProviderOptions } from '@opentelemetry/sdk-metrics';
2526

2627
function defaultConfigureInstrumentations() {
2728
// Use require statements for instrumentation to avoid having to have transitive dependencies on all the typescript
@@ -62,6 +63,8 @@ declare global {
6263
function configureSdkRegistration(
6364
defaultSdkRegistration: SDKRegistrationConfig
6465
): SDKRegistrationConfig;
66+
function configureMeter(defaultConfig: MeterProviderOptions): MeterProviderOptions;
67+
function configureMeterProvider(meterProvider: MeterProvider): void
6568
function configureLambdaInstrumentation(config: AwsLambdaInstrumentationConfig): AwsLambdaInstrumentationConfig
6669
function configureInstrumentations(): Instrumentation[]
6770
}
@@ -86,7 +89,7 @@ registerInstrumentations({
8689
});
8790

8891
async function initializeProvider() {
89-
const resource = await detectResources({
92+
const resource = detectResourcesSync({
9093
detectors: [awsLambdaDetector, envDetector, processDetector],
9194
});
9295

@@ -117,10 +120,24 @@ async function initializeProvider() {
117120
}
118121
tracerProvider.register(sdkRegistrationConfig);
119122

123+
// Configure default meter provider (doesn't export metrics)
124+
let meterConfig: MeterProviderOptions = {
125+
resource,
126+
}
127+
if (typeof configureMeter === 'function') {
128+
meterConfig = configureMeter(meterConfig);
129+
}
130+
131+
const meterProvider = new MeterProvider(meterConfig);
132+
if (typeof configureMeterProvider === 'function') {
133+
configureMeterProvider(meterProvider)
134+
}
135+
120136
// Re-register instrumentation with initialized provider. Patched code will see the update.
121137
registerInstrumentations({
122138
instrumentations,
123139
tracerProvider,
140+
meterProvider
124141
});
125142
}
126143
initializeProvider();

0 commit comments

Comments
 (0)