Skip to content

Commit e5adde2

Browse files
authored
feat(opentelemetry-configuration): add more attributes to config model (#5862)
1 parent fa286b4 commit e5adde2

File tree

4 files changed

+1186
-4
lines changed

4 files changed

+1186
-4
lines changed

experimental/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2
1212

1313
* feat(otlp-transformer): add span flags support for isRemote property [#5910](https://github.com/open-telemetry/opentelemetry-js/pull/5910) @nikhilmantri0902
1414
* feat(sampler-composite): Added experimental implementations of draft composite sampling spec [#5839](https://github.com/open-telemetry/opentelemetry-js/pull/5839) @anuraaga
15+
* feat(opentelemetry-configuration): add more attributes to config model [#5826](https://github.com/open-telemetry/opentelemetry-js/pull/5826) @maryliag
1516

1617
### :bug: Bug Fixes
1718

experimental/packages/opentelemetry-configuration/src/EnvironmentConfigProvider.ts

Lines changed: 344 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
getStringFromEnv,
2525
getStringListFromEnv,
2626
diagLogLevelFromString,
27+
getNumberFromEnv,
2728
} from '@opentelemetry/core';
2829
import { ConfigProvider } from './IConfigProvider';
2930

@@ -50,13 +51,352 @@ export class EnvironmentConfigProvider implements ConfigProvider {
5051
this._config.node_resource_detectors = nodeResourceDetectors;
5152
}
5253

53-
const resourceAttrList = getStringFromEnv('OTEL_RESOURCE_ATTRIBUTES');
54-
if (resourceAttrList) {
55-
this._config.resource.attributes_list = resourceAttrList;
56-
}
54+
setResources(this._config);
55+
setAttributeLimits(this._config);
56+
setPropagators(this._config);
57+
setTracerProvider(this._config);
58+
setMeterProvider(this._config);
59+
setLoggerProvider(this._config);
5760
}
5861

5962
getInstrumentationConfig(): ConfigurationModel {
6063
return this._config;
6164
}
6265
}
66+
67+
function setResources(config: ConfigurationModel): void {
68+
const resourceAttrList = getStringFromEnv('OTEL_RESOURCE_ATTRIBUTES');
69+
if (resourceAttrList) {
70+
config.resource.attributes_list = resourceAttrList;
71+
}
72+
73+
const serviceName = getStringFromEnv('OTEL_SERVICE_NAME');
74+
if (serviceName) {
75+
config.resource.attributes = [
76+
{
77+
name: 'service.name',
78+
value: serviceName,
79+
type: 'string',
80+
},
81+
];
82+
}
83+
}
84+
85+
function setAttributeLimits(config: ConfigurationModel): void {
86+
const attributeValueLengthLimit = getNumberFromEnv(
87+
'OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT'
88+
);
89+
if (attributeValueLengthLimit) {
90+
config.attribute_limits.attribute_value_length_limit =
91+
attributeValueLengthLimit;
92+
}
93+
94+
const attributeCountLimit = getNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT');
95+
if (attributeCountLimit) {
96+
config.attribute_limits.attribute_count_limit = attributeCountLimit;
97+
}
98+
}
99+
100+
function setPropagators(config: ConfigurationModel): void {
101+
const propagators = getStringListFromEnv('OTEL_PROPAGATORS');
102+
if (propagators) {
103+
config.propagator = {
104+
composite: propagators,
105+
composite_list:
106+
getStringFromEnv('OTEL_PROPAGATORS') || 'tracecontext,baggage',
107+
};
108+
}
109+
}
110+
111+
function setTracerProvider(config: ConfigurationModel): void {
112+
const attributeValueLengthLimit = getNumberFromEnv(
113+
'OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT'
114+
);
115+
if (attributeValueLengthLimit) {
116+
config.tracer_provider.limits.attribute_value_length_limit =
117+
attributeValueLengthLimit;
118+
}
119+
120+
const attributeCountLimit = getNumberFromEnv(
121+
'OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT'
122+
);
123+
if (attributeCountLimit) {
124+
config.tracer_provider.limits.attribute_count_limit = attributeCountLimit;
125+
}
126+
127+
const eventCountLimit = getNumberFromEnv('OTEL_SPAN_EVENT_COUNT_LIMIT');
128+
if (eventCountLimit) {
129+
config.tracer_provider.limits.event_count_limit = eventCountLimit;
130+
}
131+
132+
const linkCountLimit = getNumberFromEnv('OTEL_SPAN_LINK_COUNT_LIMIT');
133+
if (linkCountLimit) {
134+
config.tracer_provider.limits.link_count_limit = linkCountLimit;
135+
}
136+
137+
const eventAttributeCountLimit = getNumberFromEnv(
138+
'OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT'
139+
);
140+
if (eventAttributeCountLimit) {
141+
config.tracer_provider.limits.event_attribute_count_limit =
142+
eventAttributeCountLimit;
143+
}
144+
145+
const linkAttributeCountLimit = getNumberFromEnv(
146+
'OTEL_LINK_ATTRIBUTE_COUNT_LIMIT'
147+
);
148+
if (linkAttributeCountLimit) {
149+
config.tracer_provider.limits.link_attribute_count_limit =
150+
linkAttributeCountLimit;
151+
}
152+
153+
const batch = config.tracer_provider.processors[0]?.batch;
154+
if (batch) {
155+
const scheduleDelay = getNumberFromEnv('OTEL_BSP_SCHEDULE_DELAY');
156+
if (scheduleDelay) {
157+
batch.schedule_delay = scheduleDelay;
158+
}
159+
160+
const exportTimeout = getNumberFromEnv('OTEL_BSP_EXPORT_TIMEOUT');
161+
if (exportTimeout) {
162+
batch.export_timeout = exportTimeout;
163+
}
164+
165+
const maxQueueSize = getNumberFromEnv('OTEL_BSP_MAX_QUEUE_SIZE');
166+
if (maxQueueSize) {
167+
batch.max_queue_size = maxQueueSize;
168+
}
169+
170+
const maxExportBatchSize = getNumberFromEnv(
171+
'OTEL_BSP_MAX_EXPORT_BATCH_SIZE'
172+
);
173+
if (maxExportBatchSize) {
174+
batch.max_export_batch_size = maxExportBatchSize;
175+
}
176+
177+
const endpoint = getStringFromEnv('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT');
178+
if (endpoint) {
179+
batch.exporter.otlp_http.endpoint = endpoint;
180+
}
181+
182+
const certificateFile = getStringFromEnv(
183+
'OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE'
184+
);
185+
if (certificateFile) {
186+
batch.exporter.otlp_http.certificate_file = certificateFile;
187+
}
188+
189+
const clientKeyFile = getStringFromEnv(
190+
'OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY'
191+
);
192+
if (clientKeyFile) {
193+
batch.exporter.otlp_http.client_key_file = clientKeyFile;
194+
}
195+
196+
const clientCertificateFile = getStringFromEnv(
197+
'OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE'
198+
);
199+
if (clientCertificateFile) {
200+
batch.exporter.otlp_http.client_certificate_file = clientCertificateFile;
201+
}
202+
203+
const compression = getStringFromEnv(
204+
'OTEL_EXPORTER_OTLP_TRACES_COMPRESSION'
205+
);
206+
if (compression) {
207+
batch.exporter.otlp_http.compression = compression;
208+
}
209+
210+
const timeout = getNumberFromEnv('OTEL_EXPORTER_OTLP_TRACES_TIMEOUT');
211+
if (timeout) {
212+
batch.exporter.otlp_http.timeout = timeout;
213+
}
214+
215+
const headersList = getStringFromEnv('OTEL_EXPORTER_OTLP_TRACES_HEADERS');
216+
if (headersList) {
217+
batch.exporter.otlp_http.headers_list = headersList;
218+
}
219+
220+
config.tracer_provider.processors[0].batch = batch;
221+
}
222+
}
223+
224+
function setMeterProvider(config: ConfigurationModel): void {
225+
const readerPeriodic = config.meter_provider.readers[0]?.periodic;
226+
if (readerPeriodic) {
227+
const interval = getNumberFromEnv('OTEL_METRIC_EXPORT_INTERVAL');
228+
if (interval) {
229+
readerPeriodic.interval = interval;
230+
}
231+
232+
const timeout = getNumberFromEnv('OTEL_METRIC_EXPORT_TIMEOUT');
233+
if (timeout) {
234+
readerPeriodic.timeout = timeout;
235+
}
236+
237+
const endpoint = getStringFromEnv('OTEL_EXPORTER_OTLP_METRICS_ENDPOINT');
238+
if (endpoint) {
239+
readerPeriodic.exporter.otlp_http.endpoint = endpoint;
240+
}
241+
242+
const certificateFile = getStringFromEnv(
243+
'OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE'
244+
);
245+
if (certificateFile) {
246+
readerPeriodic.exporter.otlp_http.certificate_file = certificateFile;
247+
}
248+
249+
const clientKeyFile = getStringFromEnv(
250+
'OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY'
251+
);
252+
if (clientKeyFile) {
253+
readerPeriodic.exporter.otlp_http.client_key_file = clientKeyFile;
254+
}
255+
256+
const clientCertificateFile = getStringFromEnv(
257+
'OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE'
258+
);
259+
if (clientCertificateFile) {
260+
readerPeriodic.exporter.otlp_http.client_certificate_file =
261+
clientCertificateFile;
262+
}
263+
264+
const compression = getStringFromEnv(
265+
'OTEL_EXPORTER_OTLP_METRICS_COMPRESSION'
266+
);
267+
if (compression) {
268+
readerPeriodic.exporter.otlp_http.compression = compression;
269+
}
270+
271+
const timeoutEx = getNumberFromEnv('OTEL_EXPORTER_OTLP_METRICS_TIMEOUT');
272+
if (timeoutEx) {
273+
readerPeriodic.exporter.otlp_http.timeout = timeoutEx;
274+
}
275+
276+
const headersList = getStringFromEnv('OTEL_EXPORTER_OTLP_METRICS_HEADERS');
277+
if (headersList) {
278+
readerPeriodic.exporter.otlp_http.headers_list = headersList;
279+
}
280+
281+
const temporalityPreference = getStringFromEnv(
282+
'OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE'
283+
);
284+
if (
285+
temporalityPreference &&
286+
(temporalityPreference === 'cumulative' ||
287+
temporalityPreference === 'delta' ||
288+
temporalityPreference === 'low_memory')
289+
) {
290+
readerPeriodic.exporter.otlp_http.temporality_preference =
291+
temporalityPreference;
292+
}
293+
294+
const defaultHistogramAggregation = getStringFromEnv(
295+
'OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION'
296+
);
297+
if (
298+
defaultHistogramAggregation &&
299+
(defaultHistogramAggregation === 'explicit_bucket_histogram' ||
300+
defaultHistogramAggregation === 'base2_exponential_bucket_histogram')
301+
) {
302+
readerPeriodic.exporter.otlp_http.default_histogram_aggregation =
303+
defaultHistogramAggregation;
304+
}
305+
306+
config.meter_provider.readers[0].periodic = readerPeriodic;
307+
}
308+
const exemplarFilter = getStringFromEnv('OTEL_METRICS_EXEMPLAR_FILTER');
309+
if (
310+
exemplarFilter &&
311+
(exemplarFilter === 'trace_based' ||
312+
exemplarFilter === 'always_on' ||
313+
exemplarFilter === 'always_off')
314+
) {
315+
config.meter_provider.exemplar_filter = exemplarFilter;
316+
}
317+
}
318+
319+
function setLoggerProvider(config: ConfigurationModel): void {
320+
const attributeValueLengthLimit = getNumberFromEnv(
321+
'OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT'
322+
);
323+
if (attributeValueLengthLimit) {
324+
config.logger_provider.limits.attribute_value_length_limit =
325+
attributeValueLengthLimit;
326+
}
327+
328+
const attributeCountLimit = getNumberFromEnv(
329+
'OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT'
330+
);
331+
if (attributeCountLimit) {
332+
config.logger_provider.limits.attribute_count_limit = attributeCountLimit;
333+
}
334+
335+
const batch = config.logger_provider.processors[0]?.batch;
336+
if (batch) {
337+
const scheduleDelay = getNumberFromEnv('OTEL_BLRP_SCHEDULE_DELAY');
338+
if (scheduleDelay) {
339+
batch.schedule_delay = scheduleDelay;
340+
}
341+
342+
const exportTimeout = getNumberFromEnv('OTEL_BLRP_EXPORT_TIMEOUT');
343+
if (exportTimeout) {
344+
batch.export_timeout = exportTimeout;
345+
}
346+
347+
const maxQueueSize = getNumberFromEnv('OTEL_BLRP_MAX_QUEUE_SIZE');
348+
if (maxQueueSize) {
349+
batch.max_queue_size = maxQueueSize;
350+
}
351+
352+
const maxExportBatchSize = getNumberFromEnv(
353+
'OTEL_BLRP_MAX_EXPORT_BATCH_SIZE'
354+
);
355+
if (maxExportBatchSize) {
356+
batch.max_export_batch_size = maxExportBatchSize;
357+
}
358+
359+
const endpoint = getStringFromEnv('OTEL_EXPORTER_OTLP_LOGS_ENDPOINT');
360+
if (endpoint) {
361+
batch.exporter.otlp_http.endpoint = endpoint;
362+
}
363+
364+
const certificateFile = getStringFromEnv(
365+
'OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE'
366+
);
367+
if (certificateFile) {
368+
batch.exporter.otlp_http.certificate_file = certificateFile;
369+
}
370+
371+
const clientKeyFile = getStringFromEnv(
372+
'OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY'
373+
);
374+
if (clientKeyFile) {
375+
batch.exporter.otlp_http.client_key_file = clientKeyFile;
376+
}
377+
378+
const clientCertificateFile = getStringFromEnv(
379+
'OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE'
380+
);
381+
if (clientCertificateFile) {
382+
batch.exporter.otlp_http.client_certificate_file = clientCertificateFile;
383+
}
384+
385+
const compression = getStringFromEnv('OTEL_EXPORTER_OTLP_LOGS_COMPRESSION');
386+
if (compression) {
387+
batch.exporter.otlp_http.compression = compression;
388+
}
389+
390+
const timeout = getNumberFromEnv('OTEL_EXPORTER_OTLP_LOGS_TIMEOUT');
391+
if (timeout) {
392+
batch.exporter.otlp_http.timeout = timeout;
393+
}
394+
395+
const headersList = getStringFromEnv('OTEL_EXPORTER_OTLP_LOGS_HEADERS');
396+
if (headersList) {
397+
batch.exporter.otlp_http.headers_list = headersList;
398+
}
399+
400+
config.logger_provider.processors[0].batch = batch;
401+
}
402+
}

0 commit comments

Comments
 (0)