@@ -212,58 +212,128 @@ export function setTracerProvider(config: ConfigurationModel): void {
212212 batch . max_export_batch_size = maxExportBatchSize ;
213213 }
214214
215- const endpoint =
216- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT' ) ??
217- ( getStringFromEnv ( 'OTEL_EXPORTER_OTLP_ENDPOINT' )
218- ? `${ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_ENDPOINT' ) } /v1/traces`
219- : null ) ;
220- if ( endpoint && batch . exporter . otlp_http ) {
221- batch . exporter . otlp_http . endpoint = endpoint ;
222- }
223-
224- const certificateFile =
225- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE' ) ??
226- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_CERTIFICATE' ) ;
227- if ( certificateFile && batch . exporter . otlp_http ) {
228- batch . exporter . otlp_http . certificate_file = certificateFile ;
229- }
230-
231- const clientKeyFile =
232- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY' ) ??
233- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_CLIENT_KEY' ) ;
234- if ( clientKeyFile && batch . exporter . otlp_http ) {
235- batch . exporter . otlp_http . client_key_file = clientKeyFile ;
236- }
237-
238- const clientCertificateFile =
239- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE' ) ??
240- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE' ) ;
241- if ( clientCertificateFile && batch . exporter . otlp_http ) {
242- batch . exporter . otlp_http . client_certificate_file = clientCertificateFile ;
215+ const exportersType = Array . from (
216+ new Set ( getStringListFromEnv ( 'OTEL_TRACES_EXPORTER' ) )
217+ ) ;
218+ if ( exportersType . length === 0 ) {
219+ exportersType . push ( 'otlp' ) ;
243220 }
244221
245- const compression =
246- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_COMPRESSION' ) ??
247- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_COMPRESSION' ) ;
248- if ( compression && batch . exporter . otlp_http ) {
249- batch . exporter . otlp_http . compression = compression ;
222+ config . tracer_provider . processors = [ ] ;
223+ if ( exportersType . includes ( 'none' ) ) {
224+ diag . info (
225+ `OTEL_TRACES_EXPORTER contains "none". Tracer provider will not be initialized.`
226+ ) ;
227+ return ;
250228 }
229+ for ( let i = 0 ; i < exportersType . length ; i ++ ) {
230+ const exporterType = exportersType [ i ] ;
231+ const batchInfo = { ...batch } ;
232+ if ( exporterType === 'console' ) {
233+ config . tracer_provider . processors . push ( {
234+ simple : { exporter : { console : { } } } ,
235+ } ) ;
236+ } else if ( exporterType === 'zipkin' ) {
237+ batchInfo . exporter = {
238+ zipkin : {
239+ endpoint :
240+ getStringFromEnv ( 'OTEL_EXPORTER_ZIPKIN_ENDPOINT' ) ??
241+ 'http://localhost:9411/api/v2/spans' ,
242+ timeout : getNumberFromEnv ( 'OTEL_EXPORTER_ZIPKIN_TIMEOUT' ) ?? 10000 ,
243+ } ,
244+ } ;
245+ config . tracer_provider . processors . push ( { batch : batchInfo } ) ;
246+ } else {
247+ // 'otlp' and default
248+ const protocol =
249+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_PROTOCOL' ) ??
250+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_PROTOCOL' ) ??
251+ 'http/protobuf' ;
252+ const certificateFile =
253+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE' ) ??
254+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_CERTIFICATE' ) ;
255+ const clientKeyFile =
256+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY' ) ??
257+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_CLIENT_KEY' ) ;
258+ const clientCertificateFile =
259+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE' ) ??
260+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE' ) ;
261+ const compression =
262+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_COMPRESSION' ) ??
263+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_COMPRESSION' ) ;
264+ const timeout =
265+ getNumberFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_TIMEOUT' ) ??
266+ getNumberFromEnv ( 'OTEL_EXPORTER_OTLP_TIMEOUT' ) ??
267+ 10000 ;
268+ const headersList =
269+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_HEADERS' ) ??
270+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_HEADERS' ) ;
251271
252- const timeout =
253- getNumberFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_TIMEOUT' ) ??
254- getNumberFromEnv ( 'OTEL_EXPORTER_OTLP_TIMEOUT' ) ;
255- if ( timeout && batch . exporter . otlp_http ) {
256- batch . exporter . otlp_http . timeout = timeout ;
257- }
272+ if ( protocol === 'grpc' ) {
273+ delete batchInfo . exporter . otlp_http ;
274+ batchInfo . exporter . otlp_grpc = { } ;
275+ const endpoint =
276+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT' ) ??
277+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_ENDPOINT' ) ??
278+ 'http://localhost:4317' ;
279+ if ( endpoint ) {
280+ batchInfo . exporter . otlp_grpc . endpoint = endpoint ;
281+ }
282+ if ( certificateFile ) {
283+ batchInfo . exporter . otlp_grpc . certificate_file = certificateFile ;
284+ }
285+ if ( clientKeyFile ) {
286+ batchInfo . exporter . otlp_grpc . client_key_file = clientKeyFile ;
287+ }
288+ if ( clientCertificateFile ) {
289+ batchInfo . exporter . otlp_grpc . client_certificate_file =
290+ clientCertificateFile ;
291+ }
292+ if ( compression ) {
293+ batchInfo . exporter . otlp_grpc . compression = compression ;
294+ }
295+ if ( timeout ) {
296+ batchInfo . exporter . otlp_grpc . timeout = timeout ;
297+ }
298+ if ( headersList ) {
299+ batchInfo . exporter . otlp_grpc . headers_list = headersList ;
300+ }
301+ } else {
302+ if ( batchInfo . exporter . otlp_http == null ) {
303+ batchInfo . exporter . otlp_http = { } ;
304+ }
305+ const endpoint =
306+ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT' ) ??
307+ ( getStringFromEnv ( 'OTEL_EXPORTER_OTLP_ENDPOINT' )
308+ ? `${ getStringFromEnv ( 'OTEL_EXPORTER_OTLP_ENDPOINT' ) } /v1/traces`
309+ : null ) ;
310+ if ( endpoint ) {
311+ batchInfo . exporter . otlp_http . endpoint = endpoint ;
312+ }
313+ if ( certificateFile ) {
314+ batchInfo . exporter . otlp_http . certificate_file = certificateFile ;
315+ }
316+ if ( clientKeyFile ) {
317+ batchInfo . exporter . otlp_http . client_key_file = clientKeyFile ;
318+ }
319+ if ( clientCertificateFile ) {
320+ batchInfo . exporter . otlp_http . client_certificate_file =
321+ clientCertificateFile ;
322+ }
323+ if ( compression ) {
324+ batchInfo . exporter . otlp_http . compression = compression ;
325+ }
326+ if ( timeout ) {
327+ batchInfo . exporter . otlp_http . timeout = timeout ;
328+ }
329+ if ( headersList ) {
330+ batchInfo . exporter . otlp_http . headers_list = headersList ;
331+ }
332+ }
258333
259- const headersList =
260- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_TRACES_HEADERS' ) ??
261- getStringFromEnv ( 'OTEL_EXPORTER_OTLP_HEADERS' ) ;
262- if ( headersList && batch . exporter . otlp_http ) {
263- batch . exporter . otlp_http . headers_list = headersList ;
334+ config . tracer_provider . processors . push ( { batch : batchInfo } ) ;
335+ }
264336 }
265-
266- config . tracer_provider . processors [ 0 ] . batch = batch ;
267337 }
268338}
269339
0 commit comments