@@ -24,6 +24,7 @@ import {
2424 getStringFromEnv ,
2525 getStringListFromEnv ,
2626 diagLogLevelFromString ,
27+ getNumberFromEnv ,
2728} from '@opentelemetry/core' ;
2829import { 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