@opentelemetry/sdk-node 0.220.0 → 0.221.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/build/src/create-from-config.d.ts +8 -5
- package/build/src/create-from-config.js +182 -1
- package/build/src/create-from-config.js.map +1 -1
- package/build/src/sdk.js +9 -6
- package/build/src/sdk.js.map +1 -1
- package/build/src/start.js +1 -1
- package/build/src/start.js.map +1 -1
- package/build/src/utils.d.ts +12 -7
- package/build/src/utils.js +20 -145
- 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 -29
|
@@ -1,8 +1,11 @@
|
|
|
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
1
|
import type { SpanLimits } from '@opentelemetry/sdk-trace';
|
|
2
|
+
import type { Resource } from '@opentelemetry/resources';
|
|
3
|
+
import type { AttributeLimitsConfigModel, LoggerProviderConfigModel, LogRecordExporterConfigModel, LogRecordLimitsConfigModel, LogRecordProcessorConfigModel, SpanLimitsConfigModel } from '@opentelemetry/configuration';
|
|
4
|
+
import type { LogRecordExporter, LogRecordProcessor, LogRecordLimits } from '@opentelemetry/sdk-logs';
|
|
5
|
+
import { LoggerProvider } from '@opentelemetry/sdk-logs';
|
|
6
|
+
export declare function createLogRecordLimitsFromConfig(limits?: LogRecordLimitsConfigModel, attribute_limits?: AttributeLimitsConfigModel): LogRecordLimits | undefined;
|
|
7
|
+
export declare function createLogRecordExporterFromConfig(exporter: LogRecordExporterConfigModel): LogRecordExporter;
|
|
8
|
+
export declare function createLogRecordProcessorFromConfig(processor: LogRecordProcessorConfigModel): LogRecordProcessor;
|
|
9
|
+
export declare function createLoggerProviderFromConfig(resource: Resource, logger_provider: LoggerProviderConfigModel, attribute_limits?: AttributeLimitsConfigModel): LoggerProvider;
|
|
7
10
|
export declare function createSpanLimitsFromConfig(limits?: SpanLimitsConfigModel, attribute_limits?: AttributeLimitsConfigModel): SpanLimits | undefined;
|
|
8
11
|
//# sourceMappingURL=create-from-config.d.ts.map
|
|
@@ -4,7 +4,188 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.createSpanLimitsFromConfig = void 0;
|
|
7
|
+
exports.createSpanLimitsFromConfig = exports.createLoggerProviderFromConfig = exports.createLogRecordProcessorFromConfig = exports.createLogRecordExporterFromConfig = exports.createLogRecordLimitsFromConfig = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Create SDK components from parsed declarative config.
|
|
10
|
+
* https://opentelemetry.io/docs/specs/otel/configuration/sdk/#create
|
|
11
|
+
*
|
|
12
|
+
* Dev Notes:
|
|
13
|
+
* This file exports `create<SDK Thing>FromConfig(...)` functions intended to
|
|
14
|
+
* be used by the "create" step of `startNodeSDK()`.
|
|
15
|
+
*/
|
|
16
|
+
const api_1 = require("@opentelemetry/api");
|
|
17
|
+
const exporter_logs_otlp_http_1 = require("@opentelemetry/exporter-logs-otlp-http");
|
|
18
|
+
const exporter_logs_otlp_grpc_1 = require("@opentelemetry/exporter-logs-otlp-grpc");
|
|
19
|
+
const exporter_logs_otlp_proto_1 = require("@opentelemetry/exporter-logs-otlp-proto");
|
|
20
|
+
const otlp_exporter_base_1 = require("@opentelemetry/otlp-exporter-base");
|
|
21
|
+
const sdk_logs_1 = require("@opentelemetry/sdk-logs");
|
|
22
|
+
const utils_1 = require("./utils");
|
|
23
|
+
// ---- internal utilities
|
|
24
|
+
/**
|
|
25
|
+
* Warn if some props from a declarative config object have not been handled.
|
|
26
|
+
*
|
|
27
|
+
* This is intended to be used by `create*FromConfig()` functions. It is a low
|
|
28
|
+
* tech mechanism to add awareness when a given valid config is not being
|
|
29
|
+
* completely handled. This could help when properties are added to the
|
|
30
|
+
* configuration schema. (A higher tech mechanism that wraps the parsed
|
|
31
|
+
* configuration during `create()` and watches for untouched properties
|
|
32
|
+
* might be nice.)
|
|
33
|
+
*/
|
|
34
|
+
function checkConfigUse(name, props, handledProps) {
|
|
35
|
+
if (!props)
|
|
36
|
+
return;
|
|
37
|
+
// Dev note: I'd use Set#difference, but that requires Node.js v22.
|
|
38
|
+
const unhandledProps = Object.keys(props).filter(k => !handledProps.includes(k));
|
|
39
|
+
if (unhandledProps.length > 0) {
|
|
40
|
+
api_1.diag.warn(`Config warning: some specified ${name} configuration properties were not handled by SDK setup: ${JSON.stringify(unhandledProps)}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Return the single non-undefined entry in the given config object, or throw.
|
|
45
|
+
*
|
|
46
|
+
* It is common for Declarative Configuration to have config objects with
|
|
47
|
+
* a single entry, e.g.
|
|
48
|
+
*
|
|
49
|
+
* "LogRecordProcessor": {
|
|
50
|
+
* "type": "object",
|
|
51
|
+
* "additionalProperties": {
|
|
52
|
+
* "type": [
|
|
53
|
+
* "object",
|
|
54
|
+
* "null"
|
|
55
|
+
* ]
|
|
56
|
+
* },
|
|
57
|
+
* "minProperties": 1,
|
|
58
|
+
* "maxProperties": 1,
|
|
59
|
+
*
|
|
60
|
+
* The TypeScript types cannot express the minProperties/maxProperties from the
|
|
61
|
+
* JSON schema. We guard against that here.
|
|
62
|
+
*/
|
|
63
|
+
function mustSingleEntry(configObj, configTypeName) {
|
|
64
|
+
const entries = Object.entries(configObj).filter(([_name, properties]) => properties !== undefined);
|
|
65
|
+
if (entries.length !== 1) {
|
|
66
|
+
const entryNames = entries.map(e => e[0]);
|
|
67
|
+
throw Error(`invalid ${configTypeName} in configuration: must have exactly one entry: entries=${JSON.stringify(entryNames)}`);
|
|
68
|
+
}
|
|
69
|
+
return entries[0];
|
|
70
|
+
}
|
|
71
|
+
// ---- create<SDKThing>FromConfig functions
|
|
72
|
+
function createLogRecordLimitsFromConfig(limits, attribute_limits) {
|
|
73
|
+
if (!limits && !attribute_limits) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
attributeValueLengthLimit: limits?.attribute_value_length_limit ??
|
|
78
|
+
attribute_limits?.attribute_value_length_limit ??
|
|
79
|
+
undefined,
|
|
80
|
+
attributeCountLimit: limits?.attribute_count_limit ??
|
|
81
|
+
attribute_limits?.attribute_count_limit ??
|
|
82
|
+
undefined,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
exports.createLogRecordLimitsFromConfig = createLogRecordLimitsFromConfig;
|
|
86
|
+
function createLogRecordExporterFromConfig(exporter) {
|
|
87
|
+
const [name, properties] = mustSingleEntry(exporter, 'LogRecordExporter');
|
|
88
|
+
switch (name) {
|
|
89
|
+
case 'otlp_http': {
|
|
90
|
+
checkConfigUse('LogRecordExporter', properties, [
|
|
91
|
+
'compression',
|
|
92
|
+
'endpoint',
|
|
93
|
+
'headers',
|
|
94
|
+
'timeout',
|
|
95
|
+
'tls',
|
|
96
|
+
'encoding',
|
|
97
|
+
]);
|
|
98
|
+
const props = properties;
|
|
99
|
+
const commonOpts = {
|
|
100
|
+
compression: props?.compression === 'gzip'
|
|
101
|
+
? otlp_exporter_base_1.CompressionAlgorithm.GZIP
|
|
102
|
+
: otlp_exporter_base_1.CompressionAlgorithm.NONE,
|
|
103
|
+
url: props?.endpoint ?? undefined,
|
|
104
|
+
headers: (0, utils_1.getHeadersFromConfiguration)(props?.headers),
|
|
105
|
+
timeoutMillis: (0, utils_1.validateExporterTimeout)(props?.timeout),
|
|
106
|
+
httpAgentOptions: (0, utils_1.getHttpAgentOptionsFromTls)(props?.tls),
|
|
107
|
+
};
|
|
108
|
+
const encoding = props?.encoding ?? 'protobuf';
|
|
109
|
+
switch (encoding) {
|
|
110
|
+
case 'json':
|
|
111
|
+
return new exporter_logs_otlp_http_1.OTLPLogExporter(commonOpts);
|
|
112
|
+
case 'protobuf':
|
|
113
|
+
return new exporter_logs_otlp_proto_1.OTLPLogExporter(commonOpts);
|
|
114
|
+
default:
|
|
115
|
+
throw new Error(`unknown OtlpHttpExporter encoding in configuration: "${encoding}"`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
case 'otlp_grpc': {
|
|
119
|
+
checkConfigUse('LogRecordExporter', properties, [
|
|
120
|
+
'compression',
|
|
121
|
+
'endpoint',
|
|
122
|
+
'timeout',
|
|
123
|
+
'tls',
|
|
124
|
+
'headers',
|
|
125
|
+
]);
|
|
126
|
+
const props = properties;
|
|
127
|
+
return new exporter_logs_otlp_grpc_1.OTLPLogExporter({
|
|
128
|
+
compression: props?.compression === 'gzip'
|
|
129
|
+
? otlp_exporter_base_1.CompressionAlgorithm.GZIP
|
|
130
|
+
: otlp_exporter_base_1.CompressionAlgorithm.NONE,
|
|
131
|
+
url: props?.endpoint ?? undefined,
|
|
132
|
+
timeoutMillis: (0, utils_1.validateExporterTimeout)(props?.timeout),
|
|
133
|
+
credentials: (0, utils_1.getGrpcCredentialsFromTls)(props?.tls),
|
|
134
|
+
metadata: (0, utils_1.getGrpcMetadataFromHeaders)(props?.headers),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
case 'console':
|
|
138
|
+
return new sdk_logs_1.ConsoleLogRecordExporter();
|
|
139
|
+
default:
|
|
140
|
+
throw new Error(`unknown LogRecordExporter name in configuration: "${name}"`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.createLogRecordExporterFromConfig = createLogRecordExporterFromConfig;
|
|
144
|
+
function createLogRecordProcessorFromConfig(processor) {
|
|
145
|
+
const [name, properties] = mustSingleEntry(processor, 'LogRecordProcessor');
|
|
146
|
+
switch (name) {
|
|
147
|
+
case 'batch': {
|
|
148
|
+
checkConfigUse('BatchLogRecordProcessor', properties, [
|
|
149
|
+
'exporter',
|
|
150
|
+
'max_queue_size',
|
|
151
|
+
'max_export_batch_size',
|
|
152
|
+
'schedule_delay',
|
|
153
|
+
'export_timeout',
|
|
154
|
+
]);
|
|
155
|
+
const props = properties;
|
|
156
|
+
const exporter = createLogRecordExporterFromConfig(props.exporter);
|
|
157
|
+
return new sdk_logs_1.BatchLogRecordProcessor({
|
|
158
|
+
exporter,
|
|
159
|
+
maxQueueSize: props.max_queue_size ?? undefined,
|
|
160
|
+
maxExportBatchSize: props.max_export_batch_size ?? undefined,
|
|
161
|
+
scheduledDelayMillis: props.schedule_delay ?? undefined,
|
|
162
|
+
exportTimeoutMillis: props.export_timeout ?? undefined,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
case 'simple': {
|
|
166
|
+
const props = properties;
|
|
167
|
+
const exporter = createLogRecordExporterFromConfig(props.exporter);
|
|
168
|
+
return new sdk_logs_1.SimpleLogRecordProcessor({ exporter });
|
|
169
|
+
}
|
|
170
|
+
default:
|
|
171
|
+
throw new Error(`unknown LogRecordProcessor name: "${name}"`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.createLogRecordProcessorFromConfig = createLogRecordProcessorFromConfig;
|
|
175
|
+
function createLoggerProviderFromConfig(resource, logger_provider, attribute_limits) {
|
|
176
|
+
const processors = logger_provider.processors.map(p => createLogRecordProcessorFromConfig(p));
|
|
177
|
+
const logRecordLimits = createLogRecordLimitsFromConfig(logger_provider.limits, attribute_limits);
|
|
178
|
+
checkConfigUse('LoggerProvider', logger_provider, ['processors', 'limits']);
|
|
179
|
+
return new sdk_logs_1.LoggerProvider({
|
|
180
|
+
resource,
|
|
181
|
+
processors,
|
|
182
|
+
logRecordLimits,
|
|
183
|
+
// TODO: loggerConfigurator
|
|
184
|
+
// TODO: meterProvider
|
|
185
|
+
// Note: forceFlushTimeoutMillis not configurable via decl conf.
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
exports.createLoggerProviderFromConfig = createLoggerProviderFromConfig;
|
|
8
189
|
function createSpanLimitsFromConfig(limits, attribute_limits) {
|
|
9
190
|
if (!limits && !attribute_limits) {
|
|
10
191
|
return undefined;
|
|
@@ -1 +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"]}
|
|
1
|
+
{"version":3,"file":"create-from-config.js","sourceRoot":"","sources":["../../src/create-from-config.ts"],"names":[],"mappings":"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","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 * Dev Notes:\n * This file exports `create<SDK Thing>FromConfig(...)` functions intended to\n * be used by the \"create\" step of `startNodeSDK()`.\n */\n\nimport { diag } from '@opentelemetry/api';\nimport type { SpanLimits } from '@opentelemetry/sdk-trace';\nimport type { Resource } from '@opentelemetry/resources';\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 { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';\nimport type {\n AttributeLimitsConfigModel,\n BatchLogRecordProcessorConfigModel,\n LoggerProviderConfigModel,\n LogRecordExporterConfigModel,\n LogRecordLimitsConfigModel,\n LogRecordProcessorConfigModel,\n OtlpGrpcExporterConfigModel,\n OtlpHttpExporterConfigModel,\n SimpleLogRecordProcessorConfigModel,\n SpanLimitsConfigModel,\n} from '@opentelemetry/configuration';\nimport type {\n LogRecordExporter,\n LogRecordProcessor,\n LogRecordLimits,\n} from '@opentelemetry/sdk-logs';\nimport {\n BatchLogRecordProcessor,\n ConsoleLogRecordExporter,\n SimpleLogRecordProcessor,\n LoggerProvider,\n} from '@opentelemetry/sdk-logs';\n\nimport {\n getGrpcCredentialsFromTls,\n getGrpcMetadataFromHeaders,\n getHeadersFromConfiguration,\n getHttpAgentOptionsFromTls,\n validateExporterTimeout,\n} from './utils';\n\n// ---- internal utilities\n\n/**\n * Warn if some props from a declarative config object have not been handled.\n *\n * This is intended to be used by `create*FromConfig()` functions. It is a low\n * tech mechanism to add awareness when a given valid config is not being\n * completely handled. This could help when properties are added to the\n * configuration schema. (A higher tech mechanism that wraps the parsed\n * configuration during `create()` and watches for untouched properties\n * might be nice.)\n */\nfunction checkConfigUse(\n name: string,\n props: object | undefined,\n handledProps: string[]\n) {\n if (!props) return;\n // Dev note: I'd use Set#difference, but that requires Node.js v22.\n const unhandledProps = Object.keys(props).filter(\n k => !handledProps.includes(k)\n );\n\n if (unhandledProps.length > 0) {\n diag.warn(\n `Config warning: some specified ${name} configuration properties were not handled by SDK setup: ${JSON.stringify(unhandledProps)}`\n );\n }\n}\n\n/**\n * Return the single non-undefined entry in the given config object, or throw.\n *\n * It is common for Declarative Configuration to have config objects with\n * a single entry, e.g.\n *\n * \"LogRecordProcessor\": {\n * \"type\": \"object\",\n * \"additionalProperties\": {\n * \"type\": [\n * \"object\",\n * \"null\"\n * ]\n * },\n * \"minProperties\": 1,\n * \"maxProperties\": 1,\n *\n * The TypeScript types cannot express the minProperties/maxProperties from the\n * JSON schema. We guard against that here.\n */\nfunction mustSingleEntry(\n configObj: Record<string, unknown>,\n configTypeName: string\n): [string, unknown] {\n const entries = Object.entries(configObj).filter(\n ([_name, properties]) => properties !== undefined\n );\n\n if (entries.length !== 1) {\n const entryNames = entries.map(e => e[0]);\n throw Error(\n `invalid ${configTypeName} in configuration: must have exactly one entry: entries=${JSON.stringify(entryNames)}`\n );\n }\n\n return entries[0];\n}\n\n// ---- create<SDKThing>FromConfig functions\n\nexport function createLogRecordLimitsFromConfig(\n limits?: LogRecordLimitsConfigModel,\n attribute_limits?: AttributeLimitsConfigModel\n): LogRecordLimits | 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 };\n}\n\nexport function createLogRecordExporterFromConfig(\n exporter: LogRecordExporterConfigModel\n): LogRecordExporter {\n const [name, properties] = mustSingleEntry(exporter, 'LogRecordExporter');\n\n switch (name) {\n case 'otlp_http': {\n checkConfigUse('LogRecordExporter', properties!, [\n 'compression',\n 'endpoint',\n 'headers',\n 'timeout',\n 'tls',\n 'encoding',\n ]);\n const props = properties as OtlpHttpExporterConfigModel;\n const commonOpts = {\n compression:\n props?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: props?.endpoint ?? undefined,\n headers: getHeadersFromConfiguration(props?.headers),\n timeoutMillis: validateExporterTimeout(props?.timeout),\n httpAgentOptions: getHttpAgentOptionsFromTls(props?.tls),\n };\n const encoding = props?.encoding ?? 'protobuf';\n switch (encoding) {\n case 'json':\n return new OTLPHttpLogExporter(commonOpts);\n case 'protobuf':\n return new OTLPProtoLogExporter(commonOpts);\n default:\n throw new Error(\n `unknown OtlpHttpExporter encoding in configuration: \"${encoding}\"`\n );\n }\n }\n\n case 'otlp_grpc': {\n checkConfigUse('LogRecordExporter', properties!, [\n 'compression',\n 'endpoint',\n 'timeout',\n 'tls',\n 'headers',\n ]);\n const props = properties as OtlpGrpcExporterConfigModel;\n return new OTLPGrpcLogExporter({\n compression:\n props?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: props?.endpoint ?? undefined,\n timeoutMillis: validateExporterTimeout(props?.timeout),\n credentials: getGrpcCredentialsFromTls(props?.tls),\n metadata: getGrpcMetadataFromHeaders(props?.headers),\n });\n }\n\n case 'console':\n return new ConsoleLogRecordExporter();\n\n default:\n throw new Error(\n `unknown LogRecordExporter name in configuration: \"${name}\"`\n );\n }\n}\n\nexport function createLogRecordProcessorFromConfig(\n processor: LogRecordProcessorConfigModel\n): LogRecordProcessor {\n const [name, properties] = mustSingleEntry(processor, 'LogRecordProcessor');\n\n switch (name) {\n case 'batch': {\n checkConfigUse('BatchLogRecordProcessor', properties!, [\n 'exporter',\n 'max_queue_size',\n 'max_export_batch_size',\n 'schedule_delay',\n 'export_timeout',\n ]);\n const props = properties as BatchLogRecordProcessorConfigModel;\n const exporter = createLogRecordExporterFromConfig(props.exporter);\n return new BatchLogRecordProcessor({\n exporter,\n maxQueueSize: props.max_queue_size ?? undefined,\n maxExportBatchSize: props.max_export_batch_size ?? undefined,\n scheduledDelayMillis: props.schedule_delay ?? undefined,\n exportTimeoutMillis: props.export_timeout ?? undefined,\n });\n }\n\n case 'simple': {\n const props = properties as SimpleLogRecordProcessorConfigModel;\n const exporter = createLogRecordExporterFromConfig(props.exporter);\n return new SimpleLogRecordProcessor({ exporter });\n }\n\n default:\n throw new Error(`unknown LogRecordProcessor name: \"${name}\"`);\n }\n}\n\nexport function createLoggerProviderFromConfig(\n resource: Resource,\n logger_provider: LoggerProviderConfigModel,\n attribute_limits?: AttributeLimitsConfigModel\n): LoggerProvider {\n const processors = logger_provider.processors.map(p =>\n createLogRecordProcessorFromConfig(p)\n );\n const logRecordLimits = createLogRecordLimitsFromConfig(\n logger_provider.limits,\n attribute_limits\n );\n checkConfigUse('LoggerProvider', logger_provider, ['processors', 'limits']);\n\n return new LoggerProvider({\n resource,\n processors,\n logRecordLimits,\n // TODO: loggerConfigurator\n // TODO: meterProvider\n // Note: forceFlushTimeoutMillis not configurable via decl conf.\n });\n}\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"]}
|
package/build/src/sdk.js
CHANGED
|
@@ -129,9 +129,6 @@ class NodeSDK {
|
|
|
129
129
|
};
|
|
130
130
|
api_1.diag.warn("The 'logRecordProcessor' option is deprecated. Please use 'logRecordProcessors' instead.");
|
|
131
131
|
}
|
|
132
|
-
else {
|
|
133
|
-
this.configureLoggerProviderFromEnv();
|
|
134
|
-
}
|
|
135
132
|
if (configuration.metricReaders) {
|
|
136
133
|
this._meterProviderConfig = {
|
|
137
134
|
readers: configuration.metricReaders,
|
|
@@ -231,6 +228,9 @@ class NodeSDK {
|
|
|
231
228
|
});
|
|
232
229
|
api_1.trace.setGlobalTracerProvider(this._tracerProvider);
|
|
233
230
|
}
|
|
231
|
+
if (!this._loggerProviderConfig) {
|
|
232
|
+
this.configureLoggerProviderFromEnv(sdkMetricsEnabled ? this._meterProvider : undefined);
|
|
233
|
+
}
|
|
234
234
|
if (this._loggerProviderConfig) {
|
|
235
235
|
const loggerProvider = new sdk_logs_1.LoggerProvider({
|
|
236
236
|
...(0, utils_1.getLoggerProviderConfigFromEnv)(),
|
|
@@ -257,7 +257,7 @@ class NodeSDK {
|
|
|
257
257
|
// return void instead of the array from Promise.all
|
|
258
258
|
.then(() => { }));
|
|
259
259
|
}
|
|
260
|
-
configureLoggerProviderFromEnv() {
|
|
260
|
+
configureLoggerProviderFromEnv(meterProvider) {
|
|
261
261
|
const enabledExporters = Array.from(new Set((0, core_1.getStringListFromEnv)('OTEL_LOGS_EXPORTER') ?? []));
|
|
262
262
|
if (enabledExporters.length === 0) {
|
|
263
263
|
api_1.diag.debug('OTEL_LOGS_EXPORTER is empty. Using default otlp exporter.');
|
|
@@ -298,10 +298,13 @@ class NodeSDK {
|
|
|
298
298
|
this._loggerProviderConfig = {
|
|
299
299
|
logRecordProcessors: exporters.map(exporter => {
|
|
300
300
|
if (exporter instanceof sdk_logs_1.ConsoleLogRecordExporter) {
|
|
301
|
-
return new sdk_logs_1.SimpleLogRecordProcessor({
|
|
301
|
+
return new sdk_logs_1.SimpleLogRecordProcessor({
|
|
302
|
+
exporter,
|
|
303
|
+
selfObsMeterProvider: meterProvider,
|
|
304
|
+
});
|
|
302
305
|
}
|
|
303
306
|
else {
|
|
304
|
-
return (0, utils_1.getBatchLogRecordProcessorFromEnv)(exporter);
|
|
307
|
+
return (0, utils_1.getBatchLogRecordProcessorFromEnv)(exporter, meterProvider);
|
|
305
308
|
}
|
|
306
309
|
}),
|
|
307
310
|
};
|
package/build/src/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
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 }\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 this.configureLoggerProviderFromEnv(\n sdkMetricsEnabled ? this._meterProvider : undefined\n );\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(\n meterProvider: MeterProvider | undefined\n ): 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({\n exporter,\n selfObsMeterProvider: meterProvider,\n });\n } else {\n return getBatchLogRecordProcessorFromEnv(exporter, meterProvider);\n }\n }),\n };\n }\n }\n}\n"]}
|
package/build/src/start.js
CHANGED
|
@@ -98,7 +98,7 @@ function create(config, sdkOptions) {
|
|
|
98
98
|
components.propagator = propagator;
|
|
99
99
|
}
|
|
100
100
|
if (config.logger_provider) {
|
|
101
|
-
components.loggerProvider = (0,
|
|
101
|
+
components.loggerProvider = (0, create_from_config_1.createLoggerProviderFromConfig)(resource, config.logger_provider, config.attribute_limits);
|
|
102
102
|
}
|
|
103
103
|
const meterReaders = (0, utils_1.getMeterReadersFromConfiguration)(config);
|
|
104
104
|
if (meterReaders) {
|
package/build/src/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n ConfigFactory,\n ConfigurationModel,\n} from '@opentelemetry/configuration';\nimport { createConfigFactory } from '@opentelemetry/configuration';\nimport {\n context,\n diag,\n DiagConsoleLogger,\n metrics,\n trace,\n propagation,\n} from '@opentelemetry/api';\nimport {\n getIdGeneratorFromConfiguration,\n getSamplerFromConfiguration,\n getInstanceID,\n createLoggerProviderFromConfig,\n getMeterReadersFromConfiguration,\n getMeterViewsFromConfiguration,\n getPropagatorFromConfiguration,\n getResourceDetectorsFromConfiguration,\n getResourceFromConfiguration,\n getSpanProcessorsFromConfiguration,\n} from './utils';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type { SDKComponents, SDKOptions } from './types';\nimport { MeterProvider } from '@opentelemetry/sdk-metrics';\nimport { TracerProvider } from '@opentelemetry/sdk-trace';\nimport { logs } from '@opentelemetry/api-logs';\nimport type {\n Resource,\n ResourceDetectionConfig,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n defaultResource,\n detectResources,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { ATTR_SERVICE_INSTANCE_ID } from './semconv';\nimport { diagLogLevelFromSeverityNumberConfig } from './diag';\nimport { createSpanLimitsFromConfig } from './create-from-config';\n\n// Exported for testing.\nexport const NOOP_SDK = {\n shutdown: async () => {},\n};\n\n/**\n * @experimental Function to start the OpenTelemetry Node SDK\n * @param sdkOptions\n */\nexport function startNodeSDK(sdkOptions?: SDKOptions): {\n shutdown: () => Promise<void>;\n} {\n let config: ConfigurationModel;\n try {\n const configFactory: ConfigFactory = createConfigFactory();\n config = configFactory.getConfigModel();\n } catch (configErr) {\n // Set the diag logger, otherwise the diag.error will typically not be shown.\n const logLevel = diagLogLevelFromSeverityNumberConfig();\n diag.setLogger(new DiagConsoleLogger(), { logLevel });\n diag.error(\n `Could not load OpenTelemetry configuration, SDK will not be setup: ${configErr.message}`\n );\n return NOOP_SDK;\n }\n\n if (config.disabled) {\n return NOOP_SDK;\n }\n\n const logLevel = diagLogLevelFromSeverityNumberConfig(config.log_level);\n diag.setLogger(new DiagConsoleLogger(), { logLevel });\n\n registerInstrumentations({\n instrumentations: sdkOptions?.instrumentations?.flat() ?? [],\n });\n\n let components: SDKComponents;\n try {\n components = create(config, sdkOptions);\n } catch (createErr) {\n diag.error(`Could not create OpenTelemetry SDK: ${createErr.message}`);\n return NOOP_SDK;\n }\n if (components.contextManager) {\n context.setGlobalContextManager(components.contextManager);\n }\n if (components.loggerProvider) {\n logs.setGlobalLoggerProvider(components.loggerProvider);\n }\n if (components.meterProvider) {\n metrics.setGlobalMeterProvider(components.meterProvider);\n }\n if (components.tracerProvider) {\n trace.setGlobalTracerProvider(components.tracerProvider);\n }\n if (components.propagator) {\n propagation.setGlobalPropagator(components.propagator);\n }\n\n const shutdownFn = async () => {\n const promises: Promise<unknown>[] = [];\n if (components.loggerProvider) {\n promises.push(components.loggerProvider.shutdown());\n }\n if (components.meterProvider) {\n promises.push(components.meterProvider.shutdown());\n }\n if (components.tracerProvider) {\n promises.push(components.tracerProvider.shutdown());\n }\n await Promise.all(promises);\n };\n return { shutdown: shutdownFn };\n}\n\n/**\n * Interpret configuration model and return SDK components.\n */\nfunction create(\n config: ConfigurationModel,\n sdkOptions?: SDKOptions\n): SDKComponents {\n const components: SDKComponents = {};\n\n try {\n components.contextManager = new AsyncLocalStorageContextManager();\n components.contextManager.enable();\n\n const resource = setupResource(config, sdkOptions);\n\n const propagator =\n sdkOptions?.textMapPropagator === null\n ? null\n : (sdkOptions?.textMapPropagator ??\n getPropagatorFromConfiguration(config));\n if (propagator) {\n components.propagator = propagator;\n }\n\n if (config.logger_provider) {\n components.loggerProvider = createLoggerProviderFromConfig(\n resource,\n config.logger_provider,\n config.attribute_limits\n );\n }\n\n const meterReaders = getMeterReadersFromConfiguration(config);\n if (meterReaders) {\n const meterViews = getMeterViewsFromConfiguration(config);\n const meterProvider = new MeterProvider({\n resource: resource,\n readers: meterReaders,\n views: meterViews ?? [],\n });\n components.meterProvider = meterProvider;\n }\n\n const spanProcessors = getSpanProcessorsFromConfiguration(config);\n if (spanProcessors) {\n const idGenerator = getIdGeneratorFromConfiguration(config);\n const sampler = getSamplerFromConfiguration(config);\n const tracerProvider = new TracerProvider({\n resource,\n spanProcessors,\n idGenerator,\n sampler,\n spanLimits: createSpanLimitsFromConfig(\n config.tracer_provider?.limits,\n config.attribute_limits\n ),\n // TODO (6624): support for `meterProvider: components.meterProvider`\n });\n components.tracerProvider = tracerProvider;\n }\n\n return components;\n } catch (createErr) {\n // Clean up any SDK components that were created before the error.\n if (components.loggerProvider) {\n void components.loggerProvider.shutdown();\n }\n if (components.meterProvider) {\n void components.meterProvider.shutdown();\n }\n if (components.tracerProvider) {\n void components.tracerProvider.shutdown();\n }\n\n throw createErr;\n }\n}\n\nexport function setupResource(\n config: ConfigurationModel,\n sdkOptions?: SDKOptions\n): Resource {\n let resource: Resource =\n getResourceFromConfiguration(config) ?? defaultResource();\n let resourceDetectors: ResourceDetector[] = [];\n\n if (sdkOptions?.resourceDetectors != null) {\n resourceDetectors = sdkOptions.resourceDetectors;\n } else if (config.resource?.['detection/development']?.detectors) {\n resourceDetectors = getResourceDetectorsFromConfiguration(config);\n }\n\n if (resourceDetectors.length > 0) {\n const internalConfig: ResourceDetectionConfig = {\n detectors: resourceDetectors,\n };\n resource = resource.merge(detectResources(internalConfig));\n }\n\n const instanceId = getInstanceID(config);\n resource =\n instanceId === undefined\n ? resource\n : resource.merge(\n resourceFromAttributes({\n [ATTR_SERVICE_INSTANCE_ID]: instanceId,\n })\n );\n\n return resource;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n ConfigFactory,\n ConfigurationModel,\n} from '@opentelemetry/configuration';\nimport { createConfigFactory } from '@opentelemetry/configuration';\nimport {\n context,\n diag,\n DiagConsoleLogger,\n metrics,\n trace,\n propagation,\n} from '@opentelemetry/api';\nimport {\n getIdGeneratorFromConfiguration,\n getSamplerFromConfiguration,\n getInstanceID,\n getMeterReadersFromConfiguration,\n getMeterViewsFromConfiguration,\n getPropagatorFromConfiguration,\n getResourceDetectorsFromConfiguration,\n getResourceFromConfiguration,\n getSpanProcessorsFromConfiguration,\n} from './utils';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type { SDKComponents, SDKOptions } from './types';\nimport { MeterProvider } from '@opentelemetry/sdk-metrics';\nimport { TracerProvider } from '@opentelemetry/sdk-trace';\nimport { logs } from '@opentelemetry/api-logs';\nimport type {\n Resource,\n ResourceDetectionConfig,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n defaultResource,\n detectResources,\n resourceFromAttributes,\n} from '@opentelemetry/resources';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { ATTR_SERVICE_INSTANCE_ID } from './semconv';\nimport { diagLogLevelFromSeverityNumberConfig } from './diag';\nimport {\n createLoggerProviderFromConfig,\n createSpanLimitsFromConfig,\n} from './create-from-config';\n\n// Exported for testing.\nexport const NOOP_SDK = {\n shutdown: async () => {},\n};\n\n/**\n * @experimental Function to start the OpenTelemetry Node SDK\n * @param sdkOptions\n */\nexport function startNodeSDK(sdkOptions?: SDKOptions): {\n shutdown: () => Promise<void>;\n} {\n let config: ConfigurationModel;\n try {\n const configFactory: ConfigFactory = createConfigFactory();\n config = configFactory.getConfigModel();\n } catch (configErr) {\n // Set the diag logger, otherwise the diag.error will typically not be shown.\n const logLevel = diagLogLevelFromSeverityNumberConfig();\n diag.setLogger(new DiagConsoleLogger(), { logLevel });\n diag.error(\n `Could not load OpenTelemetry configuration, SDK will not be setup: ${configErr.message}`\n );\n return NOOP_SDK;\n }\n\n if (config.disabled) {\n return NOOP_SDK;\n }\n\n const logLevel = diagLogLevelFromSeverityNumberConfig(config.log_level);\n diag.setLogger(new DiagConsoleLogger(), { logLevel });\n\n registerInstrumentations({\n instrumentations: sdkOptions?.instrumentations?.flat() ?? [],\n });\n\n let components: SDKComponents;\n try {\n components = create(config, sdkOptions);\n } catch (createErr) {\n diag.error(`Could not create OpenTelemetry SDK: ${createErr.message}`);\n return NOOP_SDK;\n }\n if (components.contextManager) {\n context.setGlobalContextManager(components.contextManager);\n }\n if (components.loggerProvider) {\n logs.setGlobalLoggerProvider(components.loggerProvider);\n }\n if (components.meterProvider) {\n metrics.setGlobalMeterProvider(components.meterProvider);\n }\n if (components.tracerProvider) {\n trace.setGlobalTracerProvider(components.tracerProvider);\n }\n if (components.propagator) {\n propagation.setGlobalPropagator(components.propagator);\n }\n\n const shutdownFn = async () => {\n const promises: Promise<unknown>[] = [];\n if (components.loggerProvider) {\n promises.push(components.loggerProvider.shutdown());\n }\n if (components.meterProvider) {\n promises.push(components.meterProvider.shutdown());\n }\n if (components.tracerProvider) {\n promises.push(components.tracerProvider.shutdown());\n }\n await Promise.all(promises);\n };\n return { shutdown: shutdownFn };\n}\n\n/**\n * Interpret configuration model and return SDK components.\n */\nfunction create(\n config: ConfigurationModel,\n sdkOptions?: SDKOptions\n): SDKComponents {\n const components: SDKComponents = {};\n\n try {\n components.contextManager = new AsyncLocalStorageContextManager();\n components.contextManager.enable();\n\n const resource = setupResource(config, sdkOptions);\n\n const propagator =\n sdkOptions?.textMapPropagator === null\n ? null\n : (sdkOptions?.textMapPropagator ??\n getPropagatorFromConfiguration(config));\n if (propagator) {\n components.propagator = propagator;\n }\n\n if (config.logger_provider) {\n components.loggerProvider = createLoggerProviderFromConfig(\n resource,\n config.logger_provider,\n config.attribute_limits\n );\n }\n\n const meterReaders = getMeterReadersFromConfiguration(config);\n if (meterReaders) {\n const meterViews = getMeterViewsFromConfiguration(config);\n const meterProvider = new MeterProvider({\n resource: resource,\n readers: meterReaders,\n views: meterViews ?? [],\n });\n components.meterProvider = meterProvider;\n }\n\n const spanProcessors = getSpanProcessorsFromConfiguration(config);\n if (spanProcessors) {\n const idGenerator = getIdGeneratorFromConfiguration(config);\n const sampler = getSamplerFromConfiguration(config);\n const tracerProvider = new TracerProvider({\n resource,\n spanProcessors,\n idGenerator,\n sampler,\n spanLimits: createSpanLimitsFromConfig(\n config.tracer_provider?.limits,\n config.attribute_limits\n ),\n // TODO (6624): support for `meterProvider: components.meterProvider`\n });\n components.tracerProvider = tracerProvider;\n }\n\n return components;\n } catch (createErr) {\n // Clean up any SDK components that were created before the error.\n if (components.loggerProvider) {\n void components.loggerProvider.shutdown();\n }\n if (components.meterProvider) {\n void components.meterProvider.shutdown();\n }\n if (components.tracerProvider) {\n void components.tracerProvider.shutdown();\n }\n\n throw createErr;\n }\n}\n\nexport function setupResource(\n config: ConfigurationModel,\n sdkOptions?: SDKOptions\n): Resource {\n let resource: Resource =\n getResourceFromConfiguration(config) ?? defaultResource();\n let resourceDetectors: ResourceDetector[] = [];\n\n if (sdkOptions?.resourceDetectors != null) {\n resourceDetectors = sdkOptions.resourceDetectors;\n } else if (config.resource?.['detection/development']?.detectors) {\n resourceDetectors = getResourceDetectorsFromConfiguration(config);\n }\n\n if (resourceDetectors.length > 0) {\n const internalConfig: ResourceDetectionConfig = {\n detectors: resourceDetectors,\n };\n resource = resource.merge(detectResources(internalConfig));\n }\n\n const instanceId = getInstanceID(config);\n resource =\n instanceId === undefined\n ? resource\n : resource.merge(\n resourceFromAttributes({\n [ATTR_SERVICE_INSTANCE_ID]: instanceId,\n })\n );\n\n return resource;\n}\n"]}
|
package/build/src/utils.d.ts
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
import type { ContextManager, MeterProvider, TextMapPropagator } from '@opentelemetry/api';
|
|
4
4
|
import type { Resource, ResourceDetector } from '@opentelemetry/resources';
|
|
5
5
|
import type { IdGenerator, Sampler, SpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace';
|
|
6
|
-
import type { ConfigurationModel,
|
|
6
|
+
import type { ConfigurationModel, InstrumentTypeConfigModel, AggregationConfigModel, PeriodicMetricReaderConfigModel, PushMetricExporterConfigModel, SpanExporterConfigModel, SamplerConfigModel, NameStringValuePairConfigModel, HttpTlsConfigModel, GrpcTlsConfigModel } from '@opentelemetry/configuration';
|
|
7
7
|
import type { AggregationOption, IMetricReader, PushMetricExporter, ViewOptions } from '@opentelemetry/sdk-metrics';
|
|
8
8
|
import { InstrumentType } from '@opentelemetry/sdk-metrics';
|
|
9
|
-
import type { BatchLogRecordProcessorOptions, LogRecordExporter, LoggerProviderOptions
|
|
10
|
-
import { BatchLogRecordProcessor
|
|
9
|
+
import type { BatchLogRecordProcessorOptions, LogRecordExporter, LoggerProviderOptions } from '@opentelemetry/sdk-logs';
|
|
10
|
+
import { BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';
|
|
11
11
|
export declare function getResourceFromConfiguration(config: ConfigurationModel): Resource | undefined;
|
|
12
12
|
export declare function getResourceDetectorsFromEnv(): Array<ResourceDetector>;
|
|
13
13
|
export declare function getResourceDetectorsFromConfiguration(config: ConfigurationModel): Array<ResourceDetector>;
|
|
@@ -37,16 +37,21 @@ export declare function getLoggerProviderConfigFromEnv(): LoggerProviderOptions;
|
|
|
37
37
|
* Get configuration for BatchLogRecordProcessor from environment variables.
|
|
38
38
|
*/
|
|
39
39
|
export declare function getBatchLogRecordProcessorConfigFromEnv(): Omit<BatchLogRecordProcessorOptions, 'exporter'>;
|
|
40
|
-
export declare function getBatchLogRecordProcessorFromEnv(exporter: LogRecordExporter): BatchLogRecordProcessor;
|
|
41
|
-
export declare function createLoggerProviderFromConfig(resource: Resource, logger_provider: LoggerProviderConfigModel, attribute_limits?: AttributeLimitsConfigModel): LoggerProvider;
|
|
42
|
-
export declare function createLogRecordExporterFromConfig(exporter: LogRecordExporterConfigModel): LogRecordExporter;
|
|
43
|
-
export declare function createLogRecordProcessorFromConfig(processor: LogRecordProcessorConfigModel): LogRecordProcessor;
|
|
40
|
+
export declare function getBatchLogRecordProcessorFromEnv(exporter: LogRecordExporter, selfObsMeterProvider: MeterProvider | undefined): BatchLogRecordProcessor;
|
|
44
41
|
export declare function getHeadersFromConfiguration(headers: NameStringValuePairConfigModel[] | undefined): Record<string, string> | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Validate an exporter timeout value. The spec says 0 means "no limit
|
|
44
|
+
* (infinity)" but the JS exporters don't support that yet (see #6617).
|
|
45
|
+
* Warn and return undefined so the exporter falls back to its default.
|
|
46
|
+
*/
|
|
47
|
+
export declare function validateExporterTimeout(timeout: number | null | undefined): number | undefined;
|
|
45
48
|
export declare function getHttpAgentOptionsFromTls(tls: HttpTlsConfigModel | undefined): {
|
|
46
49
|
ca?: Buffer;
|
|
47
50
|
cert?: Buffer;
|
|
48
51
|
key?: Buffer;
|
|
49
52
|
} | undefined;
|
|
53
|
+
export declare function getGrpcCredentialsFromTls(tls?: GrpcTlsConfigModel): import("@grpc/grpc-js").ChannelCredentials | undefined;
|
|
54
|
+
export declare function getGrpcMetadataFromHeaders(headers: NameStringValuePairConfigModel[] | undefined): import("@grpc/grpc-js").Metadata | undefined;
|
|
50
55
|
export declare function getSpanExporter(exporter: SpanExporterConfigModel): SpanExporter | undefined;
|
|
51
56
|
export declare function getSpanProcessorsFromConfiguration(config: ConfigurationModel): SpanProcessor[] | undefined;
|
|
52
57
|
export declare function getIdGeneratorFromConfiguration(config: ConfigurationModel): IdGenerator | undefined;
|
package/build/src/utils.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.buildSamplerFromConfig = exports.getSamplerFromConfiguration = exports.getInstanceID = exports.getMeterViewsFromConfiguration = exports.getAggregationType = exports.getInstrumentType = exports.getMeterReadersFromConfiguration = exports.getIdGeneratorFromConfiguration = exports.getSpanProcessorsFromConfiguration = exports.getSpanExporter = exports.
|
|
7
|
+
exports.buildSamplerFromConfig = exports.getSamplerFromConfiguration = exports.getInstanceID = exports.getMeterViewsFromConfiguration = exports.getAggregationType = exports.getInstrumentType = exports.getMeterReadersFromConfiguration = exports.getIdGeneratorFromConfiguration = exports.getSpanProcessorsFromConfiguration = exports.getSpanExporter = exports.getGrpcMetadataFromHeaders = exports.getGrpcCredentialsFromTls = exports.getHttpAgentOptionsFromTls = exports.validateExporterTimeout = exports.getHeadersFromConfiguration = exports.getBatchLogRecordProcessorFromEnv = exports.getBatchLogRecordProcessorConfigFromEnv = exports.getLoggerProviderConfigFromEnv = exports.getPeriodicMetricReaderFromConfiguration = exports.getMetricExporter = exports.getOtlpMetricExporterFromEnv = exports.getPeriodicExportingMetricReaderFromEnv = exports.getNonNegativeNumberFromEnv = exports.getKeyListFromObjectArray = exports.setupPropagator = exports.setupContextManager = exports.getPropagatorFromConfiguration = exports.getPropagatorFromEnv = exports.getSpanProcessorsFromEnv = exports.getOtlpProtocolFromEnv = exports.getResourceDetectorsFromConfiguration = exports.getResourceDetectorsFromEnv = exports.getResourceFromConfiguration = void 0;
|
|
8
8
|
const api_1 = require("@opentelemetry/api");
|
|
9
9
|
const core_1 = require("@opentelemetry/core");
|
|
10
10
|
const exporter_trace_otlp_proto_1 = require("@opentelemetry/exporter-trace-otlp-proto");
|
|
@@ -16,9 +16,6 @@ const sdk_trace_1 = require("@opentelemetry/sdk-trace");
|
|
|
16
16
|
const propagator_b3_1 = require("@opentelemetry/propagator-b3");
|
|
17
17
|
const propagator_jaeger_1 = require("@opentelemetry/propagator-jaeger");
|
|
18
18
|
const context_async_hooks_1 = require("@opentelemetry/context-async-hooks");
|
|
19
|
-
const exporter_logs_otlp_http_1 = require("@opentelemetry/exporter-logs-otlp-http");
|
|
20
|
-
const exporter_logs_otlp_grpc_1 = require("@opentelemetry/exporter-logs-otlp-grpc");
|
|
21
|
-
const exporter_logs_otlp_proto_1 = require("@opentelemetry/exporter-logs-otlp-proto");
|
|
22
19
|
const otlp_exporter_base_1 = require("@opentelemetry/otlp-exporter-base");
|
|
23
20
|
const otlp_grpc_exporter_base_1 = require("@opentelemetry/otlp-grpc-exporter-base");
|
|
24
21
|
const configuration_1 = require("@opentelemetry/configuration");
|
|
@@ -187,7 +184,13 @@ function getPropagatorFromEnv() {
|
|
|
187
184
|
'b3multi',
|
|
188
185
|
() => new propagator_b3_1.B3Propagator({ injectEncoding: propagator_b3_1.B3InjectEncoding.MULTI_HEADER }),
|
|
189
186
|
],
|
|
190
|
-
[
|
|
187
|
+
[
|
|
188
|
+
'jaeger',
|
|
189
|
+
() => {
|
|
190
|
+
api_1.diag.warn('The Jaeger propagator is deprecated and will be removed in a future release. Use the W3C TraceContext propagator ("tracecontext") instead.');
|
|
191
|
+
return new propagator_jaeger_1.JaegerPropagator();
|
|
192
|
+
},
|
|
193
|
+
],
|
|
191
194
|
]);
|
|
192
195
|
// Values MUST be deduplicated in order to register a Propagator only once.
|
|
193
196
|
const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue));
|
|
@@ -273,7 +276,13 @@ function getPropagatorFromConfiguration(config) {
|
|
|
273
276
|
'b3multi',
|
|
274
277
|
() => new propagator_b3_1.B3Propagator({ injectEncoding: propagator_b3_1.B3InjectEncoding.MULTI_HEADER }),
|
|
275
278
|
],
|
|
276
|
-
[
|
|
279
|
+
[
|
|
280
|
+
'jaeger',
|
|
281
|
+
() => {
|
|
282
|
+
api_1.diag.warn('The Jaeger propagator is deprecated and will be removed in a future release. Use the W3C TraceContext propagator ("tracecontext") instead.');
|
|
283
|
+
return new propagator_jaeger_1.JaegerPropagator();
|
|
284
|
+
},
|
|
285
|
+
],
|
|
277
286
|
]);
|
|
278
287
|
const validPropagators = [];
|
|
279
288
|
for (const [name] of kvs) {
|
|
@@ -549,104 +558,14 @@ function getBatchLogRecordProcessorConfigFromEnv() {
|
|
|
549
558
|
};
|
|
550
559
|
}
|
|
551
560
|
exports.getBatchLogRecordProcessorConfigFromEnv = getBatchLogRecordProcessorConfigFromEnv;
|
|
552
|
-
function getBatchLogRecordProcessorFromEnv(exporter) {
|
|
561
|
+
function getBatchLogRecordProcessorFromEnv(exporter, selfObsMeterProvider) {
|
|
553
562
|
return new sdk_logs_1.BatchLogRecordProcessor({
|
|
554
563
|
exporter,
|
|
564
|
+
selfObsMeterProvider,
|
|
555
565
|
...getBatchLogRecordProcessorConfigFromEnv(),
|
|
556
566
|
});
|
|
557
567
|
}
|
|
558
568
|
exports.getBatchLogRecordProcessorFromEnv = getBatchLogRecordProcessorFromEnv;
|
|
559
|
-
function createLogRecordLimitsFromConfig(limits, attribute_limits) {
|
|
560
|
-
return {
|
|
561
|
-
attributeValueLengthLimit: limits?.attribute_value_length_limit ??
|
|
562
|
-
attribute_limits?.attribute_value_length_limit ??
|
|
563
|
-
undefined,
|
|
564
|
-
attributeCountLimit: limits?.attribute_count_limit ??
|
|
565
|
-
attribute_limits?.attribute_count_limit ??
|
|
566
|
-
undefined,
|
|
567
|
-
};
|
|
568
|
-
}
|
|
569
|
-
function createLoggerProviderFromConfig(resource, logger_provider, attribute_limits) {
|
|
570
|
-
const processors = logger_provider.processors.map(p => createLogRecordProcessorFromConfig(p));
|
|
571
|
-
const logRecordLimits = createLogRecordLimitsFromConfig(logger_provider.limits, attribute_limits);
|
|
572
|
-
checkConfigUse('LoggerProvider', logger_provider, ['processors', 'limits']);
|
|
573
|
-
return new sdk_logs_1.LoggerProvider({
|
|
574
|
-
resource,
|
|
575
|
-
processors,
|
|
576
|
-
logRecordLimits,
|
|
577
|
-
// TODO: loggerConfigurator
|
|
578
|
-
// TODO: meterProvider
|
|
579
|
-
// Note: forceFlushTimeoutMillis not configurable via decl conf.
|
|
580
|
-
});
|
|
581
|
-
}
|
|
582
|
-
exports.createLoggerProviderFromConfig = createLoggerProviderFromConfig;
|
|
583
|
-
function createLogRecordExporterFromConfig(exporter) {
|
|
584
|
-
const [name, properties] = mustSingleEntry(exporter, 'LogRecordExporter');
|
|
585
|
-
switch (name) {
|
|
586
|
-
case 'otlp_http': {
|
|
587
|
-
const props = properties;
|
|
588
|
-
const commonOpts = {
|
|
589
|
-
compression: props?.compression === 'gzip'
|
|
590
|
-
? otlp_exporter_base_1.CompressionAlgorithm.GZIP
|
|
591
|
-
: otlp_exporter_base_1.CompressionAlgorithm.NONE,
|
|
592
|
-
url: props?.endpoint ?? undefined,
|
|
593
|
-
headers: getHeadersFromConfiguration(props?.headers),
|
|
594
|
-
timeoutMillis: validateExporterTimeout(props?.timeout),
|
|
595
|
-
httpAgentOptions: getHttpAgentOptionsFromTls(props?.tls),
|
|
596
|
-
};
|
|
597
|
-
const encoding = props?.encoding ?? 'protobuf';
|
|
598
|
-
switch (encoding) {
|
|
599
|
-
case 'json':
|
|
600
|
-
return new exporter_logs_otlp_http_1.OTLPLogExporter(commonOpts);
|
|
601
|
-
case 'protobuf':
|
|
602
|
-
return new exporter_logs_otlp_proto_1.OTLPLogExporter(commonOpts);
|
|
603
|
-
default:
|
|
604
|
-
throw new Error(`unknown OtlpHttpExporter encoding in configuration: "${encoding}"`);
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
case 'otlp_grpc': {
|
|
608
|
-
const props = properties;
|
|
609
|
-
return new exporter_logs_otlp_grpc_1.OTLPLogExporter({
|
|
610
|
-
compression: props?.compression === 'gzip'
|
|
611
|
-
? otlp_exporter_base_1.CompressionAlgorithm.GZIP
|
|
612
|
-
: otlp_exporter_base_1.CompressionAlgorithm.NONE,
|
|
613
|
-
url: props?.endpoint ?? undefined,
|
|
614
|
-
timeoutMillis: validateExporterTimeout(props?.timeout),
|
|
615
|
-
credentials: getGrpcCredentialsFromTls(props?.tls),
|
|
616
|
-
metadata: getGrpcMetadataFromHeaders(props?.headers),
|
|
617
|
-
});
|
|
618
|
-
}
|
|
619
|
-
case 'console':
|
|
620
|
-
return new sdk_logs_1.ConsoleLogRecordExporter();
|
|
621
|
-
default:
|
|
622
|
-
throw new Error(`unknown LogRecordExporter name in configuration: "${name}"`);
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
exports.createLogRecordExporterFromConfig = createLogRecordExporterFromConfig;
|
|
626
|
-
function createLogRecordProcessorFromConfig(processor) {
|
|
627
|
-
const [name, properties] = mustSingleEntry(processor, 'LogRecordProcessor');
|
|
628
|
-
switch (name) {
|
|
629
|
-
case 'batch': {
|
|
630
|
-
const props = properties;
|
|
631
|
-
const exporter = createLogRecordExporterFromConfig(props.exporter);
|
|
632
|
-
return new sdk_logs_1.BatchLogRecordProcessor({
|
|
633
|
-
exporter,
|
|
634
|
-
maxQueueSize: props.max_queue_size ?? undefined,
|
|
635
|
-
maxExportBatchSize: props.max_export_batch_size ?? undefined,
|
|
636
|
-
scheduledDelayMillis: props.schedule_delay ?? undefined,
|
|
637
|
-
exportTimeoutMillis: props.export_timeout ?? undefined,
|
|
638
|
-
});
|
|
639
|
-
}
|
|
640
|
-
case 'simple': {
|
|
641
|
-
const props = properties;
|
|
642
|
-
const exporter = createLogRecordExporterFromConfig(props.exporter);
|
|
643
|
-
return new sdk_logs_1.SimpleLogRecordProcessor({ exporter });
|
|
644
|
-
}
|
|
645
|
-
default:
|
|
646
|
-
throw new Error(`unknown LogRecordProcessor name: "${name}"`);
|
|
647
|
-
}
|
|
648
|
-
}
|
|
649
|
-
exports.createLogRecordProcessorFromConfig = createLogRecordProcessorFromConfig;
|
|
650
569
|
function getHeadersFromConfiguration(headers) {
|
|
651
570
|
if (!headers) {
|
|
652
571
|
return undefined;
|
|
@@ -675,6 +594,7 @@ function validateExporterTimeout(timeout) {
|
|
|
675
594
|
}
|
|
676
595
|
return timeout;
|
|
677
596
|
}
|
|
597
|
+
exports.validateExporterTimeout = validateExporterTimeout;
|
|
678
598
|
function getHttpAgentOptionsFromTls(tls) {
|
|
679
599
|
if (tls && (tls.ca_file || tls.cert_file || tls.key_file)) {
|
|
680
600
|
return {
|
|
@@ -704,6 +624,7 @@ function getGrpcCredentialsFromTls(tls) {
|
|
|
704
624
|
}
|
|
705
625
|
return undefined;
|
|
706
626
|
}
|
|
627
|
+
exports.getGrpcCredentialsFromTls = getGrpcCredentialsFromTls;
|
|
707
628
|
function getGrpcMetadataFromHeaders(headers) {
|
|
708
629
|
if (!headers || headers.length === 0) {
|
|
709
630
|
return undefined;
|
|
@@ -716,6 +637,7 @@ function getGrpcMetadataFromHeaders(headers) {
|
|
|
716
637
|
}
|
|
717
638
|
return metadata;
|
|
718
639
|
}
|
|
640
|
+
exports.getGrpcMetadataFromHeaders = getGrpcMetadataFromHeaders;
|
|
719
641
|
function readFileOrWarn(filePath, label) {
|
|
720
642
|
if (!filePath)
|
|
721
643
|
return undefined;
|
|
@@ -1030,51 +952,4 @@ function buildSamplerFromConfig(samplerConfig) {
|
|
|
1030
952
|
return new sdk_trace_1.ParentBasedSampler({ root: new sdk_trace_1.AlwaysOnSampler() });
|
|
1031
953
|
}
|
|
1032
954
|
exports.buildSamplerFromConfig = buildSamplerFromConfig;
|
|
1033
|
-
/**
|
|
1034
|
-
* Warn if some props from a declarative config object have not been handled.
|
|
1035
|
-
*
|
|
1036
|
-
* This is intended to be used by `create*FromConfig()` functions. It is a low
|
|
1037
|
-
* tech mechanism to add awareness when a given valid config is not being
|
|
1038
|
-
* completely handled. This could help when properties are added to the
|
|
1039
|
-
* configuration schema. (A higher tech mechanism that wraps the parsed
|
|
1040
|
-
* configuration during `create()` and watches for untouched properties
|
|
1041
|
-
* might be nice.)
|
|
1042
|
-
*/
|
|
1043
|
-
function checkConfigUse(name, props, handledProps) {
|
|
1044
|
-
if (!props)
|
|
1045
|
-
return;
|
|
1046
|
-
// Dev note: I'd use Set#difference, but that requires Node.js v22.
|
|
1047
|
-
const unhandledProps = Object.keys(props).filter(k => !handledProps.includes(k));
|
|
1048
|
-
if (unhandledProps.length > 0) {
|
|
1049
|
-
api_1.diag.warn(`Config warning: some specified ${name} configuration properties were not handled by SDK setup: ${JSON.stringify(unhandledProps)}`);
|
|
1050
|
-
}
|
|
1051
|
-
}
|
|
1052
|
-
/**
|
|
1053
|
-
* Return the single non-undefined entry in the given config object, or throw.
|
|
1054
|
-
*
|
|
1055
|
-
* It is common for Declarative Configuration to have config objects with
|
|
1056
|
-
* a single entry, e.g.
|
|
1057
|
-
*
|
|
1058
|
-
* "LogRecordProcessor": {
|
|
1059
|
-
* "type": "object",
|
|
1060
|
-
* "additionalProperties": {
|
|
1061
|
-
* "type": [
|
|
1062
|
-
* "object",
|
|
1063
|
-
* "null"
|
|
1064
|
-
* ]
|
|
1065
|
-
* },
|
|
1066
|
-
* "minProperties": 1,
|
|
1067
|
-
* "maxProperties": 1,
|
|
1068
|
-
*
|
|
1069
|
-
* The TypeScript types cannot express the minProperties/maxProperties from the
|
|
1070
|
-
* JSON schema. We guard against that here.
|
|
1071
|
-
*/
|
|
1072
|
-
function mustSingleEntry(configObj, configTypeName) {
|
|
1073
|
-
const entries = Object.entries(configObj).filter(([_name, properties]) => properties !== undefined);
|
|
1074
|
-
if (entries.length !== 1) {
|
|
1075
|
-
const entryNames = entries.map(e => e[0]);
|
|
1076
|
-
throw Error(`invalid ${configTypeName} in configuration: must have exactly one entry: entries=${JSON.stringify(entryNames)}`);
|
|
1077
|
-
}
|
|
1078
|
-
return entries[0];
|
|
1079
|
-
}
|
|
1080
955
|
//# sourceMappingURL=utils.js.map
|
package/build/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n ContextManager,\n MeterProvider,\n TextMapPropagator,\n} from '@opentelemetry/api';\nimport { context, diag, propagation } from '@opentelemetry/api';\nimport {\n CompositePropagator,\n getNumberFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n W3CBaggagePropagator,\n W3CTraceContextPropagator,\n} from '@opentelemetry/core';\nimport { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';\nimport { ZipkinExporter } from '@opentelemetry/exporter-zipkin';\nimport type {\n DetectedResourceAttributes,\n Resource,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n envDetector,\n hostDetector,\n osDetector,\n processDetector,\n resourceFromAttributes,\n serviceInstanceIdDetector,\n} from '@opentelemetry/resources';\nimport type {\n IdGenerator,\n Sampler,\n SpanExporter,\n SpanProcessor,\n} from '@opentelemetry/sdk-trace';\nimport {\n AlwaysOffSampler,\n AlwaysOnSampler,\n BatchSpanProcessor,\n ConsoleSpanExporter,\n ParentBasedSampler,\n RandomIdGenerator,\n SimpleSpanProcessor,\n TraceIdRatioBasedSampler,\n} from '@opentelemetry/sdk-trace';\nimport { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3';\nimport { JaegerPropagator } from '@opentelemetry/propagator-jaeger';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\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 { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';\nimport {\n createEmptyMetadata,\n createInsecureCredentials,\n createSslCredentials,\n} from '@opentelemetry/otlp-grpc-exporter-base';\nimport type {\n ConfigurationModel,\n LogRecordExporterConfigModel,\n InstrumentTypeConfigModel,\n AggregationConfigModel,\n MetricProducerConfigModel,\n PeriodicMetricReaderConfigModel,\n PushMetricExporterConfigModel,\n OtlpHttpMetricExporterConfigModel,\n OtlpGrpcMetricExporterConfigModel,\n SpanExporterConfigModel,\n SamplerConfigModel,\n NameStringValuePairConfigModel,\n HttpTlsConfigModel,\n GrpcTlsConfigModel,\n TextMapPropagatorConfigModel,\n AttributeLimitsConfigModel,\n BatchLogRecordProcessorConfigModel,\n LoggerProviderConfigModel,\n LogRecordProcessorConfigModel,\n OtlpGrpcExporterConfigModel,\n OtlpHttpExporterConfigModel,\n SimpleLogRecordProcessorConfigModel,\n LogRecordLimitsConfigModel,\n} from '@opentelemetry/configuration';\nimport {\n mergePropagatorCompositeConfig,\n mergeResourceAttributesConfig,\n} from '@opentelemetry/configuration';\nimport type {\n AggregationOption,\n AggregationSelector,\n IAttributesProcessor,\n IMetricReader,\n PushMetricExporter,\n ViewOptions,\n} from '@opentelemetry/sdk-metrics';\nimport {\n AggregationType,\n ConsoleMetricExporter,\n createAllowListAttributesProcessor,\n createDenyListAttributesProcessor,\n InstrumentType,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport { OTLPMetricExporter as OTLPGrpcMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';\nimport { OTLPMetricExporter as OTLPHttpMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { AggregationTemporalityPreference } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { OTLPMetricExporter as OTLPProtoMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto';\nimport type {\n BatchLogRecordProcessorOptions,\n LogRecordExporter,\n LoggerProviderOptions,\n LogRecordProcessor,\n LogRecordLimits,\n} from '@opentelemetry/sdk-logs';\nimport type { MetricProducer } from '@opentelemetry/sdk-metrics';\nimport {\n BatchLogRecordProcessor,\n ConsoleLogRecordExporter,\n SimpleLogRecordProcessor,\n LoggerProvider,\n} from '@opentelemetry/sdk-logs';\nimport * as fs from 'fs';\nimport { inspect } from 'util';\nimport { createBatchSpanProcessorFromEnv } from './create-from-env';\n\nconst RESOURCE_DETECTOR_ENVIRONMENT = 'env';\nconst RESOURCE_DETECTOR_HOST = 'host';\nconst RESOURCE_DETECTOR_OS = 'os';\nconst RESOURCE_DETECTOR_PROCESS = 'process';\nconst RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = 'serviceinstance';\n\nexport function getResourceFromConfiguration(\n config: ConfigurationModel\n): Resource | undefined {\n if (!config.resource) {\n return undefined;\n }\n\n const configAttrs = mergeResourceAttributesConfig(\n config.resource.attributes,\n config.resource.attributes_list\n );\n if (!configAttrs) {\n return undefined;\n }\n\n const attrs: DetectedResourceAttributes = {};\n for (let i = 0; i < configAttrs.length; i++) {\n const a = configAttrs[i];\n if (a.value !== null) {\n attrs[a.name] = a.value;\n }\n }\n return resourceFromAttributes(attrs, {\n schemaUrl: config.resource.schema_url ?? undefined,\n });\n}\n\nexport function getResourceDetectorsFromEnv(): Array<ResourceDetector> {\n // When updating this list, make sure to also update the section `resourceDetectors` on README.\n const resourceDetectors = new Map<string, ResourceDetector>([\n [RESOURCE_DETECTOR_HOST, hostDetector],\n [RESOURCE_DETECTOR_OS, osDetector],\n [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, serviceInstanceIdDetector],\n [RESOURCE_DETECTOR_PROCESS, processDetector],\n [RESOURCE_DETECTOR_ENVIRONMENT, envDetector],\n ]);\n\n const resourceDetectorsFromEnv = getStringListFromEnv(\n 'OTEL_NODE_RESOURCE_DETECTORS'\n ) ?? ['all'];\n\n if (resourceDetectorsFromEnv.includes('all')) {\n return [...resourceDetectors.values()].flat();\n }\n\n if (resourceDetectorsFromEnv.includes('none')) {\n return [];\n }\n\n return resourceDetectorsFromEnv.flatMap(detector => {\n const resourceDetector = resourceDetectors.get(detector);\n if (!resourceDetector) {\n diag.warn(\n `Invalid resource detector \"${detector}\" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`\n );\n }\n return resourceDetector || [];\n });\n}\n\nexport function getResourceDetectorsFromConfiguration(\n config: ConfigurationModel\n): Array<ResourceDetector> {\n const detectors = config.resource?.['detection/development']?.detectors ?? [];\n\n return detectors.flatMap(detector => {\n const result: ResourceDetector[] = [];\n if (detector.host !== undefined) result.push(hostDetector);\n if (detector.os !== undefined) result.push(osDetector);\n if (detector.process !== undefined) result.push(processDetector);\n if (detector.service !== undefined) result.push(serviceInstanceIdDetector);\n if (detector.env !== undefined) result.push(envDetector);\n return result;\n });\n}\n\nexport function getOtlpProtocolFromEnv(): string {\n return (\n getStringFromEnv('OTEL_EXPORTER_OTLP_TRACES_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL') ??\n 'http/protobuf'\n );\n}\n\nfunction getOtlpExporterFromEnv(): SpanExporter {\n const protocol = getOtlpProtocolFromEnv();\n\n switch (protocol) {\n case 'grpc':\n return new OTLPGrpcTraceExporter();\n case 'http/json':\n return new OTLPHttpTraceExporter();\n case 'http/protobuf':\n return new OTLPProtoTraceExporter();\n default:\n diag.warn(\n `Unsupported OTLP traces protocol: ${protocol}. Using http/protobuf.`\n );\n return new OTLPProtoTraceExporter();\n }\n}\n\nexport function getSpanProcessorsFromEnv(\n selfObsMeterProvider: MeterProvider | undefined\n): SpanProcessor[] {\n const exportersMap = new Map<string, () => SpanExporter>([\n ['otlp', () => getOtlpExporterFromEnv()],\n ['zipkin', () => new ZipkinExporter()],\n ['console', () => new ConsoleSpanExporter()],\n ]);\n const exporters: SpanExporter[] = [];\n const processors: SpanProcessor[] = [];\n let traceExportersList = Array.from(\n new Set(getStringListFromEnv('OTEL_TRACES_EXPORTER'))\n ).filter(s => s !== 'null');\n\n if (traceExportersList[0] === 'none') {\n diag.warn(\n 'OTEL_TRACES_EXPORTER contains \"none\". SDK will not be initialized.'\n );\n return [];\n }\n\n if (traceExportersList.length === 0) {\n diag.debug('OTEL_TRACES_EXPORTER is empty. Using default otlp exporter.');\n traceExportersList = ['otlp'];\n } else if (\n traceExportersList.length > 1 &&\n traceExportersList.includes('none')\n ) {\n diag.warn(\n 'OTEL_TRACES_EXPORTER contains \"none\" along with other exporters. Using default otlp exporter.'\n );\n traceExportersList = ['otlp'];\n }\n\n for (const name of traceExportersList) {\n const exporter = exportersMap.get(name)?.();\n if (exporter) {\n exporters.push(exporter);\n } else {\n diag.warn(`Unrecognized OTEL_TRACES_EXPORTER value: ${name}.`);\n }\n }\n\n for (const exp of exporters) {\n if (exp instanceof ConsoleSpanExporter) {\n processors.push(\n new SimpleSpanProcessor({ exporter: exp, selfObsMeterProvider })\n );\n } else {\n processors.push(\n createBatchSpanProcessorFromEnv(exp, selfObsMeterProvider)\n );\n }\n }\n\n if (exporters.length === 0) {\n diag.warn(\n 'Unable to set up trace exporter(s) due to invalid exporter and/or protocol values.'\n );\n }\n\n return processors;\n}\n\n/**\n * Get a propagator as defined by environment variables\n */\nexport function getPropagatorFromEnv(): TextMapPropagator | null | undefined {\n // Empty and undefined MUST be treated equal.\n const propagatorsEnvVarValue = getStringListFromEnv('OTEL_PROPAGATORS');\n if (propagatorsEnvVarValue == null) {\n // return undefined to fall back to default\n return undefined;\n }\n\n if (propagatorsEnvVarValue.includes('none')) {\n return null;\n }\n\n // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n ['tracecontext', () => new W3CTraceContextPropagator()],\n ['baggage', () => new W3CBaggagePropagator()],\n ['b3', () => new B3Propagator()],\n [\n 'b3multi',\n () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n ],\n ['jaeger', () => new JaegerPropagator()],\n ]);\n\n // Values MUST be deduplicated in order to register a Propagator only once.\n const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue));\n const validPropagators: TextMapPropagator[] = [];\n\n uniquePropagatorNames.forEach(name => {\n const propagator = propagatorsFactory.get(name)?.();\n if (!propagator) {\n diag.warn(\n `Propagator \"${name}\" requested through environment variable is unavailable.`\n );\n return;\n }\n\n validPropagators.push(propagator);\n });\n\n if (validPropagators.length === 0) {\n // null to signal that the default should **not** be used in its place.\n return null;\n } else if (uniquePropagatorNames.length === 1) {\n return validPropagators[0];\n } else {\n return new CompositePropagator({\n propagators: validPropagators,\n });\n }\n}\n\n/**\n * Get a propagator as defined by configuration model from configuration\n */\nexport function getPropagatorFromConfiguration(\n config: ConfigurationModel\n): TextMapPropagator | undefined {\n if (!config.propagator) {\n return undefined;\n }\n\n const configComposite = mergePropagatorCompositeConfig(\n config.propagator.composite,\n config.propagator.composite_list\n );\n if (!configComposite) {\n return undefined;\n }\n\n // TextMapPropagator config items are objects with a single key (the name).\n // Transform this into a more convenient `(name, value)` 2-tuple.\n //\n // As well, guard against two cases where the TypeScript type\n // `TextMapPropagatorConfigModel` does not exactly represent the JSON schema:\n // 1. `\"minProperties\": 1, \"maxProperties\": 1,`\n // 2. The type allows keys with an `undefined` value, but the JSON schema\n // does not.\n const kvFromItem = (\n item: TextMapPropagatorConfigModel\n ): [string, object | null] => {\n const keys = [];\n let value = undefined;\n for (const key of Object.keys(item)) {\n value = item[key];\n if (value === undefined) {\n continue;\n }\n keys.push(key);\n }\n if (keys.length !== 1) {\n throw new Error(\n `invalid \"propagator\" entry in configuration, there must be exactly one key (with a non-undefined value): ${inspect(item)}`\n );\n }\n return [keys[0], value as object | null];\n };\n\n // First pass: handle 'none', remove dupes.\n const names = new Set();\n const kvs = [];\n for (const item of configComposite) {\n const kv = kvFromItem(item);\n const k = kv[0];\n if (names.has(k)) {\n continue;\n }\n names.add(k);\n kvs.push(kv);\n if (k === 'none') {\n return undefined;\n }\n }\n\n // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n ['tracecontext', () => new W3CTraceContextPropagator()],\n ['baggage', () => new W3CBaggagePropagator()],\n ['b3', () => new B3Propagator()],\n [\n 'b3multi',\n () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n ],\n ['jaeger', () => new JaegerPropagator()],\n ]);\n\n const validPropagators: TextMapPropagator[] = [];\n for (const [name] of kvs) {\n const propagator = propagatorsFactory.get(name)?.();\n if (!propagator) {\n diag.warn(\n `Propagator \"${name}\" requested through configuration is unavailable.`\n );\n continue;\n }\n validPropagators.push(propagator);\n }\n\n if (validPropagators.length === 0) {\n return undefined;\n } else if (validPropagators.length === 1) {\n return validPropagators[0];\n } else {\n return new CompositePropagator({\n propagators: validPropagators,\n });\n }\n}\n\nexport function setupContextManager(\n contextManager: ContextManager | null | undefined\n) {\n // null means 'do not register'\n if (contextManager === null) {\n return;\n }\n\n // undefined means 'register default'\n if (contextManager === undefined) {\n const defaultContextManager = new AsyncLocalStorageContextManager();\n defaultContextManager.enable();\n context.setGlobalContextManager(defaultContextManager);\n return;\n }\n\n contextManager.enable();\n context.setGlobalContextManager(contextManager);\n}\n\nexport function setupPropagator(\n propagator: TextMapPropagator | null | undefined\n) {\n // null means 'do not register'\n if (propagator === null) {\n return;\n }\n\n // undefined means 'register default'\n if (propagator === undefined) {\n propagation.setGlobalPropagator(\n new CompositePropagator({\n propagators: [\n new W3CTraceContextPropagator(),\n new W3CBaggagePropagator(),\n ],\n })\n );\n return;\n }\n\n propagation.setGlobalPropagator(propagator);\n}\n\nexport function getKeyListFromObjectArray(\n obj: object[] | undefined\n): string[] | undefined {\n if (!obj || obj.length === 0) {\n return undefined;\n }\n\n const keys: string[] = [];\n for (const item of obj) {\n for (const key of Object.keys(item)) {\n keys.push(key);\n }\n }\n return keys;\n}\n\nexport function getNonNegativeNumberFromEnv(\n envVarName: string\n): number | undefined {\n const value = getNumberFromEnv(envVarName);\n if (value != null && value <= 0) {\n diag.warn(\n `${envVarName} (${value}) is invalid, expected number greater than 0, using default.`\n );\n return undefined;\n }\n return value;\n}\n\nexport function getPeriodicExportingMetricReaderFromEnv(\n exporter: PushMetricExporter\n): IMetricReader {\n const defaultTimeoutMillis = 30_000;\n const defaultIntervalMillis = 60_000;\n\n const rawExportIntervalMillis = getNonNegativeNumberFromEnv(\n 'OTEL_METRIC_EXPORT_INTERVAL'\n );\n const rawExportTimeoutMillis = getNonNegativeNumberFromEnv(\n 'OTEL_METRIC_EXPORT_TIMEOUT'\n );\n\n // Apply defaults\n const exportIntervalMillis = rawExportIntervalMillis ?? defaultIntervalMillis;\n let exportTimeoutMillis = rawExportTimeoutMillis ?? defaultTimeoutMillis;\n\n // Ensure timeout doesn't exceed interval\n if (exportTimeoutMillis > exportIntervalMillis) {\n // determine which env vars were set and which ones defaulted for logging purposes\n const timeoutSource =\n rawExportTimeoutMillis != null\n ? rawExportTimeoutMillis.toString()\n : `${defaultTimeoutMillis}, default`;\n const intervalSource =\n rawExportIntervalMillis != null\n ? rawExportIntervalMillis.toString()\n : `${defaultIntervalMillis}, default`;\n\n const bothSetByUser =\n rawExportTimeoutMillis != null && rawExportIntervalMillis != null;\n const logMessage = `OTEL_METRIC_EXPORT_TIMEOUT (${timeoutSource}) is greater than OTEL_METRIC_EXPORT_INTERVAL (${intervalSource}). Clamping timeout to interval value.`;\n\n // only bother users if they explicitly set both values.\n if (bothSetByUser) {\n diag.warn(logMessage);\n } else {\n diag.info(logMessage);\n }\n\n exportTimeoutMillis = exportIntervalMillis;\n }\n\n return new PeriodicExportingMetricReader({\n exportTimeoutMillis,\n exportIntervalMillis,\n exporter,\n });\n}\n\nexport function getOtlpMetricExporterFromEnv(): PushMetricExporter {\n const protocol =\n (\n getStringFromEnv('OTEL_EXPORTER_OTLP_METRICS_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 return new OTLPGrpcMetricExporter();\n case 'http/json':\n return new OTLPHttpMetricExporter();\n case 'http/protobuf':\n return new OTLPProtoMetricExporter();\n }\n\n diag.warn(\n `Unsupported OTLP metrics protocol: \"${protocol}\". Using http/protobuf.`\n );\n return new OTLPProtoMetricExporter();\n}\n\nfunction getMetricProducersFromConfiguration(\n producers: MetricProducerConfigModel[] | undefined\n): MetricProducer[] | undefined {\n if (!producers || producers.length === 0) {\n return undefined;\n }\n const result: MetricProducer[] = [];\n for (const producer of producers) {\n // Note: The \"opencensus\" MetricProducer is intentionally not supported.\n // It is deprecated in OpenTelemetry Configuration v1.2.0.\n diag.warn(\n `Unsupported metric producer in configuration: \"${producer}\". Skipping.`\n );\n }\n return result.length > 0 ? result : undefined;\n}\n\n/**\n * Map a declarative-config `temporality_preference` value to the enum the OTLP\n * metric exporters expect. Returns undefined for an unspecified preference so\n * the exporter falls back to its own default (cumulative).\n */\nfunction getMetricTemporalityPreference(\n preference: string | null | undefined\n): AggregationTemporalityPreference | undefined {\n switch (preference) {\n case 'delta':\n return AggregationTemporalityPreference.DELTA;\n case 'low_memory':\n return AggregationTemporalityPreference.LOWMEMORY;\n case 'cumulative':\n return AggregationTemporalityPreference.CUMULATIVE;\n default:\n return undefined;\n }\n}\n\n/**\n * Map a declarative-config `default_histogram_aggregation` value to an\n * AggregationSelector that applies the requested aggregation to histogram\n * instruments and leaves all other instrument types at their default. Returns\n * undefined for an unspecified value so the exporter uses its own default.\n */\nfunction getMetricAggregationPreference(\n aggregation: string | null | undefined\n): AggregationSelector | undefined {\n let histogramAggregation: AggregationOption;\n switch (aggregation) {\n case 'base2_exponential_bucket_histogram':\n histogramAggregation = { type: AggregationType.EXPONENTIAL_HISTOGRAM };\n break;\n case 'explicit_bucket_histogram':\n histogramAggregation = {\n type: AggregationType.EXPLICIT_BUCKET_HISTOGRAM,\n };\n break;\n default:\n return undefined;\n }\n return (instrumentType: InstrumentType): AggregationOption =>\n instrumentType === InstrumentType.HISTOGRAM\n ? histogramAggregation\n : { type: AggregationType.DEFAULT };\n}\n\nfunction getOtlpHttpMetricExporter(\n otlpHttp: OtlpHttpMetricExporterConfigModel\n): PushMetricExporter | undefined {\n const encoding = otlpHttp?.encoding ?? 'protobuf';\n const options = {\n compression:\n otlpHttp?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: otlpHttp?.endpoint ?? undefined,\n headers: getHeadersFromConfiguration(otlpHttp?.headers),\n timeoutMillis: validateExporterTimeout(otlpHttp?.timeout),\n httpAgentOptions: getHttpAgentOptionsFromTls(otlpHttp?.tls),\n temporalityPreference: getMetricTemporalityPreference(\n otlpHttp?.temporality_preference\n ),\n aggregationPreference: getMetricAggregationPreference(\n otlpHttp?.default_histogram_aggregation\n ),\n };\n if (encoding === 'json') {\n return new OTLPHttpMetricExporter(options);\n } else if (encoding === 'protobuf') {\n return new OTLPProtoMetricExporter(options);\n }\n diag.warn(`Unsupported OTLP metrics encoding: ${encoding}.`);\n return undefined;\n}\n\nfunction getOtlpGrpcMetricExporter(\n otlpGrpc: OtlpGrpcMetricExporterConfigModel\n): PushMetricExporter {\n return new OTLPGrpcMetricExporter({\n compression:\n otlpGrpc?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: otlpGrpc?.endpoint ?? undefined,\n timeoutMillis: validateExporterTimeout(otlpGrpc?.timeout),\n credentials: getGrpcCredentialsFromTls(otlpGrpc?.tls),\n metadata: getGrpcMetadataFromHeaders(otlpGrpc?.headers),\n temporalityPreference: getMetricTemporalityPreference(\n otlpGrpc?.temporality_preference\n ),\n aggregationPreference: getMetricAggregationPreference(\n otlpGrpc?.default_histogram_aggregation\n ),\n });\n}\n\nexport function getMetricExporter(\n exporter: PushMetricExporterConfigModel\n): PushMetricExporter | undefined {\n if (exporter.otlp_http !== undefined) {\n return getOtlpHttpMetricExporter(exporter.otlp_http);\n }\n if (exporter.otlp_grpc !== undefined) {\n return getOtlpGrpcMetricExporter(exporter.otlp_grpc);\n }\n if (exporter.console !== undefined) {\n return new ConsoleMetricExporter();\n }\n diag.warn('Unsupported Metric Exporter.');\n return undefined;\n}\n\nexport function getPeriodicMetricReaderFromConfiguration(\n periodic: PeriodicMetricReaderConfigModel\n): IMetricReader | undefined {\n if (!periodic.exporter) {\n diag.warn('Unsupported Metric Exporter.');\n return undefined;\n }\n\n const exporter = getMetricExporter(periodic.exporter);\n if (!exporter) {\n return undefined;\n }\n\n const metricProducers = getMetricProducersFromConfiguration(\n periodic.producers\n );\n\n // TODO(6425): add cardinality_limits\n return new PeriodicExportingMetricReader({\n exportIntervalMillis: periodic.interval ?? 60_000,\n exportTimeoutMillis: periodic.timeout ?? 30_000,\n exporter,\n metricProducers,\n });\n}\n\n/**\n * Get LoggerProviderConfig from environment variables.\n */\nexport function getLoggerProviderConfigFromEnv(): LoggerProviderOptions {\n return {\n logRecordLimits: {\n attributeCountLimit:\n getNonNegativeNumberFromEnv('OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT') ??\n getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT'),\n attributeValueLengthLimit:\n getNonNegativeNumberFromEnv(\n 'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT'\n ) ?? getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'),\n },\n };\n}\n\n/**\n * Get configuration for BatchLogRecordProcessor from environment variables.\n */\nexport function getBatchLogRecordProcessorConfigFromEnv(): Omit<\n BatchLogRecordProcessorOptions,\n 'exporter'\n> {\n return {\n maxQueueSize: getNonNegativeNumberFromEnv('OTEL_BLRP_MAX_QUEUE_SIZE'),\n scheduledDelayMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_SCHEDULE_DELAY'\n ),\n exportTimeoutMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_EXPORT_TIMEOUT'\n ),\n maxExportBatchSize: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE'\n ),\n };\n}\n\nexport function getBatchLogRecordProcessorFromEnv(\n exporter: LogRecordExporter\n): BatchLogRecordProcessor {\n return new BatchLogRecordProcessor({\n exporter,\n ...getBatchLogRecordProcessorConfigFromEnv(),\n });\n}\n\nfunction createLogRecordLimitsFromConfig(\n limits?: LogRecordLimitsConfigModel,\n attribute_limits?: AttributeLimitsConfigModel\n): LogRecordLimits {\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 };\n}\n\nexport function createLoggerProviderFromConfig(\n resource: Resource,\n logger_provider: LoggerProviderConfigModel,\n attribute_limits?: AttributeLimitsConfigModel\n): LoggerProvider {\n const processors = logger_provider.processors.map(p =>\n createLogRecordProcessorFromConfig(p)\n );\n const logRecordLimits = createLogRecordLimitsFromConfig(\n logger_provider.limits,\n attribute_limits\n );\n checkConfigUse('LoggerProvider', logger_provider, ['processors', 'limits']);\n\n return new LoggerProvider({\n resource,\n processors,\n logRecordLimits,\n // TODO: loggerConfigurator\n // TODO: meterProvider\n // Note: forceFlushTimeoutMillis not configurable via decl conf.\n });\n}\n\nexport function createLogRecordExporterFromConfig(\n exporter: LogRecordExporterConfigModel\n): LogRecordExporter {\n const [name, properties] = mustSingleEntry(exporter, 'LogRecordExporter');\n\n switch (name) {\n case 'otlp_http': {\n const props = properties as OtlpHttpExporterConfigModel;\n const commonOpts = {\n compression:\n props?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: props?.endpoint ?? undefined,\n headers: getHeadersFromConfiguration(props?.headers),\n timeoutMillis: validateExporterTimeout(props?.timeout),\n httpAgentOptions: getHttpAgentOptionsFromTls(props?.tls),\n };\n const encoding = props?.encoding ?? 'protobuf';\n switch (encoding) {\n case 'json':\n return new OTLPHttpLogExporter(commonOpts);\n case 'protobuf':\n return new OTLPProtoLogExporter(commonOpts);\n default:\n throw new Error(\n `unknown OtlpHttpExporter encoding in configuration: \"${encoding}\"`\n );\n }\n }\n\n case 'otlp_grpc': {\n const props = properties as OtlpGrpcExporterConfigModel;\n return new OTLPGrpcLogExporter({\n compression:\n props?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: props?.endpoint ?? undefined,\n timeoutMillis: validateExporterTimeout(props?.timeout),\n credentials: getGrpcCredentialsFromTls(props?.tls),\n metadata: getGrpcMetadataFromHeaders(props?.headers),\n });\n }\n\n case 'console':\n return new ConsoleLogRecordExporter();\n\n default:\n throw new Error(\n `unknown LogRecordExporter name in configuration: \"${name}\"`\n );\n }\n}\n\nexport function createLogRecordProcessorFromConfig(\n processor: LogRecordProcessorConfigModel\n): LogRecordProcessor {\n const [name, properties] = mustSingleEntry(processor, 'LogRecordProcessor');\n\n switch (name) {\n case 'batch': {\n const props = properties as BatchLogRecordProcessorConfigModel;\n const exporter = createLogRecordExporterFromConfig(props.exporter);\n return new BatchLogRecordProcessor({\n exporter,\n maxQueueSize: props.max_queue_size ?? undefined,\n maxExportBatchSize: props.max_export_batch_size ?? undefined,\n scheduledDelayMillis: props.schedule_delay ?? undefined,\n exportTimeoutMillis: props.export_timeout ?? undefined,\n });\n }\n\n case 'simple': {\n const props = properties as SimpleLogRecordProcessorConfigModel;\n const exporter = createLogRecordExporterFromConfig(props.exporter);\n return new SimpleLogRecordProcessor({ exporter });\n }\n\n default:\n throw new Error(`unknown LogRecordProcessor name: \"${name}\"`);\n }\n}\n\nexport function getHeadersFromConfiguration(\n headers: NameStringValuePairConfigModel[] | undefined\n): Record<string, string> | undefined {\n if (!headers) {\n return undefined;\n }\n const result: Record<string, string> = {};\n headers.forEach(header => {\n if (header.value !== null) {\n result[header.name] = header.value;\n }\n });\n return result;\n}\n\n/**\n * Validate an exporter timeout value. The spec says 0 means \"no limit\n * (infinity)\" but the JS exporters don't support that yet (see #6617).\n * Warn and return undefined so the exporter falls back to its default.\n */\nfunction validateExporterTimeout(\n timeout: number | null | undefined\n): number | undefined {\n if (timeout === null) {\n return undefined;\n } else if (timeout === 0) {\n diag.warn(\n 'Exporter timeout of 0 (infinite) is not supported. Using default timeout.'\n );\n return undefined;\n }\n return timeout;\n}\n\nexport function getHttpAgentOptionsFromTls(\n tls: HttpTlsConfigModel | undefined\n): { ca?: Buffer; cert?: Buffer; key?: Buffer } | undefined {\n if (tls && (tls.ca_file || tls.cert_file || tls.key_file)) {\n return {\n ca: readFileOrWarn(tls.ca_file, 'TLS CA'),\n cert: readFileOrWarn(tls.cert_file, 'TLS cert'),\n key: readFileOrWarn(tls.key_file, 'TLS key'),\n };\n }\n return undefined;\n}\n\nfunction getGrpcCredentialsFromTls(tls?: GrpcTlsConfigModel) {\n if (tls?.insecure) {\n return createInsecureCredentials();\n }\n const rootCert = readFileOrWarn(tls?.ca_file, 'TLS CA');\n const privateKey = readFileOrWarn(tls?.key_file, 'TLS key');\n const certChain = readFileOrWarn(tls?.cert_file, 'TLS cert');\n if (rootCert || privateKey || certChain) {\n try {\n return createSslCredentials(rootCert, privateKey, certChain);\n } catch (e) {\n diag.warn(`Failed to create gRPC SSL credentials: ${e}`);\n return undefined;\n }\n }\n return undefined;\n}\n\nfunction getGrpcMetadataFromHeaders(\n headers: NameStringValuePairConfigModel[] | undefined\n) {\n if (!headers || headers.length === 0) {\n return undefined;\n }\n const metadata = createEmptyMetadata();\n for (const header of headers) {\n if (header.value !== null) {\n metadata.set(header.name, header.value);\n }\n }\n return metadata;\n}\n\nfunction readFileOrWarn(\n filePath: string | null | undefined,\n label: string\n): Buffer | undefined {\n if (!filePath) return undefined;\n try {\n return fs.readFileSync(filePath);\n } catch (e) {\n diag.warn(`Failed to read ${label} file at ${filePath}: ${e}`);\n return undefined;\n }\n}\n\nexport function getSpanExporter(\n exporter: SpanExporterConfigModel\n): SpanExporter | undefined {\n if (exporter.otlp_http !== undefined) {\n const encoding = exporter.otlp_http?.encoding ?? 'protobuf';\n if (encoding === 'json') {\n return new OTLPHttpTraceExporter({\n compression:\n exporter.otlp_http?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_http?.endpoint ?? undefined,\n headers: getHeadersFromConfiguration(exporter.otlp_http?.headers),\n timeoutMillis: validateExporterTimeout(exporter.otlp_http?.timeout),\n httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http?.tls),\n });\n } else {\n return new OTLPProtoTraceExporter({\n compression:\n exporter.otlp_http?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_http?.endpoint ?? undefined,\n headers: getHeadersFromConfiguration(exporter.otlp_http?.headers),\n timeoutMillis: validateExporterTimeout(exporter.otlp_http?.timeout),\n httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http?.tls),\n });\n }\n } else if (exporter.otlp_grpc !== undefined) {\n return new OTLPGrpcTraceExporter({\n compression:\n exporter.otlp_grpc?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_grpc?.endpoint ?? undefined,\n timeoutMillis: validateExporterTimeout(exporter.otlp_grpc?.timeout),\n credentials: getGrpcCredentialsFromTls(exporter.otlp_grpc?.tls),\n metadata: getGrpcMetadataFromHeaders(exporter.otlp_grpc?.headers),\n });\n } else if (exporter.console !== undefined) {\n return new ConsoleSpanExporter();\n }\n diag.warn('Unsupported Exporter value. No Span Exporter registered');\n return undefined;\n}\n\nexport function getSpanProcessorsFromConfiguration(\n config: ConfigurationModel\n): SpanProcessor[] | undefined {\n const spanProcessors: SpanProcessor[] = [];\n config.tracer_provider?.processors?.forEach(processor => {\n if (processor.batch) {\n const exporter = getSpanExporter(processor.batch.exporter);\n if (exporter) {\n spanProcessors.push(\n new BatchSpanProcessor({\n exporter,\n maxQueueSize: processor.batch.max_queue_size ?? undefined,\n maxExportBatchSize:\n processor.batch.max_export_batch_size ?? undefined,\n scheduledDelayMillis: processor.batch.schedule_delay ?? undefined,\n exportTimeoutMillis: processor.batch.export_timeout ?? undefined,\n })\n );\n }\n }\n if (processor.simple) {\n const exporter = getSpanExporter(processor.simple.exporter);\n if (exporter) {\n spanProcessors.push(new SimpleSpanProcessor({ exporter }));\n }\n }\n });\n if (spanProcessors.length > 0) {\n return spanProcessors;\n }\n return undefined;\n}\n\nexport function getIdGeneratorFromConfiguration(\n config: ConfigurationModel\n): IdGenerator | undefined {\n const idGenerator = config.tracer_provider?.id_generator;\n if (!idGenerator) {\n return undefined;\n }\n if (idGenerator.random !== undefined) {\n return new RandomIdGenerator();\n }\n // Any other key is a third-party / custom id_generator type which we\n // don't currently support. Warn and fall back to SDK default.\n const unknownKeys = Object.keys(idGenerator).filter(k => k !== 'random');\n if (unknownKeys.length > 0) {\n diag.warn(\n `Unsupported id_generator type(s): ${unknownKeys.join(', ')}. Using default.`\n );\n }\n return undefined;\n}\n\nexport function getMeterReadersFromConfiguration(\n config: ConfigurationModel\n): IMetricReader[] | undefined {\n const metricReaders: IMetricReader[] = [];\n config.meter_provider?.readers?.forEach(reader => {\n if (reader.periodic) {\n const periodicReader = getPeriodicMetricReaderFromConfiguration(\n reader.periodic\n );\n if (periodicReader) {\n metricReaders.push(periodicReader);\n }\n }\n });\n if (metricReaders.length > 0) {\n return metricReaders;\n }\n return undefined;\n}\n\nexport function getInstrumentType(\n instrument: InstrumentTypeConfigModel\n): InstrumentType | undefined {\n switch (instrument) {\n case 'counter':\n return InstrumentType.COUNTER;\n case 'gauge':\n return InstrumentType.GAUGE;\n case 'histogram':\n return InstrumentType.HISTOGRAM;\n case 'observable_counter':\n return InstrumentType.OBSERVABLE_COUNTER;\n case 'observable_gauge':\n return InstrumentType.OBSERVABLE_GAUGE;\n case 'observable_up_down_counter':\n return InstrumentType.OBSERVABLE_UP_DOWN_COUNTER;\n case 'up_down_counter':\n return InstrumentType.UP_DOWN_COUNTER;\n default:\n diag.warn(`Unsupported instrument type: ${instrument}`);\n return undefined;\n }\n}\n\nexport function getAggregationType(\n aggregation: AggregationConfigModel\n): AggregationOption | undefined {\n if (aggregation.default) {\n return {\n type: AggregationType.DEFAULT,\n };\n }\n if (aggregation.drop) {\n return {\n type: AggregationType.DROP,\n };\n }\n if (aggregation.explicit_bucket_histogram) {\n return {\n type: AggregationType.EXPLICIT_BUCKET_HISTOGRAM,\n options: {\n recordMinMax:\n aggregation.explicit_bucket_histogram.record_min_max ?? true,\n boundaries: aggregation.explicit_bucket_histogram.boundaries ?? [\n 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500,\n 10000,\n ],\n },\n };\n }\n\n if (aggregation.base2_exponential_bucket_histogram) {\n return {\n type: AggregationType.EXPONENTIAL_HISTOGRAM,\n options: {\n recordMinMax:\n aggregation.base2_exponential_bucket_histogram.record_min_max ??\n undefined,\n maxSize:\n aggregation.base2_exponential_bucket_histogram.max_size ?? undefined,\n },\n };\n }\n if (aggregation.last_value) {\n return {\n type: AggregationType.LAST_VALUE,\n };\n }\n if (aggregation.sum) {\n return {\n type: AggregationType.SUM,\n };\n }\n\n diag.warn('Unsupported aggregation type');\n return undefined;\n}\n\nexport function getMeterViewsFromConfiguration(\n config: ConfigurationModel\n): ViewOptions[] | undefined {\n const metricViews: ViewOptions[] = [];\n config.meter_provider?.views?.forEach(view => {\n const viewOption: ViewOptions = {};\n if (view.selector) {\n if (view.selector.instrument_name) {\n viewOption.instrumentName = view.selector.instrument_name;\n }\n if (view.selector.instrument_type) {\n const instrumentType = getInstrumentType(view.selector.instrument_type);\n if (instrumentType) {\n viewOption.instrumentType = instrumentType;\n }\n }\n if (view.selector.unit) {\n viewOption.instrumentUnit = view.selector.unit;\n }\n if (view.selector.meter_name) {\n viewOption.meterName = view.selector.meter_name;\n }\n if (view.selector.meter_version) {\n viewOption.meterVersion = view.selector.meter_version;\n }\n if (view.selector.meter_schema_url) {\n viewOption.meterSchemaUrl = view.selector.meter_schema_url;\n }\n }\n if (view.stream) {\n if (view.stream.name) {\n viewOption.name = view.stream.name;\n }\n viewOption.aggregationCardinalityLimit =\n view.stream.aggregation_cardinality_limit ?? 2_000;\n if (view.stream.description) {\n viewOption.description = view.stream.description;\n }\n if (view.stream.aggregation) {\n const aggregationType = getAggregationType(view.stream.aggregation);\n if (aggregationType) {\n viewOption.aggregation = aggregationType;\n }\n }\n if (view.stream.attribute_keys) {\n const processors: IAttributesProcessor[] = [];\n if (\n view.stream.attribute_keys.included &&\n view.stream.attribute_keys.included.length > 0\n ) {\n processors.push(\n createAllowListAttributesProcessor(\n view.stream.attribute_keys.included\n )\n );\n }\n if (\n view.stream.attribute_keys.excluded &&\n view.stream.attribute_keys.excluded.length > 0\n ) {\n processors.push(\n createDenyListAttributesProcessor(\n view.stream.attribute_keys.excluded\n )\n );\n }\n if (processors.length > 0) {\n viewOption.attributesProcessors = processors;\n }\n }\n }\n\n if (Object.keys(viewOption).length > 0) {\n metricViews.push(viewOption);\n }\n });\n if (metricViews.length > 0) {\n return metricViews;\n }\n return undefined;\n}\n\nexport function getInstanceID(config: ConfigurationModel): string | undefined {\n if (config.resource?.attributes) {\n for (let i = 0; i < config.resource.attributes.length; i++) {\n const element = config.resource.attributes[i];\n if (element.name === 'service.instance.id') {\n return element.value?.toString();\n }\n }\n }\n return undefined;\n}\n\nconst DEFAULT_RATIO = 1;\n\n/**\n * Returns the {@link Sampler} configured under `tracer_provider.sampler` in\n * the declarative configuration, or `undefined` if none is set (in which case\n * the SDK applies its default sampler).\n */\nexport function getSamplerFromConfiguration(\n config: ConfigurationModel\n): Sampler | undefined {\n const samplerConfig = config.tracer_provider?.sampler;\n if (!samplerConfig) {\n return undefined;\n }\n return buildSamplerFromConfig(samplerConfig);\n}\n\n/**\n * Builds a {@link Sampler} from a {@link SamplerConfigModel} data model.\n * This allows sampler construction from declarative configuration.\n */\nexport function buildSamplerFromConfig(\n samplerConfig: SamplerConfigModel\n): Sampler {\n if (samplerConfig.always_on !== undefined) {\n return new AlwaysOnSampler();\n }\n if (samplerConfig.always_off !== undefined) {\n return new AlwaysOffSampler();\n }\n if (samplerConfig.trace_id_ratio_based !== undefined) {\n return new TraceIdRatioBasedSampler(\n samplerConfig.trace_id_ratio_based?.ratio ?? DEFAULT_RATIO\n );\n }\n if (samplerConfig.parent_based !== undefined) {\n const pb = samplerConfig.parent_based ?? {};\n return new ParentBasedSampler({\n root: pb.root ? buildSamplerFromConfig(pb.root) : new AlwaysOnSampler(),\n remoteParentSampled: pb.remote_parent_sampled\n ? buildSamplerFromConfig(pb.remote_parent_sampled)\n : undefined,\n remoteParentNotSampled: pb.remote_parent_not_sampled\n ? buildSamplerFromConfig(pb.remote_parent_not_sampled)\n : undefined,\n localParentSampled: pb.local_parent_sampled\n ? buildSamplerFromConfig(pb.local_parent_sampled)\n : undefined,\n localParentNotSampled: pb.local_parent_not_sampled\n ? buildSamplerFromConfig(pb.local_parent_not_sampled)\n : undefined,\n });\n }\n diag.warn('Unknown sampler config, defaulting to ParentBased(AlwaysOn).');\n return new ParentBasedSampler({ root: new AlwaysOnSampler() });\n}\n\n/**\n * Warn if some props from a declarative config object have not been handled.\n *\n * This is intended to be used by `create*FromConfig()` functions. It is a low\n * tech mechanism to add awareness when a given valid config is not being\n * completely handled. This could help when properties are added to the\n * configuration schema. (A higher tech mechanism that wraps the parsed\n * configuration during `create()` and watches for untouched properties\n * might be nice.)\n */\nfunction checkConfigUse(\n name: string,\n props: object | undefined,\n handledProps: string[]\n) {\n if (!props) return;\n // Dev note: I'd use Set#difference, but that requires Node.js v22.\n const unhandledProps = Object.keys(props).filter(\n k => !handledProps.includes(k)\n );\n\n if (unhandledProps.length > 0) {\n diag.warn(\n `Config warning: some specified ${name} configuration properties were not handled by SDK setup: ${JSON.stringify(unhandledProps)}`\n );\n }\n}\n\n/**\n * Return the single non-undefined entry in the given config object, or throw.\n *\n * It is common for Declarative Configuration to have config objects with\n * a single entry, e.g.\n *\n * \"LogRecordProcessor\": {\n * \"type\": \"object\",\n * \"additionalProperties\": {\n * \"type\": [\n * \"object\",\n * \"null\"\n * ]\n * },\n * \"minProperties\": 1,\n * \"maxProperties\": 1,\n *\n * The TypeScript types cannot express the minProperties/maxProperties from the\n * JSON schema. We guard against that here.\n */\nfunction mustSingleEntry(\n configObj: Record<string, unknown>,\n configTypeName: string\n): [string, unknown] {\n const entries = Object.entries(configObj).filter(\n ([_name, properties]) => properties !== undefined\n );\n\n if (entries.length !== 1) {\n const entryNames = entries.map(e => e[0]);\n throw Error(\n `invalid ${configTypeName} in configuration: must have exactly one entry: entries=${JSON.stringify(entryNames)}`\n );\n }\n\n return entries[0];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n ContextManager,\n MeterProvider,\n TextMapPropagator,\n} from '@opentelemetry/api';\nimport { context, diag, propagation } from '@opentelemetry/api';\nimport {\n CompositePropagator,\n getNumberFromEnv,\n getStringFromEnv,\n getStringListFromEnv,\n W3CBaggagePropagator,\n W3CTraceContextPropagator,\n} from '@opentelemetry/core';\nimport { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';\nimport { ZipkinExporter } from '@opentelemetry/exporter-zipkin';\nimport type {\n DetectedResourceAttributes,\n Resource,\n ResourceDetector,\n} from '@opentelemetry/resources';\nimport {\n envDetector,\n hostDetector,\n osDetector,\n processDetector,\n resourceFromAttributes,\n serviceInstanceIdDetector,\n} from '@opentelemetry/resources';\nimport type {\n IdGenerator,\n Sampler,\n SpanExporter,\n SpanProcessor,\n} from '@opentelemetry/sdk-trace';\nimport {\n AlwaysOffSampler,\n AlwaysOnSampler,\n BatchSpanProcessor,\n ConsoleSpanExporter,\n ParentBasedSampler,\n RandomIdGenerator,\n SimpleSpanProcessor,\n TraceIdRatioBasedSampler,\n} from '@opentelemetry/sdk-trace';\nimport { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3';\nimport { JaegerPropagator } from '@opentelemetry/propagator-jaeger';\nimport { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\nimport { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';\nimport {\n createEmptyMetadata,\n createInsecureCredentials,\n createSslCredentials,\n} from '@opentelemetry/otlp-grpc-exporter-base';\nimport type {\n ConfigurationModel,\n InstrumentTypeConfigModel,\n AggregationConfigModel,\n MetricProducerConfigModel,\n PeriodicMetricReaderConfigModel,\n PushMetricExporterConfigModel,\n OtlpHttpMetricExporterConfigModel,\n OtlpGrpcMetricExporterConfigModel,\n SpanExporterConfigModel,\n SamplerConfigModel,\n NameStringValuePairConfigModel,\n HttpTlsConfigModel,\n GrpcTlsConfigModel,\n TextMapPropagatorConfigModel,\n} from '@opentelemetry/configuration';\nimport {\n mergePropagatorCompositeConfig,\n mergeResourceAttributesConfig,\n} from '@opentelemetry/configuration';\nimport type {\n AggregationOption,\n AggregationSelector,\n IAttributesProcessor,\n IMetricReader,\n PushMetricExporter,\n ViewOptions,\n} from '@opentelemetry/sdk-metrics';\nimport {\n AggregationType,\n ConsoleMetricExporter,\n createAllowListAttributesProcessor,\n createDenyListAttributesProcessor,\n InstrumentType,\n PeriodicExportingMetricReader,\n} from '@opentelemetry/sdk-metrics';\nimport { OTLPMetricExporter as OTLPGrpcMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';\nimport { OTLPMetricExporter as OTLPHttpMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { AggregationTemporalityPreference } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { OTLPMetricExporter as OTLPProtoMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto';\nimport type {\n BatchLogRecordProcessorOptions,\n LogRecordExporter,\n LoggerProviderOptions,\n} from '@opentelemetry/sdk-logs';\nimport type { MetricProducer } from '@opentelemetry/sdk-metrics';\nimport { BatchLogRecordProcessor } from '@opentelemetry/sdk-logs';\nimport * as fs from 'fs';\nimport { inspect } from 'util';\nimport { createBatchSpanProcessorFromEnv } from './create-from-env';\n\nconst RESOURCE_DETECTOR_ENVIRONMENT = 'env';\nconst RESOURCE_DETECTOR_HOST = 'host';\nconst RESOURCE_DETECTOR_OS = 'os';\nconst RESOURCE_DETECTOR_PROCESS = 'process';\nconst RESOURCE_DETECTOR_SERVICE_INSTANCE_ID = 'serviceinstance';\n\nexport function getResourceFromConfiguration(\n config: ConfigurationModel\n): Resource | undefined {\n if (!config.resource) {\n return undefined;\n }\n\n const configAttrs = mergeResourceAttributesConfig(\n config.resource.attributes,\n config.resource.attributes_list\n );\n if (!configAttrs) {\n return undefined;\n }\n\n const attrs: DetectedResourceAttributes = {};\n for (let i = 0; i < configAttrs.length; i++) {\n const a = configAttrs[i];\n if (a.value !== null) {\n attrs[a.name] = a.value;\n }\n }\n return resourceFromAttributes(attrs, {\n schemaUrl: config.resource.schema_url ?? undefined,\n });\n}\n\nexport function getResourceDetectorsFromEnv(): Array<ResourceDetector> {\n // When updating this list, make sure to also update the section `resourceDetectors` on README.\n const resourceDetectors = new Map<string, ResourceDetector>([\n [RESOURCE_DETECTOR_HOST, hostDetector],\n [RESOURCE_DETECTOR_OS, osDetector],\n [RESOURCE_DETECTOR_SERVICE_INSTANCE_ID, serviceInstanceIdDetector],\n [RESOURCE_DETECTOR_PROCESS, processDetector],\n [RESOURCE_DETECTOR_ENVIRONMENT, envDetector],\n ]);\n\n const resourceDetectorsFromEnv = getStringListFromEnv(\n 'OTEL_NODE_RESOURCE_DETECTORS'\n ) ?? ['all'];\n\n if (resourceDetectorsFromEnv.includes('all')) {\n return [...resourceDetectors.values()].flat();\n }\n\n if (resourceDetectorsFromEnv.includes('none')) {\n return [];\n }\n\n return resourceDetectorsFromEnv.flatMap(detector => {\n const resourceDetector = resourceDetectors.get(detector);\n if (!resourceDetector) {\n diag.warn(\n `Invalid resource detector \"${detector}\" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`\n );\n }\n return resourceDetector || [];\n });\n}\n\nexport function getResourceDetectorsFromConfiguration(\n config: ConfigurationModel\n): Array<ResourceDetector> {\n const detectors = config.resource?.['detection/development']?.detectors ?? [];\n\n return detectors.flatMap(detector => {\n const result: ResourceDetector[] = [];\n if (detector.host !== undefined) result.push(hostDetector);\n if (detector.os !== undefined) result.push(osDetector);\n if (detector.process !== undefined) result.push(processDetector);\n if (detector.service !== undefined) result.push(serviceInstanceIdDetector);\n if (detector.env !== undefined) result.push(envDetector);\n return result;\n });\n}\n\nexport function getOtlpProtocolFromEnv(): string {\n return (\n getStringFromEnv('OTEL_EXPORTER_OTLP_TRACES_PROTOCOL') ??\n getStringFromEnv('OTEL_EXPORTER_OTLP_PROTOCOL') ??\n 'http/protobuf'\n );\n}\n\nfunction getOtlpExporterFromEnv(): SpanExporter {\n const protocol = getOtlpProtocolFromEnv();\n\n switch (protocol) {\n case 'grpc':\n return new OTLPGrpcTraceExporter();\n case 'http/json':\n return new OTLPHttpTraceExporter();\n case 'http/protobuf':\n return new OTLPProtoTraceExporter();\n default:\n diag.warn(\n `Unsupported OTLP traces protocol: ${protocol}. Using http/protobuf.`\n );\n return new OTLPProtoTraceExporter();\n }\n}\n\nexport function getSpanProcessorsFromEnv(\n selfObsMeterProvider: MeterProvider | undefined\n): SpanProcessor[] {\n const exportersMap = new Map<string, () => SpanExporter>([\n ['otlp', () => getOtlpExporterFromEnv()],\n ['zipkin', () => new ZipkinExporter()],\n ['console', () => new ConsoleSpanExporter()],\n ]);\n const exporters: SpanExporter[] = [];\n const processors: SpanProcessor[] = [];\n let traceExportersList = Array.from(\n new Set(getStringListFromEnv('OTEL_TRACES_EXPORTER'))\n ).filter(s => s !== 'null');\n\n if (traceExportersList[0] === 'none') {\n diag.warn(\n 'OTEL_TRACES_EXPORTER contains \"none\". SDK will not be initialized.'\n );\n return [];\n }\n\n if (traceExportersList.length === 0) {\n diag.debug('OTEL_TRACES_EXPORTER is empty. Using default otlp exporter.');\n traceExportersList = ['otlp'];\n } else if (\n traceExportersList.length > 1 &&\n traceExportersList.includes('none')\n ) {\n diag.warn(\n 'OTEL_TRACES_EXPORTER contains \"none\" along with other exporters. Using default otlp exporter.'\n );\n traceExportersList = ['otlp'];\n }\n\n for (const name of traceExportersList) {\n const exporter = exportersMap.get(name)?.();\n if (exporter) {\n exporters.push(exporter);\n } else {\n diag.warn(`Unrecognized OTEL_TRACES_EXPORTER value: ${name}.`);\n }\n }\n\n for (const exp of exporters) {\n if (exp instanceof ConsoleSpanExporter) {\n processors.push(\n new SimpleSpanProcessor({ exporter: exp, selfObsMeterProvider })\n );\n } else {\n processors.push(\n createBatchSpanProcessorFromEnv(exp, selfObsMeterProvider)\n );\n }\n }\n\n if (exporters.length === 0) {\n diag.warn(\n 'Unable to set up trace exporter(s) due to invalid exporter and/or protocol values.'\n );\n }\n\n return processors;\n}\n\n/**\n * Get a propagator as defined by environment variables\n */\nexport function getPropagatorFromEnv(): TextMapPropagator | null | undefined {\n // Empty and undefined MUST be treated equal.\n const propagatorsEnvVarValue = getStringListFromEnv('OTEL_PROPAGATORS');\n if (propagatorsEnvVarValue == null) {\n // return undefined to fall back to default\n return undefined;\n }\n\n if (propagatorsEnvVarValue.includes('none')) {\n return null;\n }\n\n // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n ['tracecontext', () => new W3CTraceContextPropagator()],\n ['baggage', () => new W3CBaggagePropagator()],\n ['b3', () => new B3Propagator()],\n [\n 'b3multi',\n () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n ],\n [\n 'jaeger',\n () => {\n diag.warn(\n 'The Jaeger propagator is deprecated and will be removed in a future release. Use the W3C TraceContext propagator (\"tracecontext\") instead.'\n );\n return new JaegerPropagator();\n },\n ],\n ]);\n\n // Values MUST be deduplicated in order to register a Propagator only once.\n const uniquePropagatorNames = Array.from(new Set(propagatorsEnvVarValue));\n const validPropagators: TextMapPropagator[] = [];\n\n uniquePropagatorNames.forEach(name => {\n const propagator = propagatorsFactory.get(name)?.();\n if (!propagator) {\n diag.warn(\n `Propagator \"${name}\" requested through environment variable is unavailable.`\n );\n return;\n }\n\n validPropagators.push(propagator);\n });\n\n if (validPropagators.length === 0) {\n // null to signal that the default should **not** be used in its place.\n return null;\n } else if (uniquePropagatorNames.length === 1) {\n return validPropagators[0];\n } else {\n return new CompositePropagator({\n propagators: validPropagators,\n });\n }\n}\n\n/**\n * Get a propagator as defined by configuration model from configuration\n */\nexport function getPropagatorFromConfiguration(\n config: ConfigurationModel\n): TextMapPropagator | undefined {\n if (!config.propagator) {\n return undefined;\n }\n\n const configComposite = mergePropagatorCompositeConfig(\n config.propagator.composite,\n config.propagator.composite_list\n );\n if (!configComposite) {\n return undefined;\n }\n\n // TextMapPropagator config items are objects with a single key (the name).\n // Transform this into a more convenient `(name, value)` 2-tuple.\n //\n // As well, guard against two cases where the TypeScript type\n // `TextMapPropagatorConfigModel` does not exactly represent the JSON schema:\n // 1. `\"minProperties\": 1, \"maxProperties\": 1,`\n // 2. The type allows keys with an `undefined` value, but the JSON schema\n // does not.\n const kvFromItem = (\n item: TextMapPropagatorConfigModel\n ): [string, object | null] => {\n const keys = [];\n let value = undefined;\n for (const key of Object.keys(item)) {\n value = item[key];\n if (value === undefined) {\n continue;\n }\n keys.push(key);\n }\n if (keys.length !== 1) {\n throw new Error(\n `invalid \"propagator\" entry in configuration, there must be exactly one key (with a non-undefined value): ${inspect(item)}`\n );\n }\n return [keys[0], value as object | null];\n };\n\n // First pass: handle 'none', remove dupes.\n const names = new Set();\n const kvs = [];\n for (const item of configComposite) {\n const kv = kvFromItem(item);\n const k = kv[0];\n if (names.has(k)) {\n continue;\n }\n names.add(k);\n kvs.push(kv);\n if (k === 'none') {\n return undefined;\n }\n }\n\n // Implementation note: this only contains specification required propagators that are actually hosted in this repo.\n // Any other propagators (like aws, aws-lambda, should go into `@opentelemetry/auto-configuration-propagators` instead).\n const propagatorsFactory = new Map<string, () => TextMapPropagator>([\n ['tracecontext', () => new W3CTraceContextPropagator()],\n ['baggage', () => new W3CBaggagePropagator()],\n ['b3', () => new B3Propagator()],\n [\n 'b3multi',\n () => new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),\n ],\n [\n 'jaeger',\n () => {\n diag.warn(\n 'The Jaeger propagator is deprecated and will be removed in a future release. Use the W3C TraceContext propagator (\"tracecontext\") instead.'\n );\n return new JaegerPropagator();\n },\n ],\n ]);\n\n const validPropagators: TextMapPropagator[] = [];\n for (const [name] of kvs) {\n const propagator = propagatorsFactory.get(name)?.();\n if (!propagator) {\n diag.warn(\n `Propagator \"${name}\" requested through configuration is unavailable.`\n );\n continue;\n }\n validPropagators.push(propagator);\n }\n\n if (validPropagators.length === 0) {\n return undefined;\n } else if (validPropagators.length === 1) {\n return validPropagators[0];\n } else {\n return new CompositePropagator({\n propagators: validPropagators,\n });\n }\n}\n\nexport function setupContextManager(\n contextManager: ContextManager | null | undefined\n) {\n // null means 'do not register'\n if (contextManager === null) {\n return;\n }\n\n // undefined means 'register default'\n if (contextManager === undefined) {\n const defaultContextManager = new AsyncLocalStorageContextManager();\n defaultContextManager.enable();\n context.setGlobalContextManager(defaultContextManager);\n return;\n }\n\n contextManager.enable();\n context.setGlobalContextManager(contextManager);\n}\n\nexport function setupPropagator(\n propagator: TextMapPropagator | null | undefined\n) {\n // null means 'do not register'\n if (propagator === null) {\n return;\n }\n\n // undefined means 'register default'\n if (propagator === undefined) {\n propagation.setGlobalPropagator(\n new CompositePropagator({\n propagators: [\n new W3CTraceContextPropagator(),\n new W3CBaggagePropagator(),\n ],\n })\n );\n return;\n }\n\n propagation.setGlobalPropagator(propagator);\n}\n\nexport function getKeyListFromObjectArray(\n obj: object[] | undefined\n): string[] | undefined {\n if (!obj || obj.length === 0) {\n return undefined;\n }\n\n const keys: string[] = [];\n for (const item of obj) {\n for (const key of Object.keys(item)) {\n keys.push(key);\n }\n }\n return keys;\n}\n\nexport function getNonNegativeNumberFromEnv(\n envVarName: string\n): number | undefined {\n const value = getNumberFromEnv(envVarName);\n if (value != null && value <= 0) {\n diag.warn(\n `${envVarName} (${value}) is invalid, expected number greater than 0, using default.`\n );\n return undefined;\n }\n return value;\n}\n\nexport function getPeriodicExportingMetricReaderFromEnv(\n exporter: PushMetricExporter\n): IMetricReader {\n const defaultTimeoutMillis = 30_000;\n const defaultIntervalMillis = 60_000;\n\n const rawExportIntervalMillis = getNonNegativeNumberFromEnv(\n 'OTEL_METRIC_EXPORT_INTERVAL'\n );\n const rawExportTimeoutMillis = getNonNegativeNumberFromEnv(\n 'OTEL_METRIC_EXPORT_TIMEOUT'\n );\n\n // Apply defaults\n const exportIntervalMillis = rawExportIntervalMillis ?? defaultIntervalMillis;\n let exportTimeoutMillis = rawExportTimeoutMillis ?? defaultTimeoutMillis;\n\n // Ensure timeout doesn't exceed interval\n if (exportTimeoutMillis > exportIntervalMillis) {\n // determine which env vars were set and which ones defaulted for logging purposes\n const timeoutSource =\n rawExportTimeoutMillis != null\n ? rawExportTimeoutMillis.toString()\n : `${defaultTimeoutMillis}, default`;\n const intervalSource =\n rawExportIntervalMillis != null\n ? rawExportIntervalMillis.toString()\n : `${defaultIntervalMillis}, default`;\n\n const bothSetByUser =\n rawExportTimeoutMillis != null && rawExportIntervalMillis != null;\n const logMessage = `OTEL_METRIC_EXPORT_TIMEOUT (${timeoutSource}) is greater than OTEL_METRIC_EXPORT_INTERVAL (${intervalSource}). Clamping timeout to interval value.`;\n\n // only bother users if they explicitly set both values.\n if (bothSetByUser) {\n diag.warn(logMessage);\n } else {\n diag.info(logMessage);\n }\n\n exportTimeoutMillis = exportIntervalMillis;\n }\n\n return new PeriodicExportingMetricReader({\n exportTimeoutMillis,\n exportIntervalMillis,\n exporter,\n });\n}\n\nexport function getOtlpMetricExporterFromEnv(): PushMetricExporter {\n const protocol =\n (\n getStringFromEnv('OTEL_EXPORTER_OTLP_METRICS_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 return new OTLPGrpcMetricExporter();\n case 'http/json':\n return new OTLPHttpMetricExporter();\n case 'http/protobuf':\n return new OTLPProtoMetricExporter();\n }\n\n diag.warn(\n `Unsupported OTLP metrics protocol: \"${protocol}\". Using http/protobuf.`\n );\n return new OTLPProtoMetricExporter();\n}\n\nfunction getMetricProducersFromConfiguration(\n producers: MetricProducerConfigModel[] | undefined\n): MetricProducer[] | undefined {\n if (!producers || producers.length === 0) {\n return undefined;\n }\n const result: MetricProducer[] = [];\n for (const producer of producers) {\n // Note: The \"opencensus\" MetricProducer is intentionally not supported.\n // It is deprecated in OpenTelemetry Configuration v1.2.0.\n diag.warn(\n `Unsupported metric producer in configuration: \"${producer}\". Skipping.`\n );\n }\n return result.length > 0 ? result : undefined;\n}\n\n/**\n * Map a declarative-config `temporality_preference` value to the enum the OTLP\n * metric exporters expect. Returns undefined for an unspecified preference so\n * the exporter falls back to its own default (cumulative).\n */\nfunction getMetricTemporalityPreference(\n preference: string | null | undefined\n): AggregationTemporalityPreference | undefined {\n switch (preference) {\n case 'delta':\n return AggregationTemporalityPreference.DELTA;\n case 'low_memory':\n return AggregationTemporalityPreference.LOWMEMORY;\n case 'cumulative':\n return AggregationTemporalityPreference.CUMULATIVE;\n default:\n return undefined;\n }\n}\n\n/**\n * Map a declarative-config `default_histogram_aggregation` value to an\n * AggregationSelector that applies the requested aggregation to histogram\n * instruments and leaves all other instrument types at their default. Returns\n * undefined for an unspecified value so the exporter uses its own default.\n */\nfunction getMetricAggregationPreference(\n aggregation: string | null | undefined\n): AggregationSelector | undefined {\n let histogramAggregation: AggregationOption;\n switch (aggregation) {\n case 'base2_exponential_bucket_histogram':\n histogramAggregation = { type: AggregationType.EXPONENTIAL_HISTOGRAM };\n break;\n case 'explicit_bucket_histogram':\n histogramAggregation = {\n type: AggregationType.EXPLICIT_BUCKET_HISTOGRAM,\n };\n break;\n default:\n return undefined;\n }\n return (instrumentType: InstrumentType): AggregationOption =>\n instrumentType === InstrumentType.HISTOGRAM\n ? histogramAggregation\n : { type: AggregationType.DEFAULT };\n}\n\nfunction getOtlpHttpMetricExporter(\n otlpHttp: OtlpHttpMetricExporterConfigModel\n): PushMetricExporter | undefined {\n const encoding = otlpHttp?.encoding ?? 'protobuf';\n const options = {\n compression:\n otlpHttp?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: otlpHttp?.endpoint ?? undefined,\n headers: getHeadersFromConfiguration(otlpHttp?.headers),\n timeoutMillis: validateExporterTimeout(otlpHttp?.timeout),\n httpAgentOptions: getHttpAgentOptionsFromTls(otlpHttp?.tls),\n temporalityPreference: getMetricTemporalityPreference(\n otlpHttp?.temporality_preference\n ),\n aggregationPreference: getMetricAggregationPreference(\n otlpHttp?.default_histogram_aggregation\n ),\n };\n if (encoding === 'json') {\n return new OTLPHttpMetricExporter(options);\n } else if (encoding === 'protobuf') {\n return new OTLPProtoMetricExporter(options);\n }\n diag.warn(`Unsupported OTLP metrics encoding: ${encoding}.`);\n return undefined;\n}\n\nfunction getOtlpGrpcMetricExporter(\n otlpGrpc: OtlpGrpcMetricExporterConfigModel\n): PushMetricExporter {\n return new OTLPGrpcMetricExporter({\n compression:\n otlpGrpc?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: otlpGrpc?.endpoint ?? undefined,\n timeoutMillis: validateExporterTimeout(otlpGrpc?.timeout),\n credentials: getGrpcCredentialsFromTls(otlpGrpc?.tls),\n metadata: getGrpcMetadataFromHeaders(otlpGrpc?.headers),\n temporalityPreference: getMetricTemporalityPreference(\n otlpGrpc?.temporality_preference\n ),\n aggregationPreference: getMetricAggregationPreference(\n otlpGrpc?.default_histogram_aggregation\n ),\n });\n}\n\nexport function getMetricExporter(\n exporter: PushMetricExporterConfigModel\n): PushMetricExporter | undefined {\n if (exporter.otlp_http !== undefined) {\n return getOtlpHttpMetricExporter(exporter.otlp_http);\n }\n if (exporter.otlp_grpc !== undefined) {\n return getOtlpGrpcMetricExporter(exporter.otlp_grpc);\n }\n if (exporter.console !== undefined) {\n return new ConsoleMetricExporter();\n }\n diag.warn('Unsupported Metric Exporter.');\n return undefined;\n}\n\nexport function getPeriodicMetricReaderFromConfiguration(\n periodic: PeriodicMetricReaderConfigModel\n): IMetricReader | undefined {\n if (!periodic.exporter) {\n diag.warn('Unsupported Metric Exporter.');\n return undefined;\n }\n\n const exporter = getMetricExporter(periodic.exporter);\n if (!exporter) {\n return undefined;\n }\n\n const metricProducers = getMetricProducersFromConfiguration(\n periodic.producers\n );\n\n // TODO(6425): add cardinality_limits\n return new PeriodicExportingMetricReader({\n exportIntervalMillis: periodic.interval ?? 60_000,\n exportTimeoutMillis: periodic.timeout ?? 30_000,\n exporter,\n metricProducers,\n });\n}\n\n/**\n * Get LoggerProviderConfig from environment variables.\n */\nexport function getLoggerProviderConfigFromEnv(): LoggerProviderOptions {\n return {\n logRecordLimits: {\n attributeCountLimit:\n getNonNegativeNumberFromEnv('OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT') ??\n getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT'),\n attributeValueLengthLimit:\n getNonNegativeNumberFromEnv(\n 'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT'\n ) ?? getNonNegativeNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'),\n },\n };\n}\n\n/**\n * Get configuration for BatchLogRecordProcessor from environment variables.\n */\nexport function getBatchLogRecordProcessorConfigFromEnv(): Omit<\n BatchLogRecordProcessorOptions,\n 'exporter'\n> {\n return {\n maxQueueSize: getNonNegativeNumberFromEnv('OTEL_BLRP_MAX_QUEUE_SIZE'),\n scheduledDelayMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_SCHEDULE_DELAY'\n ),\n exportTimeoutMillis: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_EXPORT_TIMEOUT'\n ),\n maxExportBatchSize: getNonNegativeNumberFromEnv(\n 'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE'\n ),\n };\n}\n\nexport function getBatchLogRecordProcessorFromEnv(\n exporter: LogRecordExporter,\n selfObsMeterProvider: MeterProvider | undefined\n): BatchLogRecordProcessor {\n return new BatchLogRecordProcessor({\n exporter,\n selfObsMeterProvider,\n ...getBatchLogRecordProcessorConfigFromEnv(),\n });\n}\n\nexport function getHeadersFromConfiguration(\n headers: NameStringValuePairConfigModel[] | undefined\n): Record<string, string> | undefined {\n if (!headers) {\n return undefined;\n }\n const result: Record<string, string> = {};\n headers.forEach(header => {\n if (header.value !== null) {\n result[header.name] = header.value;\n }\n });\n return result;\n}\n\n/**\n * Validate an exporter timeout value. The spec says 0 means \"no limit\n * (infinity)\" but the JS exporters don't support that yet (see #6617).\n * Warn and return undefined so the exporter falls back to its default.\n */\nexport function validateExporterTimeout(\n timeout: number | null | undefined\n): number | undefined {\n if (timeout === null) {\n return undefined;\n } else if (timeout === 0) {\n diag.warn(\n 'Exporter timeout of 0 (infinite) is not supported. Using default timeout.'\n );\n return undefined;\n }\n return timeout;\n}\n\nexport function getHttpAgentOptionsFromTls(\n tls: HttpTlsConfigModel | undefined\n): { ca?: Buffer; cert?: Buffer; key?: Buffer } | undefined {\n if (tls && (tls.ca_file || tls.cert_file || tls.key_file)) {\n return {\n ca: readFileOrWarn(tls.ca_file, 'TLS CA'),\n cert: readFileOrWarn(tls.cert_file, 'TLS cert'),\n key: readFileOrWarn(tls.key_file, 'TLS key'),\n };\n }\n return undefined;\n}\n\nexport function getGrpcCredentialsFromTls(tls?: GrpcTlsConfigModel) {\n if (tls?.insecure) {\n return createInsecureCredentials();\n }\n const rootCert = readFileOrWarn(tls?.ca_file, 'TLS CA');\n const privateKey = readFileOrWarn(tls?.key_file, 'TLS key');\n const certChain = readFileOrWarn(tls?.cert_file, 'TLS cert');\n if (rootCert || privateKey || certChain) {\n try {\n return createSslCredentials(rootCert, privateKey, certChain);\n } catch (e) {\n diag.warn(`Failed to create gRPC SSL credentials: ${e}`);\n return undefined;\n }\n }\n return undefined;\n}\n\nexport function getGrpcMetadataFromHeaders(\n headers: NameStringValuePairConfigModel[] | undefined\n) {\n if (!headers || headers.length === 0) {\n return undefined;\n }\n const metadata = createEmptyMetadata();\n for (const header of headers) {\n if (header.value !== null) {\n metadata.set(header.name, header.value);\n }\n }\n return metadata;\n}\n\nfunction readFileOrWarn(\n filePath: string | null | undefined,\n label: string\n): Buffer | undefined {\n if (!filePath) return undefined;\n try {\n return fs.readFileSync(filePath);\n } catch (e) {\n diag.warn(`Failed to read ${label} file at ${filePath}: ${e}`);\n return undefined;\n }\n}\n\nexport function getSpanExporter(\n exporter: SpanExporterConfigModel\n): SpanExporter | undefined {\n if (exporter.otlp_http !== undefined) {\n const encoding = exporter.otlp_http?.encoding ?? 'protobuf';\n if (encoding === 'json') {\n return new OTLPHttpTraceExporter({\n compression:\n exporter.otlp_http?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_http?.endpoint ?? undefined,\n headers: getHeadersFromConfiguration(exporter.otlp_http?.headers),\n timeoutMillis: validateExporterTimeout(exporter.otlp_http?.timeout),\n httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http?.tls),\n });\n } else {\n return new OTLPProtoTraceExporter({\n compression:\n exporter.otlp_http?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_http?.endpoint ?? undefined,\n headers: getHeadersFromConfiguration(exporter.otlp_http?.headers),\n timeoutMillis: validateExporterTimeout(exporter.otlp_http?.timeout),\n httpAgentOptions: getHttpAgentOptionsFromTls(exporter.otlp_http?.tls),\n });\n }\n } else if (exporter.otlp_grpc !== undefined) {\n return new OTLPGrpcTraceExporter({\n compression:\n exporter.otlp_grpc?.compression === 'gzip'\n ? CompressionAlgorithm.GZIP\n : CompressionAlgorithm.NONE,\n url: exporter.otlp_grpc?.endpoint ?? undefined,\n timeoutMillis: validateExporterTimeout(exporter.otlp_grpc?.timeout),\n credentials: getGrpcCredentialsFromTls(exporter.otlp_grpc?.tls),\n metadata: getGrpcMetadataFromHeaders(exporter.otlp_grpc?.headers),\n });\n } else if (exporter.console !== undefined) {\n return new ConsoleSpanExporter();\n }\n diag.warn('Unsupported Exporter value. No Span Exporter registered');\n return undefined;\n}\n\nexport function getSpanProcessorsFromConfiguration(\n config: ConfigurationModel\n): SpanProcessor[] | undefined {\n const spanProcessors: SpanProcessor[] = [];\n config.tracer_provider?.processors?.forEach(processor => {\n if (processor.batch) {\n const exporter = getSpanExporter(processor.batch.exporter);\n if (exporter) {\n spanProcessors.push(\n new BatchSpanProcessor({\n exporter,\n maxQueueSize: processor.batch.max_queue_size ?? undefined,\n maxExportBatchSize:\n processor.batch.max_export_batch_size ?? undefined,\n scheduledDelayMillis: processor.batch.schedule_delay ?? undefined,\n exportTimeoutMillis: processor.batch.export_timeout ?? undefined,\n })\n );\n }\n }\n if (processor.simple) {\n const exporter = getSpanExporter(processor.simple.exporter);\n if (exporter) {\n spanProcessors.push(new SimpleSpanProcessor({ exporter }));\n }\n }\n });\n if (spanProcessors.length > 0) {\n return spanProcessors;\n }\n return undefined;\n}\n\nexport function getIdGeneratorFromConfiguration(\n config: ConfigurationModel\n): IdGenerator | undefined {\n const idGenerator = config.tracer_provider?.id_generator;\n if (!idGenerator) {\n return undefined;\n }\n if (idGenerator.random !== undefined) {\n return new RandomIdGenerator();\n }\n // Any other key is a third-party / custom id_generator type which we\n // don't currently support. Warn and fall back to SDK default.\n const unknownKeys = Object.keys(idGenerator).filter(k => k !== 'random');\n if (unknownKeys.length > 0) {\n diag.warn(\n `Unsupported id_generator type(s): ${unknownKeys.join(', ')}. Using default.`\n );\n }\n return undefined;\n}\n\nexport function getMeterReadersFromConfiguration(\n config: ConfigurationModel\n): IMetricReader[] | undefined {\n const metricReaders: IMetricReader[] = [];\n config.meter_provider?.readers?.forEach(reader => {\n if (reader.periodic) {\n const periodicReader = getPeriodicMetricReaderFromConfiguration(\n reader.periodic\n );\n if (periodicReader) {\n metricReaders.push(periodicReader);\n }\n }\n });\n if (metricReaders.length > 0) {\n return metricReaders;\n }\n return undefined;\n}\n\nexport function getInstrumentType(\n instrument: InstrumentTypeConfigModel\n): InstrumentType | undefined {\n switch (instrument) {\n case 'counter':\n return InstrumentType.COUNTER;\n case 'gauge':\n return InstrumentType.GAUGE;\n case 'histogram':\n return InstrumentType.HISTOGRAM;\n case 'observable_counter':\n return InstrumentType.OBSERVABLE_COUNTER;\n case 'observable_gauge':\n return InstrumentType.OBSERVABLE_GAUGE;\n case 'observable_up_down_counter':\n return InstrumentType.OBSERVABLE_UP_DOWN_COUNTER;\n case 'up_down_counter':\n return InstrumentType.UP_DOWN_COUNTER;\n default:\n diag.warn(`Unsupported instrument type: ${instrument}`);\n return undefined;\n }\n}\n\nexport function getAggregationType(\n aggregation: AggregationConfigModel\n): AggregationOption | undefined {\n if (aggregation.default) {\n return {\n type: AggregationType.DEFAULT,\n };\n }\n if (aggregation.drop) {\n return {\n type: AggregationType.DROP,\n };\n }\n if (aggregation.explicit_bucket_histogram) {\n return {\n type: AggregationType.EXPLICIT_BUCKET_HISTOGRAM,\n options: {\n recordMinMax:\n aggregation.explicit_bucket_histogram.record_min_max ?? true,\n boundaries: aggregation.explicit_bucket_histogram.boundaries ?? [\n 0, 5, 10, 25, 50, 75, 100, 250, 500, 750, 1000, 2500, 5000, 7500,\n 10000,\n ],\n },\n };\n }\n\n if (aggregation.base2_exponential_bucket_histogram) {\n return {\n type: AggregationType.EXPONENTIAL_HISTOGRAM,\n options: {\n recordMinMax:\n aggregation.base2_exponential_bucket_histogram.record_min_max ??\n undefined,\n maxSize:\n aggregation.base2_exponential_bucket_histogram.max_size ?? undefined,\n },\n };\n }\n if (aggregation.last_value) {\n return {\n type: AggregationType.LAST_VALUE,\n };\n }\n if (aggregation.sum) {\n return {\n type: AggregationType.SUM,\n };\n }\n\n diag.warn('Unsupported aggregation type');\n return undefined;\n}\n\nexport function getMeterViewsFromConfiguration(\n config: ConfigurationModel\n): ViewOptions[] | undefined {\n const metricViews: ViewOptions[] = [];\n config.meter_provider?.views?.forEach(view => {\n const viewOption: ViewOptions = {};\n if (view.selector) {\n if (view.selector.instrument_name) {\n viewOption.instrumentName = view.selector.instrument_name;\n }\n if (view.selector.instrument_type) {\n const instrumentType = getInstrumentType(view.selector.instrument_type);\n if (instrumentType) {\n viewOption.instrumentType = instrumentType;\n }\n }\n if (view.selector.unit) {\n viewOption.instrumentUnit = view.selector.unit;\n }\n if (view.selector.meter_name) {\n viewOption.meterName = view.selector.meter_name;\n }\n if (view.selector.meter_version) {\n viewOption.meterVersion = view.selector.meter_version;\n }\n if (view.selector.meter_schema_url) {\n viewOption.meterSchemaUrl = view.selector.meter_schema_url;\n }\n }\n if (view.stream) {\n if (view.stream.name) {\n viewOption.name = view.stream.name;\n }\n viewOption.aggregationCardinalityLimit =\n view.stream.aggregation_cardinality_limit ?? 2_000;\n if (view.stream.description) {\n viewOption.description = view.stream.description;\n }\n if (view.stream.aggregation) {\n const aggregationType = getAggregationType(view.stream.aggregation);\n if (aggregationType) {\n viewOption.aggregation = aggregationType;\n }\n }\n if (view.stream.attribute_keys) {\n const processors: IAttributesProcessor[] = [];\n if (\n view.stream.attribute_keys.included &&\n view.stream.attribute_keys.included.length > 0\n ) {\n processors.push(\n createAllowListAttributesProcessor(\n view.stream.attribute_keys.included\n )\n );\n }\n if (\n view.stream.attribute_keys.excluded &&\n view.stream.attribute_keys.excluded.length > 0\n ) {\n processors.push(\n createDenyListAttributesProcessor(\n view.stream.attribute_keys.excluded\n )\n );\n }\n if (processors.length > 0) {\n viewOption.attributesProcessors = processors;\n }\n }\n }\n\n if (Object.keys(viewOption).length > 0) {\n metricViews.push(viewOption);\n }\n });\n if (metricViews.length > 0) {\n return metricViews;\n }\n return undefined;\n}\n\nexport function getInstanceID(config: ConfigurationModel): string | undefined {\n if (config.resource?.attributes) {\n for (let i = 0; i < config.resource.attributes.length; i++) {\n const element = config.resource.attributes[i];\n if (element.name === 'service.instance.id') {\n return element.value?.toString();\n }\n }\n }\n return undefined;\n}\n\nconst DEFAULT_RATIO = 1;\n\n/**\n * Returns the {@link Sampler} configured under `tracer_provider.sampler` in\n * the declarative configuration, or `undefined` if none is set (in which case\n * the SDK applies its default sampler).\n */\nexport function getSamplerFromConfiguration(\n config: ConfigurationModel\n): Sampler | undefined {\n const samplerConfig = config.tracer_provider?.sampler;\n if (!samplerConfig) {\n return undefined;\n }\n return buildSamplerFromConfig(samplerConfig);\n}\n\n/**\n * Builds a {@link Sampler} from a {@link SamplerConfigModel} data model.\n * This allows sampler construction from declarative configuration.\n */\nexport function buildSamplerFromConfig(\n samplerConfig: SamplerConfigModel\n): Sampler {\n if (samplerConfig.always_on !== undefined) {\n return new AlwaysOnSampler();\n }\n if (samplerConfig.always_off !== undefined) {\n return new AlwaysOffSampler();\n }\n if (samplerConfig.trace_id_ratio_based !== undefined) {\n return new TraceIdRatioBasedSampler(\n samplerConfig.trace_id_ratio_based?.ratio ?? DEFAULT_RATIO\n );\n }\n if (samplerConfig.parent_based !== undefined) {\n const pb = samplerConfig.parent_based ?? {};\n return new ParentBasedSampler({\n root: pb.root ? buildSamplerFromConfig(pb.root) : new AlwaysOnSampler(),\n remoteParentSampled: pb.remote_parent_sampled\n ? buildSamplerFromConfig(pb.remote_parent_sampled)\n : undefined,\n remoteParentNotSampled: pb.remote_parent_not_sampled\n ? buildSamplerFromConfig(pb.remote_parent_not_sampled)\n : undefined,\n localParentSampled: pb.local_parent_sampled\n ? buildSamplerFromConfig(pb.local_parent_sampled)\n : undefined,\n localParentNotSampled: pb.local_parent_not_sampled\n ? buildSamplerFromConfig(pb.local_parent_not_sampled)\n : undefined,\n });\n }\n diag.warn('Unknown sampler config, defaulting to ParentBased(AlwaysOn).');\n return new ParentBasedSampler({ root: new AlwaysOnSampler() });\n}\n"]}
|
package/build/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.221.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/build/src/version.js
CHANGED
package/build/src/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4DAA4D;AAC/C,QAAA,OAAO,GAAG,SAAS,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4DAA4D;AAC/C,QAAA,OAAO,GAAG,SAAS,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.221.0';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentelemetry/sdk-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.221.0",
|
|
4
4
|
"description": "OpenTelemetry SDK for Node.js",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"types": "build/src/index.d.ts",
|
|
@@ -43,32 +43,32 @@
|
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@opentelemetry/api-logs": "0.
|
|
47
|
-
"@opentelemetry/configuration": "0.
|
|
48
|
-
"@opentelemetry/context-async-hooks": "2.
|
|
49
|
-
"@opentelemetry/core": "2.
|
|
50
|
-
"@opentelemetry/exporter-logs-otlp-grpc": "0.
|
|
51
|
-
"@opentelemetry/exporter-logs-otlp-http": "0.
|
|
52
|
-
"@opentelemetry/exporter-logs-otlp-proto": "0.
|
|
53
|
-
"@opentelemetry/exporter-metrics-otlp-grpc": "0.
|
|
54
|
-
"@opentelemetry/exporter-metrics-otlp-http": "0.
|
|
55
|
-
"@opentelemetry/exporter-metrics-otlp-proto": "0.
|
|
56
|
-
"@opentelemetry/exporter-prometheus": "0.
|
|
57
|
-
"@opentelemetry/exporter-trace-otlp-grpc": "0.
|
|
58
|
-
"@opentelemetry/exporter-trace-otlp-http": "0.
|
|
59
|
-
"@opentelemetry/exporter-trace-otlp-proto": "0.
|
|
60
|
-
"@opentelemetry/exporter-zipkin": "2.
|
|
61
|
-
"@opentelemetry/instrumentation": "0.
|
|
62
|
-
"@opentelemetry/otlp-exporter-base": "0.
|
|
63
|
-
"@opentelemetry/otlp-grpc-exporter-base": "0.
|
|
64
|
-
"@opentelemetry/propagator-b3": "2.
|
|
65
|
-
"@opentelemetry/propagator-jaeger": "2.
|
|
66
|
-
"@opentelemetry/resources": "2.
|
|
67
|
-
"@opentelemetry/sdk-logs": "0.
|
|
68
|
-
"@opentelemetry/sdk-metrics": "2.
|
|
69
|
-
"@opentelemetry/sdk-trace": "2.
|
|
70
|
-
"@opentelemetry/sdk-trace-base": "2.
|
|
71
|
-
"@opentelemetry/sdk-trace-node": "2.
|
|
46
|
+
"@opentelemetry/api-logs": "0.221.0",
|
|
47
|
+
"@opentelemetry/configuration": "0.221.0",
|
|
48
|
+
"@opentelemetry/context-async-hooks": "2.10.0",
|
|
49
|
+
"@opentelemetry/core": "2.10.0",
|
|
50
|
+
"@opentelemetry/exporter-logs-otlp-grpc": "0.221.0",
|
|
51
|
+
"@opentelemetry/exporter-logs-otlp-http": "0.221.0",
|
|
52
|
+
"@opentelemetry/exporter-logs-otlp-proto": "0.221.0",
|
|
53
|
+
"@opentelemetry/exporter-metrics-otlp-grpc": "0.221.0",
|
|
54
|
+
"@opentelemetry/exporter-metrics-otlp-http": "0.221.0",
|
|
55
|
+
"@opentelemetry/exporter-metrics-otlp-proto": "0.221.0",
|
|
56
|
+
"@opentelemetry/exporter-prometheus": "0.221.0",
|
|
57
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "0.221.0",
|
|
58
|
+
"@opentelemetry/exporter-trace-otlp-http": "0.221.0",
|
|
59
|
+
"@opentelemetry/exporter-trace-otlp-proto": "0.221.0",
|
|
60
|
+
"@opentelemetry/exporter-zipkin": "2.10.0",
|
|
61
|
+
"@opentelemetry/instrumentation": "0.221.0",
|
|
62
|
+
"@opentelemetry/otlp-exporter-base": "0.221.0",
|
|
63
|
+
"@opentelemetry/otlp-grpc-exporter-base": "0.221.0",
|
|
64
|
+
"@opentelemetry/propagator-b3": "2.10.0",
|
|
65
|
+
"@opentelemetry/propagator-jaeger": "2.10.0",
|
|
66
|
+
"@opentelemetry/resources": "2.10.0",
|
|
67
|
+
"@opentelemetry/sdk-logs": "0.221.0",
|
|
68
|
+
"@opentelemetry/sdk-metrics": "2.10.0",
|
|
69
|
+
"@opentelemetry/sdk-trace": "2.10.0",
|
|
70
|
+
"@opentelemetry/sdk-trace-base": "2.10.0",
|
|
71
|
+
"@opentelemetry/sdk-trace-node": "2.10.0",
|
|
72
72
|
"@opentelemetry/semantic-conventions": "^1.29.0"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
@@ -83,9 +83,9 @@
|
|
|
83
83
|
"nyc": "17.1.0",
|
|
84
84
|
"sinon": "18.0.1",
|
|
85
85
|
"ts-loader": "9.5.7",
|
|
86
|
-
"typescript": "5.
|
|
86
|
+
"typescript": "5.2.2"
|
|
87
87
|
},
|
|
88
88
|
"homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-sdk-node",
|
|
89
89
|
"sideEffects": false,
|
|
90
|
-
"gitHead": "
|
|
90
|
+
"gitHead": "76fa6b509e2b48d9cbee31cb37a2efc61dc4d384"
|
|
91
91
|
}
|