@opentelemetry/sdk-node 0.219.0 → 0.220.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -9
- package/build/src/create-from-config.d.ts +8 -0
- package/build/src/create-from-config.js +26 -0
- package/build/src/create-from-config.js.map +1 -0
- package/build/src/create-from-env.d.ts +11 -0
- package/build/src/create-from-env.js +80 -0
- package/build/src/create-from-env.js.map +1 -0
- package/build/src/index.d.ts +7 -1
- package/build/src/index.js +8 -2
- package/build/src/index.js.map +1 -1
- package/build/src/sdk.d.ts +0 -1
- package/build/src/sdk.js +28 -33
- package/build/src/sdk.js.map +1 -1
- package/build/src/start.js +65 -51
- package/build/src/start.js.map +1 -1
- package/build/src/types.d.ts +12 -4
- package/build/src/types.js.map +1 -1
- package/build/src/utils.d.ts +19 -11
- package/build/src/utils.js +352 -181
- package/build/src/utils.js.map +1 -1
- package/build/src/version.d.ts +1 -1
- package/build/src/version.js +1 -1
- package/build/src/version.js.map +1 -1
- package/package.json +29 -28
package/README.md
CHANGED
|
@@ -103,11 +103,6 @@ Deprecated, please use [logRecordProcessors](#logrecordprocessors) instead.
|
|
|
103
103
|
|
|
104
104
|
An array of log record processors to register to the logger provider.
|
|
105
105
|
|
|
106
|
-
### mergeResourceWithDefaults
|
|
107
|
-
|
|
108
|
-
Merge user-provided resources with the default resource. Default `true`.
|
|
109
|
-
The default will change to `false` in a future iteration of this package.
|
|
110
|
-
|
|
111
106
|
### metricReader
|
|
112
107
|
|
|
113
108
|
Add a [MetricReader](../../../packages/sdk-metrics/src/export/MetricReader.ts)
|
|
@@ -128,7 +123,34 @@ or configure each instrumentation individually.
|
|
|
128
123
|
|
|
129
124
|
### resource
|
|
130
125
|
|
|
131
|
-
|
|
126
|
+
A [Resource](https://opentelemetry.io/docs/specs/otel/resource/sdk/) to associate with generated telemetry.
|
|
127
|
+
This resource will be use as the basis for additional resource attributes determined by [resource detectors](#resourcedetectors).
|
|
128
|
+
See also the [`autoDetectResources` setting](#autodetectresources).
|
|
129
|
+
|
|
130
|
+
If not specified, the [default resource](https://opentelemetry.io/docs/specs/semconv/resource/#semantic-attributes-with-sdk-provided-default-value) will be used.
|
|
131
|
+
|
|
132
|
+
> [!WARNING]
|
|
133
|
+
> If specifying the `resource` option, it is recommended that the default resource be included.
|
|
134
|
+
> Otherwise the important `service.name` and `telemetry.sdk.*` resource attributes might not be included on telemetry,
|
|
135
|
+
> which can adversely impact downstream processing or visualization.
|
|
136
|
+
> The default resource can be include as follows:
|
|
137
|
+
>
|
|
138
|
+
> ```js
|
|
139
|
+
> import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
140
|
+
> import { resourceFromAttributes, defaultResource } from '@opentelemetry/resources';
|
|
141
|
+
> const sdk = new NodeSDK({
|
|
142
|
+
> resource: defaultResource().merge(
|
|
143
|
+
> resourceFromAttributes({
|
|
144
|
+
> 'my.custom.attr': 'some value',
|
|
145
|
+
> })
|
|
146
|
+
> ),
|
|
147
|
+
> // ...
|
|
148
|
+
> });
|
|
149
|
+
> ```
|
|
150
|
+
>
|
|
151
|
+
> Alternatively, consider setting custom resource attributes via the
|
|
152
|
+
> [`OTEL_RESOURCE_ATTRIBUTES`](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/#general-sdk-configuration)
|
|
153
|
+
> environment variable.
|
|
132
154
|
|
|
133
155
|
### resourceDetectors
|
|
134
156
|
|
|
@@ -174,11 +196,11 @@ An array of span processors to register to the tracer provider.
|
|
|
174
196
|
|
|
175
197
|
### traceExporter
|
|
176
198
|
|
|
177
|
-
Configure a trace exporter. If an exporter is configured, it will be used with a [BatchSpanProcessor](../../../packages/
|
|
199
|
+
Configure a trace exporter. If an exporter is configured, it will be used with a [BatchSpanProcessor](../../../packages/sdk-trace/src/platform/node/export/BatchSpanProcessor.ts). If an exporter OR span processor is not configured programmatically, this package will auto setup the default `otlp` exporter with `http/protobuf` protocol with a `BatchSpanProcessor`.
|
|
178
200
|
|
|
179
201
|
### spanLimits
|
|
180
202
|
|
|
181
|
-
Configure tracing parameters. These are the same trace parameters used to [configure a tracer](../../../packages/
|
|
203
|
+
Configure tracing parameters. These are the same trace parameters used to [configure a tracer](../../../packages/sdk-trace/src/types.ts#L20).
|
|
182
204
|
|
|
183
205
|
### serviceName
|
|
184
206
|
|
|
@@ -245,7 +267,7 @@ linkes for details:
|
|
|
245
267
|
|
|
246
268
|
- Metric reader metrics: [MetricReaderMetrics](../../../packages//sdk-metrics/src/export/MetricReaderMetrics.ts)
|
|
247
269
|
- Logger metrics: [LoggerMetrics.ts](../sdk-logs/src/LoggerMetrics.ts)
|
|
248
|
-
- Span metrics: [TracerMetrics.ts](../../../packages/
|
|
270
|
+
- Span metrics: [TracerMetrics.ts](../../../packages/sdk-trace/src/TracerMetrics.ts)
|
|
249
271
|
|
|
250
272
|
## Useful links
|
|
251
273
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create SDK components from parsed declarative config.
|
|
3
|
+
* https://opentelemetry.io/docs/specs/otel/configuration/sdk/#create
|
|
4
|
+
*/
|
|
5
|
+
import type { AttributeLimitsConfigModel, SpanLimitsConfigModel } from '@opentelemetry/configuration';
|
|
6
|
+
import type { SpanLimits } from '@opentelemetry/sdk-trace';
|
|
7
|
+
export declare function createSpanLimitsFromConfig(limits?: SpanLimitsConfigModel, attribute_limits?: AttributeLimitsConfigModel): SpanLimits | undefined;
|
|
8
|
+
//# sourceMappingURL=create-from-config.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright The OpenTelemetry Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createSpanLimitsFromConfig = void 0;
|
|
8
|
+
function createSpanLimitsFromConfig(limits, attribute_limits) {
|
|
9
|
+
if (!limits && !attribute_limits) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
attributeValueLengthLimit: limits?.attribute_value_length_limit ??
|
|
14
|
+
attribute_limits?.attribute_value_length_limit ??
|
|
15
|
+
undefined,
|
|
16
|
+
attributeCountLimit: limits?.attribute_count_limit ??
|
|
17
|
+
attribute_limits?.attribute_count_limit ??
|
|
18
|
+
undefined,
|
|
19
|
+
eventCountLimit: limits?.event_count_limit ?? undefined,
|
|
20
|
+
linkCountLimit: limits?.link_count_limit ?? undefined,
|
|
21
|
+
attributePerEventCountLimit: limits?.event_attribute_count_limit ?? undefined,
|
|
22
|
+
attributePerLinkCountLimit: limits?.link_attribute_count_limit ?? undefined,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.createSpanLimitsFromConfig = createSpanLimitsFromConfig;
|
|
26
|
+
//# sourceMappingURL=create-from-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-from-config.js","sourceRoot":"","sources":["../../src/create-from-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAaH,SAAgB,0BAA0B,CACxC,MAA8B,EAC9B,gBAA6C;IAE7C,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE;QAChC,OAAO,SAAS,CAAC;KAClB;IACD,OAAO;QACL,yBAAyB,EACvB,MAAM,EAAE,4BAA4B;YACpC,gBAAgB,EAAE,4BAA4B;YAC9C,SAAS;QACX,mBAAmB,EACjB,MAAM,EAAE,qBAAqB;YAC7B,gBAAgB,EAAE,qBAAqB;YACvC,SAAS;QACX,eAAe,EAAE,MAAM,EAAE,iBAAiB,IAAI,SAAS;QACvD,cAAc,EAAE,MAAM,EAAE,gBAAgB,IAAI,SAAS;QACrD,2BAA2B,EACzB,MAAM,EAAE,2BAA2B,IAAI,SAAS;QAClD,0BAA0B,EAAE,MAAM,EAAE,0BAA0B,IAAI,SAAS;KAC5E,CAAC;AACJ,CAAC;AAtBD,gEAsBC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Create SDK components from parsed declarative config.\n * https://opentelemetry.io/docs/specs/otel/configuration/sdk/#create\n */\n\nimport type {\n AttributeLimitsConfigModel,\n SpanLimitsConfigModel,\n} from '@opentelemetry/configuration';\nimport type { SpanLimits } from '@opentelemetry/sdk-trace';\n\nexport function createSpanLimitsFromConfig(\n limits?: SpanLimitsConfigModel,\n attribute_limits?: AttributeLimitsConfigModel\n): SpanLimits | undefined {\n if (!limits && !attribute_limits) {\n return undefined;\n }\n return {\n attributeValueLengthLimit:\n limits?.attribute_value_length_limit ??\n attribute_limits?.attribute_value_length_limit ??\n undefined,\n attributeCountLimit:\n limits?.attribute_count_limit ??\n attribute_limits?.attribute_count_limit ??\n undefined,\n eventCountLimit: limits?.event_count_limit ?? undefined,\n linkCountLimit: limits?.link_count_limit ?? undefined,\n attributePerEventCountLimit:\n limits?.event_attribute_count_limit ?? undefined,\n attributePerLinkCountLimit: limits?.link_attribute_count_limit ?? undefined,\n };\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create SDK components from environment variable settings.
|
|
3
|
+
* https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/
|
|
4
|
+
*/
|
|
5
|
+
import type { MeterProvider } from '@opentelemetry/api';
|
|
6
|
+
import type { Sampler, SpanExporter, SpanLimits } from '@opentelemetry/sdk-trace';
|
|
7
|
+
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace';
|
|
8
|
+
export declare function createSamplerFromEnv(): Sampler | undefined;
|
|
9
|
+
export declare function createSpanLimitsFromEnv(): SpanLimits | undefined;
|
|
10
|
+
export declare function createBatchSpanProcessorFromEnv(exporter: SpanExporter, selfObsMeterProvider?: MeterProvider): BatchSpanProcessor;
|
|
11
|
+
//# sourceMappingURL=create-from-env.d.ts.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright The OpenTelemetry Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createBatchSpanProcessorFromEnv = exports.createSpanLimitsFromEnv = exports.createSamplerFromEnv = void 0;
|
|
8
|
+
const api_1 = require("@opentelemetry/api");
|
|
9
|
+
const core_1 = require("@opentelemetry/core");
|
|
10
|
+
const sdk_trace_1 = require("@opentelemetry/sdk-trace");
|
|
11
|
+
const sdk_trace_2 = require("@opentelemetry/sdk-trace");
|
|
12
|
+
const utils_1 = require("./utils");
|
|
13
|
+
const DEFAULT_RATIO = 1;
|
|
14
|
+
function createSamplerFromEnv() {
|
|
15
|
+
const samplerName = (0, core_1.getStringFromEnv)('OTEL_TRACES_SAMPLER');
|
|
16
|
+
if (samplerName === undefined) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
switch (samplerName) {
|
|
20
|
+
case 'always_on':
|
|
21
|
+
return new sdk_trace_2.AlwaysOnSampler();
|
|
22
|
+
case 'always_off':
|
|
23
|
+
return new sdk_trace_2.AlwaysOffSampler();
|
|
24
|
+
case 'parentbased_always_on':
|
|
25
|
+
return new sdk_trace_2.ParentBasedSampler({
|
|
26
|
+
root: new sdk_trace_2.AlwaysOnSampler(),
|
|
27
|
+
});
|
|
28
|
+
case 'parentbased_always_off':
|
|
29
|
+
return new sdk_trace_2.ParentBasedSampler({
|
|
30
|
+
root: new sdk_trace_2.AlwaysOffSampler(),
|
|
31
|
+
});
|
|
32
|
+
case 'traceidratio':
|
|
33
|
+
return new sdk_trace_2.TraceIdRatioBasedSampler(getSamplerRatioFromEnv());
|
|
34
|
+
case 'parentbased_traceidratio':
|
|
35
|
+
return new sdk_trace_2.ParentBasedSampler({
|
|
36
|
+
root: new sdk_trace_2.TraceIdRatioBasedSampler(getSamplerRatioFromEnv()),
|
|
37
|
+
});
|
|
38
|
+
default:
|
|
39
|
+
api_1.diag.error(`unknown OTEL_TRACES_SAMPLER value "${samplerName}", using default`);
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.createSamplerFromEnv = createSamplerFromEnv;
|
|
44
|
+
function getSamplerRatioFromEnv() {
|
|
45
|
+
const ratio = (0, core_1.getNumberFromEnv)('OTEL_TRACES_SAMPLER_ARG');
|
|
46
|
+
if (ratio == null) {
|
|
47
|
+
api_1.diag.error(`OTEL_TRACES_SAMPLER_ARG is blank, defaulting to ${DEFAULT_RATIO}.`);
|
|
48
|
+
return DEFAULT_RATIO;
|
|
49
|
+
}
|
|
50
|
+
if (ratio < 0 || ratio > 1) {
|
|
51
|
+
api_1.diag.error(`OTEL_TRACES_SAMPLER_ARG=${ratio} was given, but it is out of range ([0..1]), defaulting to ${DEFAULT_RATIO}.`);
|
|
52
|
+
return DEFAULT_RATIO;
|
|
53
|
+
}
|
|
54
|
+
return ratio;
|
|
55
|
+
}
|
|
56
|
+
function createSpanLimitsFromEnv() {
|
|
57
|
+
return {
|
|
58
|
+
attributeCountLimit: (0, core_1.getNumberFromEnv)('OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT') ??
|
|
59
|
+
(0, core_1.getNumberFromEnv)('OTEL_ATTRIBUTE_COUNT_LIMIT'),
|
|
60
|
+
attributeValueLengthLimit: (0, core_1.getNumberFromEnv)('OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT') ??
|
|
61
|
+
(0, core_1.getNumberFromEnv)('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'),
|
|
62
|
+
eventCountLimit: (0, core_1.getNumberFromEnv)('OTEL_SPAN_EVENT_COUNT_LIMIT'),
|
|
63
|
+
linkCountLimit: (0, core_1.getNumberFromEnv)('OTEL_SPAN_LINK_COUNT_LIMIT'),
|
|
64
|
+
attributePerEventCountLimit: (0, core_1.getNumberFromEnv)('OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT'),
|
|
65
|
+
attributePerLinkCountLimit: (0, core_1.getNumberFromEnv)('OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT'),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
exports.createSpanLimitsFromEnv = createSpanLimitsFromEnv;
|
|
69
|
+
function createBatchSpanProcessorFromEnv(exporter, selfObsMeterProvider) {
|
|
70
|
+
return new sdk_trace_1.BatchSpanProcessor({
|
|
71
|
+
exporter,
|
|
72
|
+
selfObsMeterProvider,
|
|
73
|
+
maxQueueSize: (0, utils_1.getNonNegativeNumberFromEnv)('OTEL_BSP_MAX_QUEUE_SIZE'),
|
|
74
|
+
scheduledDelayMillis: (0, utils_1.getNonNegativeNumberFromEnv)('OTEL_BSP_SCHEDULE_DELAY'),
|
|
75
|
+
exportTimeoutMillis: (0, utils_1.getNonNegativeNumberFromEnv)('OTEL_BSP_EXPORT_TIMEOUT'),
|
|
76
|
+
maxExportBatchSize: (0, utils_1.getNonNegativeNumberFromEnv)('OTEL_BSP_MAX_EXPORT_BATCH_SIZE'),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
exports.createBatchSpanProcessorFromEnv = createBatchSpanProcessorFromEnv;
|
|
80
|
+
//# sourceMappingURL=create-from-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-from-env.js","sourceRoot":"","sources":["../../src/create-from-env.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,4CAA0C;AAC1C,8CAAyE;AAMzE,wDAA8D;AAC9D,wDAKkC;AAClC,mCAAsD;AAEtD,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,SAAgB,oBAAoB;IAClC,MAAM,WAAW,GAAG,IAAA,uBAAgB,EAAC,qBAAqB,CAAC,CAAC;IAC5D,IAAI,WAAW,KAAK,SAAS,EAAE;QAC7B,OAAO,SAAS,CAAC;KAClB;IACD,QAAQ,WAAW,EAAE;QACnB,KAAK,WAAW;YACd,OAAO,IAAI,2BAAe,EAAE,CAAC;QAC/B,KAAK,YAAY;YACf,OAAO,IAAI,4BAAgB,EAAE,CAAC;QAChC,KAAK,uBAAuB;YAC1B,OAAO,IAAI,8BAAkB,CAAC;gBAC5B,IAAI,EAAE,IAAI,2BAAe,EAAE;aAC5B,CAAC,CAAC;QACL,KAAK,wBAAwB;YAC3B,OAAO,IAAI,8BAAkB,CAAC;gBAC5B,IAAI,EAAE,IAAI,4BAAgB,EAAE;aAC7B,CAAC,CAAC;QACL,KAAK,cAAc;YACjB,OAAO,IAAI,oCAAwB,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAChE,KAAK,0BAA0B;YAC7B,OAAO,IAAI,8BAAkB,CAAC;gBAC5B,IAAI,EAAE,IAAI,oCAAwB,CAAC,sBAAsB,EAAE,CAAC;aAC7D,CAAC,CAAC;QACL;YACE,UAAI,CAAC,KAAK,CACR,sCAAsC,WAAW,kBAAkB,CACpE,CAAC;YACF,OAAO,SAAS,CAAC;KACpB;AACH,CAAC;AA9BD,oDA8BC;AAED,SAAS,sBAAsB;IAC7B,MAAM,KAAK,GAAG,IAAA,uBAAgB,EAAC,yBAAyB,CAAC,CAAC;IAC1D,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,UAAI,CAAC,KAAK,CACR,mDAAmD,aAAa,GAAG,CACpE,CAAC;QACF,OAAO,aAAa,CAAC;KACtB;IAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;QAC1B,UAAI,CAAC,KAAK,CACR,2BAA2B,KAAK,8DAA8D,aAAa,GAAG,CAC/G,CAAC;QACF,OAAO,aAAa,CAAC;KACtB;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,uBAAuB;IACrC,OAAO;QACL,mBAAmB,EACjB,IAAA,uBAAgB,EAAC,iCAAiC,CAAC;YACnD,IAAA,uBAAgB,EAAC,4BAA4B,CAAC;QAChD,yBAAyB,EACvB,IAAA,uBAAgB,EAAC,wCAAwC,CAAC;YAC1D,IAAA,uBAAgB,EAAC,mCAAmC,CAAC;QACvD,eAAe,EAAE,IAAA,uBAAgB,EAAC,6BAA6B,CAAC;QAChE,cAAc,EAAE,IAAA,uBAAgB,EAAC,4BAA4B,CAAC;QAC9D,2BAA2B,EAAE,IAAA,uBAAgB,EAC3C,2CAA2C,CAC5C;QACD,0BAA0B,EAAE,IAAA,uBAAgB,EAC1C,0CAA0C,CAC3C;KACF,CAAC;AACJ,CAAC;AAjBD,0DAiBC;AAED,SAAgB,+BAA+B,CAC7C,QAAsB,EACtB,oBAAoC;IAEpC,OAAO,IAAI,8BAAkB,CAAC;QAC5B,QAAQ;QACR,oBAAoB;QACpB,YAAY,EAAE,IAAA,mCAA2B,EAAC,yBAAyB,CAAC;QACpE,oBAAoB,EAAE,IAAA,mCAA2B,EAC/C,yBAAyB,CAC1B;QACD,mBAAmB,EAAE,IAAA,mCAA2B,EAAC,yBAAyB,CAAC;QAC3E,kBAAkB,EAAE,IAAA,mCAA2B,EAC7C,gCAAgC,CACjC;KACF,CAAC,CAAC;AACL,CAAC;AAhBD,0EAgBC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Create SDK components from environment variable settings.\n * https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/\n */\n\nimport type { MeterProvider } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { getNumberFromEnv, getStringFromEnv } from '@opentelemetry/core';\nimport type {\n Sampler,\n SpanExporter,\n SpanLimits,\n} from '@opentelemetry/sdk-trace';\nimport { BatchSpanProcessor } from '@opentelemetry/sdk-trace';\nimport {\n AlwaysOffSampler,\n AlwaysOnSampler,\n ParentBasedSampler,\n TraceIdRatioBasedSampler,\n} from '@opentelemetry/sdk-trace';\nimport { getNonNegativeNumberFromEnv } from './utils';\n\nconst DEFAULT_RATIO = 1;\n\nexport function createSamplerFromEnv(): Sampler | undefined {\n const samplerName = getStringFromEnv('OTEL_TRACES_SAMPLER');\n if (samplerName === undefined) {\n return undefined;\n }\n switch (samplerName) {\n case 'always_on':\n return new AlwaysOnSampler();\n case 'always_off':\n return new AlwaysOffSampler();\n case 'parentbased_always_on':\n return new ParentBasedSampler({\n root: new AlwaysOnSampler(),\n });\n case 'parentbased_always_off':\n return new ParentBasedSampler({\n root: new AlwaysOffSampler(),\n });\n case 'traceidratio':\n return new TraceIdRatioBasedSampler(getSamplerRatioFromEnv());\n case 'parentbased_traceidratio':\n return new ParentBasedSampler({\n root: new TraceIdRatioBasedSampler(getSamplerRatioFromEnv()),\n });\n default:\n diag.error(\n `unknown OTEL_TRACES_SAMPLER value \"${samplerName}\", using default`\n );\n return undefined;\n }\n}\n\nfunction getSamplerRatioFromEnv(): number | undefined {\n const ratio = getNumberFromEnv('OTEL_TRACES_SAMPLER_ARG');\n if (ratio == null) {\n diag.error(\n `OTEL_TRACES_SAMPLER_ARG is blank, defaulting to ${DEFAULT_RATIO}.`\n );\n return DEFAULT_RATIO;\n }\n\n if (ratio < 0 || ratio > 1) {\n diag.error(\n `OTEL_TRACES_SAMPLER_ARG=${ratio} was given, but it is out of range ([0..1]), defaulting to ${DEFAULT_RATIO}.`\n );\n return DEFAULT_RATIO;\n }\n\n return ratio;\n}\n\nexport function createSpanLimitsFromEnv(): SpanLimits | undefined {\n return {\n attributeCountLimit:\n getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT') ??\n getNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT'),\n attributeValueLengthLimit:\n getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT') ??\n getNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'),\n eventCountLimit: getNumberFromEnv('OTEL_SPAN_EVENT_COUNT_LIMIT'),\n linkCountLimit: getNumberFromEnv('OTEL_SPAN_LINK_COUNT_LIMIT'),\n attributePerEventCountLimit: getNumberFromEnv(\n 'OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT'\n ),\n attributePerLinkCountLimit: getNumberFromEnv(\n 'OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT'\n ),\n };\n}\n\nexport function createBatchSpanProcessorFromEnv(\n exporter: SpanExporter,\n selfObsMeterProvider?: MeterProvider\n): BatchSpanProcessor {\n return new BatchSpanProcessor({\n exporter,\n selfObsMeterProvider,\n maxQueueSize: getNonNegativeNumberFromEnv('OTEL_BSP_MAX_QUEUE_SIZE'),\n scheduledDelayMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BSP_SCHEDULE_DELAY'\n ),\n exportTimeoutMillis: getNonNegativeNumberFromEnv('OTEL_BSP_EXPORT_TIMEOUT'),\n maxExportBatchSize: getNonNegativeNumberFromEnv(\n 'OTEL_BSP_MAX_EXPORT_BATCH_SIZE'\n ),\n });\n}\n"]}
|
package/build/src/index.d.ts
CHANGED
|
@@ -3,8 +3,14 @@ export * as contextBase from '@opentelemetry/api';
|
|
|
3
3
|
export * as core from '@opentelemetry/core';
|
|
4
4
|
export * as logs from '@opentelemetry/sdk-logs';
|
|
5
5
|
export * as metrics from '@opentelemetry/sdk-metrics';
|
|
6
|
-
export * as node from '@opentelemetry/sdk-trace-node';
|
|
7
6
|
export * as resources from '@opentelemetry/resources';
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated Import directly from `@opentelemetry/sdk-trace` instead.
|
|
9
|
+
*/
|
|
10
|
+
export * as node from '@opentelemetry/sdk-trace-node';
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated Import directly from `@opentelemetry/sdk-trace` instead.
|
|
13
|
+
*/
|
|
8
14
|
export * as tracing from '@opentelemetry/sdk-trace-base';
|
|
9
15
|
export { NodeSDK } from './sdk';
|
|
10
16
|
export type { LoggerProviderConfig, MeterProviderConfig } from './sdk';
|
package/build/src/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.startNodeSDK = exports.NodeSDK = exports.tracing = exports.
|
|
7
|
+
exports.startNodeSDK = exports.NodeSDK = exports.tracing = exports.node = exports.resources = exports.metrics = exports.logs = exports.core = exports.contextBase = exports.api = void 0;
|
|
8
8
|
// This is a meta-package, and these exist in to re-export *all* items from
|
|
9
9
|
// the individual packages as individual _namespaces_, so wildcard exports are
|
|
10
10
|
// appropriate here. Otherwise, it'd be a pain to enumerate and keep things
|
|
@@ -15,8 +15,14 @@ exports.contextBase = require("@opentelemetry/api");
|
|
|
15
15
|
exports.core = require("@opentelemetry/core");
|
|
16
16
|
exports.logs = require("@opentelemetry/sdk-logs");
|
|
17
17
|
exports.metrics = require("@opentelemetry/sdk-metrics");
|
|
18
|
-
exports.node = require("@opentelemetry/sdk-trace-node");
|
|
19
18
|
exports.resources = require("@opentelemetry/resources");
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Import directly from `@opentelemetry/sdk-trace` instead.
|
|
21
|
+
*/
|
|
22
|
+
exports.node = require("@opentelemetry/sdk-trace-node");
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Import directly from `@opentelemetry/sdk-trace` instead.
|
|
25
|
+
*/
|
|
20
26
|
exports.tracing = require("@opentelemetry/sdk-trace-base");
|
|
21
27
|
/* eslint-enable no-restricted-syntax */
|
|
22
28
|
var sdk_1 = require("./sdk");
|
package/build/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,0CAA0C;AAE1C,yCAAyC;AACzC,4CAA0C;AAC1C,oDAAkD;AAClD,8CAA4C;AAC5C,kDAAgD;AAChD,wDAAsD;AACtD,wDAAsD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,0CAA0C;AAE1C,yCAAyC;AACzC,4CAA0C;AAC1C,oDAAkD;AAClD,8CAA4C;AAC5C,kDAAgD;AAChD,wDAAsD;AACtD,wDAAsD;AAEtD;;GAEG;AACH,wDAAsD;AACtD;;GAEG;AACH,2DAAyD;AACzD,wCAAwC;AAExC,6BAAgC;AAAvB,8FAAA,OAAO,OAAA;AAGhB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// This is a meta-package, and these exist in to re-export *all* items from\n// the individual packages as individual _namespaces_, so wildcard exports are\n// appropriate here. Otherwise, it'd be a pain to enumerate and keep things\n// in-sync with all the upstream packages.\n\n/* eslint-disable no-restricted-syntax */\nexport * as api from '@opentelemetry/api';\nexport * as contextBase from '@opentelemetry/api';\nexport * as core from '@opentelemetry/core';\nexport * as logs from '@opentelemetry/sdk-logs';\nexport * as metrics from '@opentelemetry/sdk-metrics';\nexport * as resources from '@opentelemetry/resources';\n\n/**\n * @deprecated Import directly from `@opentelemetry/sdk-trace` instead.\n */\nexport * as node from '@opentelemetry/sdk-trace-node';\n/**\n * @deprecated Import directly from `@opentelemetry/sdk-trace` instead.\n */\nexport * as tracing from '@opentelemetry/sdk-trace-base';\n/* eslint-enable no-restricted-syntax */\n\nexport { NodeSDK } from './sdk';\nexport type { LoggerProviderConfig, MeterProviderConfig } from './sdk';\nexport type { NodeSDKConfiguration } from './types';\nexport { startNodeSDK } from './start';\n"]}
|
package/build/src/sdk.d.ts
CHANGED
|
@@ -36,7 +36,6 @@ export type LoggerProviderConfig = {
|
|
|
36
36
|
* nodeSdk.start(); // registers all configured SDK components
|
|
37
37
|
*/
|
|
38
38
|
export declare class NodeSDK {
|
|
39
|
-
private _tracerProviderConfig?;
|
|
40
39
|
private _loggerProviderConfig?;
|
|
41
40
|
private _meterProviderConfig?;
|
|
42
41
|
private _instrumentations;
|
package/build/src/sdk.js
CHANGED
|
@@ -15,11 +15,11 @@ const exporter_logs_otlp_grpc_1 = require("@opentelemetry/exporter-logs-otlp-grp
|
|
|
15
15
|
const exporter_logs_otlp_proto_1 = require("@opentelemetry/exporter-logs-otlp-proto");
|
|
16
16
|
const exporter_prometheus_1 = require("@opentelemetry/exporter-prometheus");
|
|
17
17
|
const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
|
|
18
|
-
const
|
|
19
|
-
const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
|
|
18
|
+
const sdk_trace_1 = require("@opentelemetry/sdk-trace");
|
|
20
19
|
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
|
|
21
20
|
const core_1 = require("@opentelemetry/core");
|
|
22
21
|
const utils_1 = require("./utils");
|
|
22
|
+
const create_from_env_1 = require("./create-from-env");
|
|
23
23
|
/**
|
|
24
24
|
*
|
|
25
25
|
* @returns MetricReader[] if appropriate environment variables are configured
|
|
@@ -72,7 +72,6 @@ function getMetricReadersFromEnv() {
|
|
|
72
72
|
* nodeSdk.start(); // registers all configured SDK components
|
|
73
73
|
*/
|
|
74
74
|
class NodeSDK {
|
|
75
|
-
_tracerProviderConfig;
|
|
76
75
|
_loggerProviderConfig;
|
|
77
76
|
_meterProviderConfig;
|
|
78
77
|
_instrumentations;
|
|
@@ -116,30 +115,8 @@ class NodeSDK {
|
|
|
116
115
|
this._resourceDetectors = [resources_1.envDetector, resources_1.processDetector, resources_1.hostDetector];
|
|
117
116
|
}
|
|
118
117
|
this._serviceName = configuration.serviceName;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
configuration.spanProcessor ||
|
|
122
|
-
configuration.spanProcessors) {
|
|
123
|
-
const tracerProviderConfig = {};
|
|
124
|
-
if (configuration.sampler) {
|
|
125
|
-
tracerProviderConfig.sampler = configuration.sampler;
|
|
126
|
-
}
|
|
127
|
-
if (configuration.spanLimits) {
|
|
128
|
-
tracerProviderConfig.spanLimits = configuration.spanLimits;
|
|
129
|
-
}
|
|
130
|
-
if (configuration.idGenerator) {
|
|
131
|
-
tracerProviderConfig.idGenerator = configuration.idGenerator;
|
|
132
|
-
}
|
|
133
|
-
if (configuration.spanProcessor) {
|
|
134
|
-
api_1.diag.warn("The 'spanProcessor' option is deprecated. Please use 'spanProcessors' instead.");
|
|
135
|
-
}
|
|
136
|
-
const spanProcessor = configuration.spanProcessor ??
|
|
137
|
-
new sdk_trace_base_1.BatchSpanProcessor(configuration.traceExporter);
|
|
138
|
-
const spanProcessors = configuration.spanProcessors ?? [spanProcessor];
|
|
139
|
-
this._tracerProviderConfig = {
|
|
140
|
-
tracerConfig: tracerProviderConfig,
|
|
141
|
-
spanProcessors,
|
|
142
|
-
};
|
|
118
|
+
if (configuration.spanProcessor) {
|
|
119
|
+
api_1.diag.warn("The 'spanProcessor' option is deprecated. Please use 'spanProcessors' instead.");
|
|
143
120
|
}
|
|
144
121
|
if (configuration.logRecordProcessors) {
|
|
145
122
|
this._loggerProviderConfig = {
|
|
@@ -223,15 +200,33 @@ class NodeSDK {
|
|
|
223
200
|
instrumentation.setMeterProvider(api_1.metrics.getMeterProvider());
|
|
224
201
|
}
|
|
225
202
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
203
|
+
// Determine `spanProcessors` from multiple possible options.
|
|
204
|
+
let spanProcessors;
|
|
205
|
+
if (this._configuration?.spanProcessors) {
|
|
206
|
+
spanProcessors = this._configuration.spanProcessors;
|
|
207
|
+
}
|
|
208
|
+
else if (this._configuration?.spanProcessor) {
|
|
209
|
+
spanProcessors = [this._configuration.spanProcessor];
|
|
210
|
+
}
|
|
211
|
+
else if (this._configuration?.traceExporter) {
|
|
212
|
+
spanProcessors = [
|
|
213
|
+
(0, create_from_env_1.createBatchSpanProcessorFromEnv)(this._configuration.traceExporter, sdkMetricsEnabled ? this._meterProvider : undefined),
|
|
214
|
+
];
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
spanProcessors = (0, utils_1.getSpanProcessorsFromEnv)(sdkMetricsEnabled ? this._meterProvider : undefined);
|
|
218
|
+
}
|
|
229
219
|
// Only register if there is a span processor
|
|
230
220
|
if (spanProcessors.length > 0) {
|
|
231
|
-
this._tracerProvider = new
|
|
232
|
-
|
|
221
|
+
this._tracerProvider = new sdk_trace_1.TracerProvider({
|
|
222
|
+
sampler: this._configuration?.sampler ?? (0, create_from_env_1.createSamplerFromEnv)(),
|
|
223
|
+
spanLimits: {
|
|
224
|
+
...(0, create_from_env_1.createSpanLimitsFromEnv)(),
|
|
225
|
+
...this._configuration?.spanLimits,
|
|
226
|
+
},
|
|
233
227
|
resource: this._resource,
|
|
234
228
|
meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,
|
|
229
|
+
idGenerator: this._configuration?.idGenerator,
|
|
235
230
|
spanProcessors,
|
|
236
231
|
});
|
|
237
232
|
api_1.trace.setGlobalTracerProvider(this._tracerProvider);
|
|
@@ -303,7 +298,7 @@ class NodeSDK {
|
|
|
303
298
|
this._loggerProviderConfig = {
|
|
304
299
|
logRecordProcessors: exporters.map(exporter => {
|
|
305
300
|
if (exporter instanceof sdk_logs_1.ConsoleLogRecordExporter) {
|
|
306
|
-
return new sdk_logs_1.SimpleLogRecordProcessor(exporter);
|
|
301
|
+
return new sdk_logs_1.SimpleLogRecordProcessor({ exporter });
|
|
307
302
|
}
|
|
308
303
|
else {
|
|
309
304
|
return (0, utils_1.getBatchLogRecordProcessorFromEnv)(exporter);
|
package/build/src/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAA6E;AAC7E,sDAA+C;AAE/C,oEAA0E;AAM1E,wDAOkC;AAKlC,sDAIiC;AACjC,oFAAgG;AAChG,oFAAgG;AAChG,sFAAkG;AAClG,4EAAoG;AAEpG,4DAIoC;AAEpC,kEAAmE;AAEnE,kEAAmE;AACnE,8EAAwE;AAExE,8CAK6B;AAC7B,mCAUiB;AAyBjB;;;GAGG;AACH,SAAS,uBAAuB;IAC9B,MAAM,aAAa,GAAoB,EAAE,CAAC;IAC1C,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CACjC,IAAI,GAAG,CAAC,IAAA,2BAAoB,EAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAC7D,CAAC;IAEF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;QACjC,UAAI,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC3E,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/B;IAED,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACrC,UAAI,CAAC,IAAI,CACP,iFAAiF,CAClF,CAAC;QACF,OAAO,aAAa,CAAC;KACtB;IAED,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAClC,IAAI,QAAQ,KAAK,MAAM,EAAE;YACvB,aAAa,CAAC,IAAI,CAChB,IAAA,+CAAuC,EAAC,IAAA,oCAA4B,GAAE,CAAC,CACxE,CAAC;SACH;aAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;YACjC,aAAa,CAAC,IAAI,CAChB,IAAI,2CAA6B,CAAC;gBAChC,QAAQ,EAAE,IAAI,mCAAqB,EAAE;aACtC,CAAC,CACH,CAAC;SACH;aAAM,IAAI,QAAQ,KAAK,YAAY,EAAE;YACpC,aAAa,CAAC,IAAI,CAAC,IAAI,wCAAwB,EAAE,CAAC,CAAC;SACpD;aAAM;YACL,UAAI,CAAC,IAAI,CACP,6CAA6C,QAAQ,2DAA2D,CACjH,CAAC;SACH;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,OAAO;IACV,qBAAqB,CAAwB;IAC7C,qBAAqB,CAAwB;IAC7C,oBAAoB,CAAuB;IAC3C,iBAAiB,CAAoB;IAErC,SAAS,CAAW;IACpB,kBAAkB,CAA0B;IAE5C,oBAAoB,CAAU;IAE9B,eAAe,CAAsB;IACrC,eAAe,CAAkB;IACjC,cAAc,CAAiB;IAC/B,YAAY,CAAU;IACtB,cAAc,CAAiC;IAE/C,SAAS,CAAW;IAE5B;;OAEG;IACH,YAAmB,gBAA+C,EAAE;QAClE,IAAI,IAAA,wBAAiB,EAAC,mBAAmB,CAAC,EAAE;YAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,+CAA+C;YAC/C,kCAAkC;SACnC;QAED,MAAM,QAAQ,GAAG,IAAA,uBAAgB,EAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,UAAI,CAAC,SAAS,CAAC,IAAI,uBAAiB,EAAE,EAAE;gBACtC,QAAQ,EAAE,IAAA,6BAAsB,EAAC,QAAQ,CAAC;aAC3C,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QAEpC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,IAAI,IAAA,2BAAe,GAAE,CAAC;QAC7D,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC,mBAAmB,IAAI,IAAI,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;SAC9B;aAAM,IAAI,aAAa,CAAC,iBAAiB,IAAI,IAAI,EAAE;YAClD,IAAI,CAAC,kBAAkB,GAAG,aAAa,CAAC,iBAAiB,CAAC;SAC3D;aAAM,IAAI,IAAA,uBAAgB,EAAC,8BAA8B,CAAC,EAAE;YAC3D,IAAI,CAAC,kBAAkB,GAAG,IAAA,mCAA2B,GAAE,CAAC;SACzD;aAAM;YACL,IAAI,CAAC,kBAAkB,GAAG,CAAC,uBAAW,EAAE,2BAAe,EAAE,wBAAY,CAAC,CAAC;SACxE;QAED,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC;QAE9C,2EAA2E;QAC3E,IACE,aAAa,CAAC,aAAa;YAC3B,aAAa,CAAC,aAAa;YAC3B,aAAa,CAAC,cAAc,EAC5B;YACA,MAAM,oBAAoB,GAAqB,EAAE,CAAC;YAElD,IAAI,aAAa,CAAC,OAAO,EAAE;gBACzB,oBAAoB,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;aACtD;YACD,IAAI,aAAa,CAAC,UAAU,EAAE;gBAC5B,oBAAoB,CAAC,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC;aAC5D;YACD,IAAI,aAAa,CAAC,WAAW,EAAE;gBAC7B,oBAAoB,CAAC,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;aAC9D;YAED,IAAI,aAAa,CAAC,aAAa,EAAE;gBAC/B,UAAI,CAAC,IAAI,CACP,gFAAgF,CACjF,CAAC;aACH;YAED,MAAM,aAAa,GACjB,aAAa,CAAC,aAAa;gBAC3B,IAAI,mCAAkB,CAAC,aAAa,CAAC,aAAc,CAAC,CAAC;YAEvD,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,CAAC;YAEvE,IAAI,CAAC,qBAAqB,GAAG;gBAC3B,YAAY,EAAE,oBAAoB;gBAClC,cAAc;aACf,CAAC;SACH;QAED,IAAI,aAAa,CAAC,mBAAmB,EAAE;YACrC,IAAI,CAAC,qBAAqB,GAAG;gBAC3B,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;aACvD,CAAC;SACH;aAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE;YAC3C,IAAI,CAAC,qBAAqB,GAAG;gBAC3B,mBAAmB,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC;aACxD,CAAC;YACF,UAAI,CAAC,IAAI,CACP,0FAA0F,CAC3F,CAAC;SACH;aAAM;YACL,IAAI,CAAC,8BAA8B,EAAE,CAAC;SACvC;QAED,IAAI,aAAa,CAAC,aAAa,EAAE;YAC/B,IAAI,CAAC,oBAAoB,GAAG;gBAC1B,OAAO,EAAE,aAAa,CAAC,aAAa;gBACpC,KAAK,EAAE,aAAa,CAAC,KAAK;aAC3B,CAAC;SACH;aAAM,IAAI,aAAa,CAAC,YAAY,EAAE;YACrC,IAAI,CAAC,oBAAoB,GAAG;gBAC1B,OAAO,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;gBACrC,KAAK,EAAE,aAAa,CAAC,KAAK;aAC3B,CAAC;YACF,UAAI,CAAC,IAAI,CACP,8EAA8E,CAC/E,CAAC;SACH;aAAM;YACL,IAAI,CAAC,oBAAoB,GAAG;gBAC1B,OAAO,EAAE,uBAAuB,EAAE;gBAClC,KAAK,EAAE,aAAa,CAAC,KAAK;aAC3B,CAAC;SACH;QAED,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxE,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO;SACR;QAED,IAAA,0CAAwB,EAAC;YACvB,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;SACzC,CAAC,CAAC;QAEH,IAAA,2BAAmB,EAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACzD,IAAA,uBAAe,EACb,IAAI,CAAC,cAAc,EAAE,iBAAiB,KAAK,IAAI;YAC7C,CAAC,CAAC,IAAI,CAAC,8DAA8D;YACrE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,IAAI,IAAA,4BAAoB,GAAE,CAAC,CACvE,CAAC;QAEF,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,MAAM,cAAc,GAA4B;gBAC9C,SAAS,EAAE,IAAI,CAAC,kBAAkB;aACnC,CAAC;YAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAA,2BAAe,EAAC,cAAc,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,CAAC,SAAS;YACZ,IAAI,CAAC,YAAY,KAAK,SAAS;gBAC7B,CAAC,CAAC,IAAI,CAAC,SAAS;gBAChB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAClB,IAAA,kCAAsB,EAAC;oBACrB,CAAC,wCAAiB,CAAC,EAAE,IAAI,CAAC,YAAY;iBACvC,CAAC,CACH,CAAC;QAER,wDAAwD;QACxD,gEAAgE;QAChE,MAAM,iBAAiB,GAAG,IAAA,wBAAiB,EACzC,oCAAoC,CACrC,CAAC;QAEF,IACE,IAAI,CAAC,oBAAoB,EAAE,OAAO;YAClC,yEAAyE;YACzE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAC5C;YACA,MAAM,aAAa,GAAG,IAAI,2BAAa,CAAC;gBACtC,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;gBAC7C,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO;gBAC1C,iBAAiB;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YACpC,aAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;YAE9C,mGAAmG;YACnG,4GAA4G;YAC5G,4GAA4G;YAC5G,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACpD,eAAe,CAAC,gBAAgB,CAAC,aAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;aAC9D;SACF;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB;YAC/C,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc;YAC3C,CAAC,CAAC,IAAA,gCAAwB,GAAE,CAAC;QAE/B,6CAA6C;QAC7C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,mCAAkB,CAAC;gBAC5C,GAAG,IAAI,CAAC,cAAc;gBACtB,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;gBAClE,cAAc;aACf,CAAC,CAAC;YACH,WAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACrD;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,MAAM,cAAc,GAAG,IAAI,yBAAc,CAAC;gBACxC,GAAG,IAAA,sCAA8B,GAAE;gBACnC,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,mBAAmB;gBAC1D,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;aACnE,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;YAEtC,eAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;SAC9C;IACH,CAAC;IAEM,QAAQ;QACb,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;SAChD;QACD,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;SAChD;QACD,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC/C;QAED,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnB,oDAAoD;aACnD,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAClB,CAAC;IACJ,CAAC;IAEO,8BAA8B;QACpC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CACjC,IAAI,GAAG,CAAC,IAAA,2BAAoB,EAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAC1D,CAAC;QAEF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,UAAI,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YACxE,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC/B;QAED,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACrC,UAAI,CAAC,IAAI,CACP,8EAA8E,CAC/E,CAAC;YACF,OAAO;SACR;QAED,MAAM,SAAS,GAAwB,EAAE,CAAC;QAE1C,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAClC,IAAI,QAAQ,KAAK,MAAM,EAAE;gBACvB,MAAM,QAAQ,GACZ,CACE,IAAA,uBAAgB,EAAC,kCAAkC,CAAC;oBACpD,IAAA,uBAAgB,EAAC,6BAA6B,CAAC,CAChD,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC,CAAC,6CAA6C;gBAE7E,QAAQ,QAAQ,EAAE;oBAChB,KAAK,MAAM;wBACT,SAAS,CAAC,IAAI,CAAC,IAAI,yCAAmB,EAAE,CAAC,CAAC;wBAC1C,MAAM;oBACR,KAAK,WAAW;wBACd,SAAS,CAAC,IAAI,CAAC,IAAI,yCAAmB,EAAE,CAAC,CAAC;wBAC1C,MAAM;oBACR,KAAK,eAAe;wBAClB,SAAS,CAAC,IAAI,CAAC,IAAI,0CAAoB,EAAE,CAAC,CAAC;wBAC3C,MAAM;oBACR;wBACE,UAAI,CAAC,IAAI,CACP,oCAAoC,QAAQ,yBAAyB,CACtE,CAAC;wBACF,SAAS,CAAC,IAAI,CAAC,IAAI,0CAAoB,EAAE,CAAC,CAAC;iBAC9C;aACF;iBAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACjC,SAAS,CAAC,IAAI,CAAC,IAAI,mCAAwB,EAAE,CAAC,CAAC;aAChD;iBAAM;gBACL,UAAI,CAAC,IAAI,CACP,0CAA0C,QAAQ,+CAA+C,CAClG,CAAC;aACH;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,qBAAqB,GAAG;gBAC3B,mBAAmB,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBAC5C,IAAI,QAAQ,YAAY,mCAAwB,EAAE;wBAChD,OAAO,IAAI,mCAAwB,CAAC,QAAQ,CAAC,CAAC;qBAC/C;yBAAM;wBACL,OAAO,IAAA,yCAAiC,EAAC,QAAQ,CAAC,CAAC;qBACpD;gBACH,CAAC,CAAC;aACH,CAAC;SACH;IACH,CAAC;CACF;AA/SD,0BA+SC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { metrics, trace, diag, DiagConsoleLogger } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport type { Instrumentation } from '@opentelemetry/instrumentation';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type {\n Resource,\n ResourceDetectionConfig,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n defaultResource,\n detectResources,\n envDetector,\n hostDetector,\n processDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport type {\n LogRecordProcessor,\n LogRecordExporter,\n} from '@opentelemetry/sdk-logs';\nimport {\n LoggerProvider,\n ConsoleLogRecordExporter,\n SimpleLogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport { OTLPLogExporter as OTLPHttpLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { OTLPLogExporter as OTLPGrpcLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc';\nimport { OTLPLogExporter as OTLPProtoLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';\nimport { PrometheusExporter as PrometheusMetricExporter } from '@opentelemetry/exporter-prometheus';\nimport type { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';\nimport {\n MeterProvider,\n ConsoleMetricExporter,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport type { SpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport type { NodeTracerConfig } from '@opentelemetry/sdk-trace-node';\nimport { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';\nimport { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';\nimport type { NodeSDKConfiguration } from './types';\nimport {\n getBooleanFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n diagLogLevelFromString,\n} from '@opentelemetry/core';\nimport {\n getResourceDetectorsFromEnv,\n getSpanProcessorsFromEnv,\n getPropagatorFromEnv,\n setupPropagator,\n setupContextManager,\n getPeriodicExportingMetricReaderFromEnv,\n getOtlpMetricExporterFromEnv,\n getBatchLogRecordProcessorFromEnv,\n getLoggerProviderConfigFromEnv,\n} from './utils';\n\ntype TracerProviderConfig = {\n tracerConfig: NodeTracerConfig;\n spanProcessors: SpanProcessor[];\n};\n\nexport type MeterProviderConfig = {\n /**\n * Reference to the MetricReader instances by the NodeSDK\n */\n readers?: IMetricReader[];\n /**\n * List of {@link ViewOptions}s that should be passed to the MeterProvider\n */\n views?: ViewOptions[];\n};\n\nexport type LoggerProviderConfig = {\n /**\n * Reference to the LoggerRecordProcessor instance by the NodeSDK\n */\n logRecordProcessors: LogRecordProcessor[];\n};\n\n/**\n *\n * @returns MetricReader[] if appropriate environment variables are configured\n */\nfunction getMetricReadersFromEnv(): IMetricReader[] {\n const metricReaders: IMetricReader[] = [];\n const enabledExporters = Array.from(\n new Set(getStringListFromEnv('OTEL_METRICS_EXPORTER') ?? [])\n );\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_METRICS_EXPORTER is empty. Using default otlp exporter.');\n enabledExporters.push('otlp');\n }\n\n if (enabledExporters.includes('none')) {\n diag.info(\n 'OTEL_METRICS_EXPORTER contains \"none\". Metric provider will not be initialized.'\n );\n return metricReaders;\n }\n\n enabledExporters.forEach(exporter => {\n if (exporter === 'otlp') {\n metricReaders.push(\n getPeriodicExportingMetricReaderFromEnv(getOtlpMetricExporterFromEnv())\n );\n } else if (exporter === 'console') {\n metricReaders.push(\n new PeriodicExportingMetricReader({\n exporter: new ConsoleMetricExporter(),\n })\n );\n } else if (exporter === 'prometheus') {\n metricReaders.push(new PrometheusMetricExporter());\n } else {\n diag.warn(\n `Unsupported OTEL_METRICS_EXPORTER value: \"${exporter}\". Supported values are: otlp, console, prometheus, none.`\n );\n }\n });\n\n return metricReaders;\n}\n\n/**\n * A setup helper for the OpenTelemetry SDKs (logs, metrics, traces).\n * <p> After successful setup using {@link NodeSDK#start()}, use `@opentelemetry/api` to obtain the registered components.\n * <p> Use the shutdown handler {@link NodeSDK#shutdown()} to ensure your telemetry is exported before the process exits.\n *\n * @example <caption> Register SDK by using environment variables </caption>\n * const nodeSdk = new NodeSDK(); // providing no options uses OTEL_* environment variables for SDK setup.\n * nodeSdk.start(); // registers all configured SDK components\n * @example <caption> Override environment variable config with your own components </caption>\n * const nodeSdk = new NodeSDK({\n * // override the list of metric reader with your own options and ignore environment variable config\n * // explore the docs of other options to learn more!\n * metricReaders: [ new PeriodicExportingMetricReader({\n * exporter: new OTLPMetricsExporter()\n * })]\n * });\n * nodeSdk.start(); // registers all configured SDK components\n */\nexport class NodeSDK {\n private _tracerProviderConfig?: TracerProviderConfig;\n private _loggerProviderConfig?: LoggerProviderConfig;\n private _meterProviderConfig?: MeterProviderConfig;\n private _instrumentations: Instrumentation[];\n\n private _resource: Resource;\n private _resourceDetectors: Array<ResourceDetector>;\n\n private _autoDetectResources: boolean;\n\n private _tracerProvider?: NodeTracerProvider;\n private _loggerProvider?: LoggerProvider;\n private _meterProvider?: MeterProvider;\n private _serviceName?: string;\n private _configuration?: Partial<NodeSDKConfiguration>;\n\n private _disabled?: boolean;\n\n /**\n * Create a new NodeJS SDK instance\n */\n public constructor(configuration: Partial<NodeSDKConfiguration> = {}) {\n if (getBooleanFromEnv('OTEL_SDK_DISABLED')) {\n this._disabled = true;\n // Functions with possible side-effects are set\n // to no-op via the _disabled flag\n }\n\n const logLevel = getStringFromEnv('OTEL_LOG_LEVEL');\n if (logLevel != null) {\n diag.setLogger(new DiagConsoleLogger(), {\n logLevel: diagLogLevelFromString(logLevel),\n });\n }\n\n this._configuration = configuration;\n\n this._resource = configuration.resource ?? defaultResource();\n this._autoDetectResources = configuration.autoDetectResources ?? true;\n if (!this._autoDetectResources) {\n this._resourceDetectors = [];\n } else if (configuration.resourceDetectors != null) {\n this._resourceDetectors = configuration.resourceDetectors;\n } else if (getStringFromEnv('OTEL_NODE_RESOURCE_DETECTORS')) {\n this._resourceDetectors = getResourceDetectorsFromEnv();\n } else {\n this._resourceDetectors = [envDetector, processDetector, hostDetector];\n }\n\n this._serviceName = configuration.serviceName;\n\n // If a tracer provider can be created from manual configuration, create it\n if (\n configuration.traceExporter ||\n configuration.spanProcessor ||\n configuration.spanProcessors\n ) {\n const tracerProviderConfig: NodeTracerConfig = {};\n\n if (configuration.sampler) {\n tracerProviderConfig.sampler = configuration.sampler;\n }\n if (configuration.spanLimits) {\n tracerProviderConfig.spanLimits = configuration.spanLimits;\n }\n if (configuration.idGenerator) {\n tracerProviderConfig.idGenerator = configuration.idGenerator;\n }\n\n if (configuration.spanProcessor) {\n diag.warn(\n \"The 'spanProcessor' option is deprecated. Please use 'spanProcessors' instead.\"\n );\n }\n\n const spanProcessor =\n configuration.spanProcessor ??\n new BatchSpanProcessor(configuration.traceExporter!);\n\n const spanProcessors = configuration.spanProcessors ?? [spanProcessor];\n\n this._tracerProviderConfig = {\n tracerConfig: tracerProviderConfig,\n spanProcessors,\n };\n }\n\n if (configuration.logRecordProcessors) {\n this._loggerProviderConfig = {\n logRecordProcessors: configuration.logRecordProcessors,\n };\n } else if (configuration.logRecordProcessor) {\n this._loggerProviderConfig = {\n logRecordProcessors: [configuration.logRecordProcessor],\n };\n diag.warn(\n \"The 'logRecordProcessor' option is deprecated. Please use 'logRecordProcessors' instead.\"\n );\n } else {\n this.configureLoggerProviderFromEnv();\n }\n\n if (configuration.metricReaders) {\n this._meterProviderConfig = {\n readers: configuration.metricReaders,\n views: configuration.views,\n };\n } else if (configuration.metricReader) {\n this._meterProviderConfig = {\n readers: [configuration.metricReader],\n views: configuration.views,\n };\n diag.warn(\n \"The 'metricReader' option is deprecated. Please use 'metricReaders' instead.\"\n );\n } else {\n this._meterProviderConfig = {\n readers: getMetricReadersFromEnv(),\n views: configuration.views,\n };\n }\n\n this._instrumentations = configuration.instrumentations?.flat() ?? [];\n }\n\n /**\n * Call this method to construct SDK components and register them with the OpenTelemetry API.\n */\n public start(): void {\n if (this._disabled) {\n return;\n }\n\n registerInstrumentations({\n instrumentations: this._instrumentations,\n });\n\n setupContextManager(this._configuration?.contextManager);\n setupPropagator(\n this._configuration?.textMapPropagator === null\n ? null // null means don't set, so we cannot fall back to env config.\n : (this._configuration?.textMapPropagator ?? getPropagatorFromEnv())\n );\n\n if (this._autoDetectResources) {\n const internalConfig: ResourceDetectionConfig = {\n detectors: this._resourceDetectors,\n };\n\n this._resource = this._resource.merge(detectResources(internalConfig));\n }\n\n this._resource =\n this._serviceName === undefined\n ? this._resource\n : this._resource.merge(\n resourceFromAttributes({\n [ATTR_SERVICE_NAME]: this._serviceName,\n })\n );\n\n // While SDK metrics are unstable, we require an opt-in.\n // https://opentelemetry.io/docs/specs/semconv/otel/sdk-metrics/\n const sdkMetricsEnabled = getBooleanFromEnv(\n 'OTEL_NODE_EXPERIMENTAL_SDK_METRICS'\n );\n\n if (\n this._meterProviderConfig?.readers &&\n // only register if there is a reader, otherwise we waste compute/memory.\n this._meterProviderConfig.readers.length > 0\n ) {\n const meterProvider = new MeterProvider({\n resource: this._resource,\n views: this._meterProviderConfig?.views ?? [],\n readers: this._meterProviderConfig.readers,\n sdkMetricsEnabled,\n });\n\n this._meterProvider = meterProvider;\n metrics.setGlobalMeterProvider(meterProvider);\n\n // TODO: This is a workaround to fix https://github.com/open-telemetry/opentelemetry-js/issues/3609\n // If the MeterProvider is not yet registered when instrumentations are registered, all metrics are dropped.\n // This code is obsolete once https://github.com/open-telemetry/opentelemetry-js/issues/3622 is implemented.\n for (const instrumentation of this._instrumentations) {\n instrumentation.setMeterProvider(metrics.getMeterProvider());\n }\n }\n\n const spanProcessors = this._tracerProviderConfig\n ? this._tracerProviderConfig.spanProcessors\n : getSpanProcessorsFromEnv();\n\n // Only register if there is a span processor\n if (spanProcessors.length > 0) {\n this._tracerProvider = new NodeTracerProvider({\n ...this._configuration,\n resource: this._resource,\n meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,\n spanProcessors,\n });\n trace.setGlobalTracerProvider(this._tracerProvider);\n }\n\n if (this._loggerProviderConfig) {\n const loggerProvider = new LoggerProvider({\n ...getLoggerProviderConfigFromEnv(),\n resource: this._resource,\n processors: this._loggerProviderConfig.logRecordProcessors,\n meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,\n });\n\n this._loggerProvider = loggerProvider;\n\n logs.setGlobalLoggerProvider(loggerProvider);\n }\n }\n\n public shutdown(): Promise<void> {\n const promises: Promise<unknown>[] = [];\n if (this._tracerProvider) {\n promises.push(this._tracerProvider.shutdown());\n }\n if (this._loggerProvider) {\n promises.push(this._loggerProvider.shutdown());\n }\n if (this._meterProvider) {\n promises.push(this._meterProvider.shutdown());\n }\n\n return (\n Promise.all(promises)\n // return void instead of the array from Promise.all\n .then(() => {})\n );\n }\n\n private configureLoggerProviderFromEnv(): void {\n const enabledExporters = Array.from(\n new Set(getStringListFromEnv('OTEL_LOGS_EXPORTER') ?? [])\n );\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_LOGS_EXPORTER is empty. Using default otlp exporter.');\n enabledExporters.push('otlp');\n }\n\n if (enabledExporters.includes('none')) {\n diag.info(\n 'OTEL_LOGS_EXPORTER contains \"none\". Logger provider will not be initialized.'\n );\n return;\n }\n\n const exporters: LogRecordExporter[] = [];\n\n enabledExporters.forEach(exporter => {\n if (exporter === 'otlp') {\n const protocol =\n (\n getStringFromEnv('OTEL_EXPORTER_OTLP_LOGS_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL')\n )?.trim() || 'http/protobuf'; // Using || to also fall back on empty string\n\n switch (protocol) {\n case 'grpc':\n exporters.push(new OTLPGrpcLogExporter());\n break;\n case 'http/json':\n exporters.push(new OTLPHttpLogExporter());\n break;\n case 'http/protobuf':\n exporters.push(new OTLPProtoLogExporter());\n break;\n default:\n diag.warn(\n `Unsupported OTLP logs protocol: \"${protocol}\". Using http/protobuf.`\n );\n exporters.push(new OTLPProtoLogExporter());\n }\n } else if (exporter === 'console') {\n exporters.push(new ConsoleLogRecordExporter());\n } else {\n diag.warn(\n `Unsupported OTEL_LOGS_EXPORTER value: \"${exporter}\". Supported values are: otlp, console, none.`\n );\n }\n });\n\n if (exporters.length > 0) {\n this._loggerProviderConfig = {\n logRecordProcessors: exporters.map(exporter => {\n if (exporter instanceof ConsoleLogRecordExporter) {\n return new SimpleLogRecordProcessor(exporter);\n } else {\n return getBatchLogRecordProcessorFromEnv(exporter);\n }\n }),\n };\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { metrics, trace, diag, DiagConsoleLogger } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport type { Instrumentation } from '@opentelemetry/instrumentation';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type {\n Resource,\n ResourceDetectionConfig,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n defaultResource,\n detectResources,\n envDetector,\n hostDetector,\n processDetector,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport type {\n LogRecordProcessor,\n LogRecordExporter,\n} from '@opentelemetry/sdk-logs';\nimport {\n LoggerProvider,\n ConsoleLogRecordExporter,\n SimpleLogRecordProcessor,\n} from '@opentelemetry/sdk-logs';\nimport { OTLPLogExporter as OTLPHttpLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { OTLPLogExporter as OTLPGrpcLogExporter } from '@opentelemetry/exporter-logs-otlp-grpc';\nimport { OTLPLogExporter as OTLPProtoLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';\nimport { PrometheusExporter as PrometheusMetricExporter } from '@opentelemetry/exporter-prometheus';\nimport type { IMetricReader, ViewOptions } from '@opentelemetry/sdk-metrics';\nimport {\n MeterProvider,\n ConsoleMetricExporter,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport type { SpanProcessor } from '@opentelemetry/sdk-trace';\nimport { TracerProvider } from '@opentelemetry/sdk-trace';\nimport { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';\nimport type { NodeSDKConfiguration } from './types';\nimport {\n getBooleanFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n diagLogLevelFromString,\n} from '@opentelemetry/core';\nimport {\n getResourceDetectorsFromEnv,\n getSpanProcessorsFromEnv,\n getPropagatorFromEnv,\n setupPropagator,\n setupContextManager,\n getPeriodicExportingMetricReaderFromEnv,\n getOtlpMetricExporterFromEnv,\n getBatchLogRecordProcessorFromEnv,\n getLoggerProviderConfigFromEnv,\n} from './utils';\nimport {\n createBatchSpanProcessorFromEnv,\n createSamplerFromEnv,\n createSpanLimitsFromEnv,\n} from './create-from-env';\n\nexport type MeterProviderConfig = {\n /**\n * Reference to the MetricReader instances by the NodeSDK\n */\n readers?: IMetricReader[];\n /**\n * List of {@link ViewOptions}s that should be passed to the MeterProvider\n */\n views?: ViewOptions[];\n};\n\nexport type LoggerProviderConfig = {\n /**\n * Reference to the LoggerRecordProcessor instance by the NodeSDK\n */\n logRecordProcessors: LogRecordProcessor[];\n};\n\n/**\n *\n * @returns MetricReader[] if appropriate environment variables are configured\n */\nfunction getMetricReadersFromEnv(): IMetricReader[] {\n const metricReaders: IMetricReader[] = [];\n const enabledExporters = Array.from(\n new Set(getStringListFromEnv('OTEL_METRICS_EXPORTER') ?? [])\n );\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_METRICS_EXPORTER is empty. Using default otlp exporter.');\n enabledExporters.push('otlp');\n }\n\n if (enabledExporters.includes('none')) {\n diag.info(\n 'OTEL_METRICS_EXPORTER contains \"none\". Metric provider will not be initialized.'\n );\n return metricReaders;\n }\n\n enabledExporters.forEach(exporter => {\n if (exporter === 'otlp') {\n metricReaders.push(\n getPeriodicExportingMetricReaderFromEnv(getOtlpMetricExporterFromEnv())\n );\n } else if (exporter === 'console') {\n metricReaders.push(\n new PeriodicExportingMetricReader({\n exporter: new ConsoleMetricExporter(),\n })\n );\n } else if (exporter === 'prometheus') {\n metricReaders.push(new PrometheusMetricExporter());\n } else {\n diag.warn(\n `Unsupported OTEL_METRICS_EXPORTER value: \"${exporter}\". Supported values are: otlp, console, prometheus, none.`\n );\n }\n });\n\n return metricReaders;\n}\n\n/**\n * A setup helper for the OpenTelemetry SDKs (logs, metrics, traces).\n * <p> After successful setup using {@link NodeSDK#start()}, use `@opentelemetry/api` to obtain the registered components.\n * <p> Use the shutdown handler {@link NodeSDK#shutdown()} to ensure your telemetry is exported before the process exits.\n *\n * @example <caption> Register SDK by using environment variables </caption>\n * const nodeSdk = new NodeSDK(); // providing no options uses OTEL_* environment variables for SDK setup.\n * nodeSdk.start(); // registers all configured SDK components\n * @example <caption> Override environment variable config with your own components </caption>\n * const nodeSdk = new NodeSDK({\n * // override the list of metric reader with your own options and ignore environment variable config\n * // explore the docs of other options to learn more!\n * metricReaders: [ new PeriodicExportingMetricReader({\n * exporter: new OTLPMetricsExporter()\n * })]\n * });\n * nodeSdk.start(); // registers all configured SDK components\n */\nexport class NodeSDK {\n private _loggerProviderConfig?: LoggerProviderConfig;\n private _meterProviderConfig?: MeterProviderConfig;\n private _instrumentations: Instrumentation[];\n\n private _resource: Resource;\n private _resourceDetectors: Array<ResourceDetector>;\n\n private _autoDetectResources: boolean;\n\n private _tracerProvider?: TracerProvider;\n private _loggerProvider?: LoggerProvider;\n private _meterProvider?: MeterProvider;\n private _serviceName?: string;\n private _configuration?: Partial<NodeSDKConfiguration>;\n\n private _disabled?: boolean;\n\n /**\n * Create a new NodeJS SDK instance\n */\n public constructor(configuration: Partial<NodeSDKConfiguration> = {}) {\n if (getBooleanFromEnv('OTEL_SDK_DISABLED')) {\n this._disabled = true;\n // Functions with possible side-effects are set\n // to no-op via the _disabled flag\n }\n\n const logLevel = getStringFromEnv('OTEL_LOG_LEVEL');\n if (logLevel != null) {\n diag.setLogger(new DiagConsoleLogger(), {\n logLevel: diagLogLevelFromString(logLevel),\n });\n }\n\n this._configuration = configuration;\n\n this._resource = configuration.resource ?? defaultResource();\n this._autoDetectResources = configuration.autoDetectResources ?? true;\n if (!this._autoDetectResources) {\n this._resourceDetectors = [];\n } else if (configuration.resourceDetectors != null) {\n this._resourceDetectors = configuration.resourceDetectors;\n } else if (getStringFromEnv('OTEL_NODE_RESOURCE_DETECTORS')) {\n this._resourceDetectors = getResourceDetectorsFromEnv();\n } else {\n this._resourceDetectors = [envDetector, processDetector, hostDetector];\n }\n\n this._serviceName = configuration.serviceName;\n\n if (configuration.spanProcessor) {\n diag.warn(\n \"The 'spanProcessor' option is deprecated. Please use 'spanProcessors' instead.\"\n );\n }\n\n if (configuration.logRecordProcessors) {\n this._loggerProviderConfig = {\n logRecordProcessors: configuration.logRecordProcessors,\n };\n } else if (configuration.logRecordProcessor) {\n this._loggerProviderConfig = {\n logRecordProcessors: [configuration.logRecordProcessor],\n };\n diag.warn(\n \"The 'logRecordProcessor' option is deprecated. Please use 'logRecordProcessors' instead.\"\n );\n } else {\n this.configureLoggerProviderFromEnv();\n }\n\n if (configuration.metricReaders) {\n this._meterProviderConfig = {\n readers: configuration.metricReaders,\n views: configuration.views,\n };\n } else if (configuration.metricReader) {\n this._meterProviderConfig = {\n readers: [configuration.metricReader],\n views: configuration.views,\n };\n diag.warn(\n \"The 'metricReader' option is deprecated. Please use 'metricReaders' instead.\"\n );\n } else {\n this._meterProviderConfig = {\n readers: getMetricReadersFromEnv(),\n views: configuration.views,\n };\n }\n\n this._instrumentations = configuration.instrumentations?.flat() ?? [];\n }\n\n /**\n * Call this method to construct SDK components and register them with the OpenTelemetry API.\n */\n public start(): void {\n if (this._disabled) {\n return;\n }\n\n registerInstrumentations({\n instrumentations: this._instrumentations,\n });\n\n setupContextManager(this._configuration?.contextManager);\n setupPropagator(\n this._configuration?.textMapPropagator === null\n ? null // null means don't set, so we cannot fall back to env config.\n : (this._configuration?.textMapPropagator ?? getPropagatorFromEnv())\n );\n\n if (this._autoDetectResources) {\n const internalConfig: ResourceDetectionConfig = {\n detectors: this._resourceDetectors,\n };\n\n this._resource = this._resource.merge(detectResources(internalConfig));\n }\n\n this._resource =\n this._serviceName === undefined\n ? this._resource\n : this._resource.merge(\n resourceFromAttributes({\n [ATTR_SERVICE_NAME]: this._serviceName,\n })\n );\n\n // While SDK metrics are unstable, we require an opt-in.\n // https://opentelemetry.io/docs/specs/semconv/otel/sdk-metrics/\n const sdkMetricsEnabled = getBooleanFromEnv(\n 'OTEL_NODE_EXPERIMENTAL_SDK_METRICS'\n );\n\n if (\n this._meterProviderConfig?.readers &&\n // only register if there is a reader, otherwise we waste compute/memory.\n this._meterProviderConfig.readers.length > 0\n ) {\n const meterProvider = new MeterProvider({\n resource: this._resource,\n views: this._meterProviderConfig?.views ?? [],\n readers: this._meterProviderConfig.readers,\n sdkMetricsEnabled,\n });\n\n this._meterProvider = meterProvider;\n metrics.setGlobalMeterProvider(meterProvider);\n\n // TODO: This is a workaround to fix https://github.com/open-telemetry/opentelemetry-js/issues/3609\n // If the MeterProvider is not yet registered when instrumentations are registered, all metrics are dropped.\n // This code is obsolete once https://github.com/open-telemetry/opentelemetry-js/issues/3622 is implemented.\n for (const instrumentation of this._instrumentations) {\n instrumentation.setMeterProvider(metrics.getMeterProvider());\n }\n }\n\n // Determine `spanProcessors` from multiple possible options.\n let spanProcessors: SpanProcessor[];\n if (this._configuration?.spanProcessors) {\n spanProcessors = this._configuration.spanProcessors;\n } else if (this._configuration?.spanProcessor) {\n spanProcessors = [this._configuration.spanProcessor];\n } else if (this._configuration?.traceExporter) {\n spanProcessors = [\n createBatchSpanProcessorFromEnv(\n this._configuration.traceExporter!,\n sdkMetricsEnabled ? this._meterProvider : undefined\n ),\n ];\n } else {\n spanProcessors = getSpanProcessorsFromEnv(\n sdkMetricsEnabled ? this._meterProvider : undefined\n );\n }\n\n // Only register if there is a span processor\n if (spanProcessors.length > 0) {\n this._tracerProvider = new TracerProvider({\n sampler: this._configuration?.sampler ?? createSamplerFromEnv(),\n spanLimits: {\n ...createSpanLimitsFromEnv(),\n ...this._configuration?.spanLimits,\n },\n resource: this._resource,\n meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,\n idGenerator: this._configuration?.idGenerator,\n spanProcessors,\n });\n trace.setGlobalTracerProvider(this._tracerProvider);\n }\n\n if (this._loggerProviderConfig) {\n const loggerProvider = new LoggerProvider({\n ...getLoggerProviderConfigFromEnv(),\n resource: this._resource,\n processors: this._loggerProviderConfig.logRecordProcessors,\n meterProvider: sdkMetricsEnabled ? this._meterProvider : undefined,\n });\n\n this._loggerProvider = loggerProvider;\n\n logs.setGlobalLoggerProvider(loggerProvider);\n }\n }\n\n public shutdown(): Promise<void> {\n const promises: Promise<unknown>[] = [];\n if (this._tracerProvider) {\n promises.push(this._tracerProvider.shutdown());\n }\n if (this._loggerProvider) {\n promises.push(this._loggerProvider.shutdown());\n }\n if (this._meterProvider) {\n promises.push(this._meterProvider.shutdown());\n }\n\n return (\n Promise.all(promises)\n // return void instead of the array from Promise.all\n .then(() => {})\n );\n }\n\n private configureLoggerProviderFromEnv(): void {\n const enabledExporters = Array.from(\n new Set(getStringListFromEnv('OTEL_LOGS_EXPORTER') ?? [])\n );\n\n if (enabledExporters.length === 0) {\n diag.debug('OTEL_LOGS_EXPORTER is empty. Using default otlp exporter.');\n enabledExporters.push('otlp');\n }\n\n if (enabledExporters.includes('none')) {\n diag.info(\n 'OTEL_LOGS_EXPORTER contains \"none\". Logger provider will not be initialized.'\n );\n return;\n }\n\n const exporters: LogRecordExporter[] = [];\n\n enabledExporters.forEach(exporter => {\n if (exporter === 'otlp') {\n const protocol =\n (\n getStringFromEnv('OTEL_EXPORTER_OTLP_LOGS_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL')\n )?.trim() || 'http/protobuf'; // Using || to also fall back on empty string\n\n switch (protocol) {\n case 'grpc':\n exporters.push(new OTLPGrpcLogExporter());\n break;\n case 'http/json':\n exporters.push(new OTLPHttpLogExporter());\n break;\n case 'http/protobuf':\n exporters.push(new OTLPProtoLogExporter());\n break;\n default:\n diag.warn(\n `Unsupported OTLP logs protocol: \"${protocol}\". Using http/protobuf.`\n );\n exporters.push(new OTLPProtoLogExporter());\n }\n } else if (exporter === 'console') {\n exporters.push(new ConsoleLogRecordExporter());\n } else {\n diag.warn(\n `Unsupported OTEL_LOGS_EXPORTER value: \"${exporter}\". Supported values are: otlp, console, none.`\n );\n }\n });\n\n if (exporters.length > 0) {\n this._loggerProviderConfig = {\n logRecordProcessors: exporters.map(exporter => {\n if (exporter instanceof ConsoleLogRecordExporter) {\n return new SimpleLogRecordProcessor({ exporter });\n } else {\n return getBatchLogRecordProcessorFromEnv(exporter);\n }\n }),\n };\n }\n }\n}\n"]}
|