Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2

### :bug: Bug Fixes

* fix(opentelemetry-sdk-node): the custom value from env variable for service.instance.id should take priority over random uuid as backup [#6345](https://github.com/open-telemetry/opentelemetry-js/pull/6345) @maryliag

### :books: Documentation

### :house: Internal
Expand Down
8 changes: 7 additions & 1 deletion experimental/packages/opentelemetry-sdk-node/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,15 @@ If `resourceDetectors` was not set, you can also use the environment variable `O
For example, to enable only the `env`, `host` detectors:

```shell
export OTEL_NODE_RESOURCE_DETECTORS="env,host"
export OTEL_NODE_RESOURCE_DETECTORS="host,env"
```

NOTE: The order set on `OTEL_NODE_RESOURCE_DETECTORS` will be respected and the detectors will be executed in order.
For example, if you have `OTEL_RESOURCE_ATTRIBUTES="service.instance.id='custom-name'"`, but also `serviceinstance` and `env` on `OTEL_NODE_RESOURCE_DETECTORS`, it can have 2 scenarios:

- `OTEL_NODE_RESOURCE_DETECTORS="serviceinstance,env"` will have the `service.instance.id` as `custom-name`
- `OTEL_NODE_RESOURCE_DETECTORS="env,serviceinstance"` will have the `service.instance.id` as a random UUID

### sampler

Configure a custom sampler. By default, all traces will be sampled.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,11 @@ const RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = 'serviceinstance';
export function getResourceDetectorsFromEnv(): Array<ResourceDetector> {
// When updating this list, make sure to also update the section `resourceDetectors` on README.
const resourceDetectors = new Map<string, ResourceDetector>([
[RESOURCE_DETECTOR_ENVIRONMENT, envDetector],
[RESOURCE_DETECTOR_HOST, hostDetector],
[RESOURCE_DETECTOR_OS, osDetector],
[RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, serviceInstanceIdDetector],
[RESOURCE_DETECTOR_PROCESS, processDetector],
[RESOURCE_DETECTOR_ENVIRONMENT, envDetector],
]);

const resourceDetectorsFromEnv = getStringListFromEnv(
Expand Down
54 changes: 54 additions & 0 deletions experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -998,6 +998,60 @@ describe('Node SDK', () => {
assertServiceInstanceIdIsUUID(resource);
await sdk.shutdown();
});

it('should configure service instance id with service instance id from env variable taking priority over random UUID', async () => {
process.env.OTEL_RESOURCE_ATTRIBUTES =
'service.instance.id=custom-service,service.name=my-service';
process.env.OTEL_NODE_RESOURCE_DETECTORS = 'all';
const sdk = new NodeSDK({
autoDetectResources: true,
});

sdk.start();
const resource = sdk['_resource'];
await resource.waitForAsyncAttributes?.();

assertServiceResource(resource, {
name: 'my-service',
instanceId: 'custom-service',
});
await sdk.shutdown();
});

it('should configure service instance id with service instance id from env variable taking priority over random UUID, based on order', async () => {
process.env.OTEL_RESOURCE_ATTRIBUTES =
'service.instance.id=custom-service,service.name=my-service';
process.env.OTEL_NODE_RESOURCE_DETECTORS = 'serviceinstance,env';
const sdk = new NodeSDK({
autoDetectResources: true,
});

sdk.start();
const resource = sdk['_resource'];
await resource.waitForAsyncAttributes?.();

assertServiceResource(resource, {
name: 'my-service',
instanceId: 'custom-service',
});
await sdk.shutdown();
});

it('should configure service instance id with service instance id from env variable taking priority over random UUID, based on order', async () => {
process.env.OTEL_RESOURCE_ATTRIBUTES =
'service.instance.id=custom-service,service.name=my-service';
process.env.OTEL_NODE_RESOURCE_DETECTORS = 'env,serviceinstance';
const sdk = new NodeSDK({
autoDetectResources: true,
});

sdk.start();
const resource = sdk['_resource'];
await resource.waitForAsyncAttributes?.();

assertServiceInstanceIdIsUUID(resource);
await sdk.shutdown();
});
});

describe('A disabled SDK should be no-op', () => {
Expand Down