From 97af8e6d4d6312fec84817e7b35c182e008461f1 Mon Sep 17 00:00:00 2001 From: Marylia Gutierrez Date: Mon, 25 Mar 2024 11:40:56 -0400 Subject: [PATCH] feat(sdk-node): add `HostDetector` as default resource detector (#4566) * feat(node-sdk): add `HostDetector` as default resource detector Fixes #4282 - Add `HostDetector` to the list of default resource detectors - Add test to make sure host and process values are being set by default - Update from deprecated `sdk.detectResources()` to `sdk.start()` on tests - Update from deprecated `SemanticResourceAttributes.SERVICE_NAME` to `SEMRESATTRS_SERVICE_NAME` on SDK file * Update experimental/CHANGELOG.md * fix lint remove extra lint causing lint error --------- Co-authored-by: Marc Pichler --- experimental/CHANGELOG.md | 1 + .../opentelemetry-sdk-node/src/sdk.ts | 6 ++- .../opentelemetry-sdk-node/test/sdk.test.ts | 40 ++++++++++++++++--- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 0906830ea45..34a76714910 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -24,6 +24,7 @@ All notable changes to experimental packages in this project will be documented ### :rocket: (Enhancement) * refactor(instr-http): use exported strings for semconv. [#4573](https://github.com/open-telemetry/opentelemetry-js/pull/4573/) @JamieDanielson +* feat(sdk-node): add `HostDetector` as default resource detector ### :bug: (Bug Fix) diff --git a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts index c8ebfb48a7e..5e7cd3676aa 100644 --- a/experimental/packages/opentelemetry-sdk-node/src/sdk.ts +++ b/experimental/packages/opentelemetry-sdk-node/src/sdk.ts @@ -31,6 +31,7 @@ import { DetectorSync, detectResourcesSync, envDetector, + hostDetector, IResource, processDetector, Resource, @@ -46,7 +47,7 @@ import { NodeTracerConfig, NodeTracerProvider, } from '@opentelemetry/sdk-trace-node'; -import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'; +import { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry/semantic-conventions'; import { NodeSDKConfiguration } from './types'; import { TracerProviderWithEnvExporters } from './TracerProviderWithEnvExporter'; import { getEnv, getEnvWithoutDefaults } from '@opentelemetry/core'; @@ -123,6 +124,7 @@ export class NodeSDK { this._resourceDetectors = configuration.resourceDetectors ?? [ envDetector, processDetector, + hostDetector, ]; this._serviceName = configuration.serviceName; @@ -328,7 +330,7 @@ export class NodeSDK { ? this._resource : this._resource.merge( new Resource({ - [SemanticResourceAttributes.SERVICE_NAME]: this._serviceName, + [SEMRESATTRS_SERVICE_NAME]: this._serviceName, }) ); diff --git a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts index 2019fdce290..b2d7bdb909d 100644 --- a/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts +++ b/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts @@ -57,6 +57,7 @@ import { TracerProviderWithEnvExporters } from '../src/TracerProviderWithEnvExpo import { envDetector, processDetector, + hostDetector, Resource, } from '@opentelemetry/resources'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; @@ -66,6 +67,10 @@ import { InMemoryLogRecordExporter, LoggerProvider, } from '@opentelemetry/sdk-logs'; +import { + SEMRESATTRS_HOST_NAME, + SEMRESATTRS_PROCESS_PID, +} from '@opentelemetry/semantic-conventions'; const DefaultContextManager = semver.gte(process.version, '14.8.0') ? AsyncLocalStorageContextManager @@ -527,9 +532,10 @@ describe('Node SDK', () => { }, }, envDetector, + hostDetector, ], }); - sdk.detectResources(); + sdk.start(); const resource = sdk['_resource']; await resource.waitForAsyncAttributes?.(); @@ -544,6 +550,28 @@ describe('Node SDK', () => { }); }); + describe('default resource detectors', () => { + it('default detectors populate values properly', async () => { + const sdk = new NodeSDK(); + sdk.start(); + const resource = sdk['_resource']; + await resource.waitForAsyncAttributes?.(); + + assertServiceResource(resource, { + instanceId: '627cc493', + name: 'my-service', + namespace: 'default', + version: '0.0.1', + }); + + assert.notEqual( + resource.attributes[SEMRESATTRS_PROCESS_PID], + undefined + ); + assert.notEqual(resource.attributes[SEMRESATTRS_HOST_NAME], undefined); + }); + }); + describe('with a buggy detector', () => { it('returns a merged resource', async () => { const sdk = new NodeSDK({ @@ -556,10 +584,11 @@ describe('Node SDK', () => { }, }, envDetector, + hostDetector, ], }); - sdk.detectResources(); + sdk.start(); const resource = sdk['_resource']; await resource.waitForAsyncAttributes?.(); @@ -609,7 +638,7 @@ describe('Node SDK', () => { DiagLogLevel.VERBOSE ); - sdk.detectResources(); + sdk.start(); await sdk['_resource'].waitForAsyncAttributes?.(); // Test that the Env Detector successfully found its resource and populated it with the right values. @@ -642,7 +671,7 @@ describe('Node SDK', () => { DiagLogLevel.DEBUG ); - sdk.detectResources(); + sdk.start(); assert.ok( callArgsContains( @@ -794,9 +823,10 @@ describe('Node SDK', () => { }, }, envDetector, + hostDetector, ], }); - sdk.detectResources(); + sdk.start(); const resource = sdk['_resource']; await resource.waitForAsyncAttributes?.();