1
+ import { DiagLogLevel } from '@opentelemetry/api' ;
1
2
import { InstrumentationBase } from '@opentelemetry/instrumentation' ;
2
3
import { NodeSDK } from '@opentelemetry/sdk-node' ;
3
4
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto' ;
@@ -9,11 +10,17 @@ import {
9
10
10
11
import HyperDXConsoleInstrumentation from './instrumentations/console' ;
11
12
import HyperDXSpanProcessor from './spanProcessor' ;
12
- import hdx , {
13
- HDX_DEBUG_MODE_ENABLED ,
14
- LOG_PREFIX as _LOG_PREFIX ,
15
- } from './debug' ;
13
+ import hdx , { LOG_PREFIX as _LOG_PREFIX } from './debug' ;
16
14
import { getHyperDXHTTPInstrumentationConfig } from './instrumentations/http' ;
15
+ import {
16
+ DEFAULT_OTEL_EXPORTER_OTLP_TRACES_TIMEOUT ,
17
+ DEFAULT_OTEL_LOGS_EXPORTER_URL ,
18
+ DEFAULT_OTEL_TRACES_EXPORTER_URL ,
19
+ DEFAULT_OTEL_TRACES_SAMPLER ,
20
+ DEFAULT_OTEL_TRACES_SAMPLER_ARG ,
21
+ DEFAULT_SERVICE_NAME ,
22
+ DEFAULT_OTEL_LOG_LEVEL ,
23
+ } from './constants' ;
17
24
import { hyperDXGlobalContext } from './context' ;
18
25
import { version as PKG_VERSION } from '../package.json' ;
19
26
@@ -32,37 +39,46 @@ export type SDKConfig = {
32
39
33
40
export const setTraceAttributes = hyperDXGlobalContext . setTraceAttributes ;
34
41
42
+ const setOtelEnvs = ( ) => {
43
+ // set default otel env vars
44
+ env . OTEL_NODE_RESOURCE_DETECTORS = env . OTEL_NODE_RESOURCE_DETECTORS ?? 'all' ;
45
+ env . OTEL_TRACES_SAMPLER = DEFAULT_OTEL_TRACES_SAMPLER ;
46
+ env . OTEL_TRACES_SAMPLER_ARG = DEFAULT_OTEL_TRACES_SAMPLER_ARG ;
47
+ } ;
48
+
35
49
let sdk : NodeSDK ;
36
50
let hdxConsoleInstrumentation : HyperDXConsoleInstrumentation ;
37
51
38
52
export const initSDK = ( config : SDKConfig ) => {
39
- // enable otel debug mode if HDX_DEBUG_MODE_ENABLED is set
40
- if ( HDX_DEBUG_MODE_ENABLED ) {
41
- env . OTEL_LOG_LEVEL = 'debug' ;
42
- }
53
+ hdx ( 'Setting otel envs' ) ;
54
+ setOtelEnvs ( ) ;
43
55
44
- // set default otel env vars
45
- env . OTEL_EXPORTER_OTLP_ENDPOINT =
46
- env . OTEL_EXPORTER_OTLP_ENDPOINT ?? 'https://in-otel.hyperdx.io' ;
47
- env . OTEL_NODE_RESOURCE_DETECTORS = env . OTEL_NODE_RESOURCE_DETECTORS ?? 'all' ;
48
- env . OTEL_LOG_LEVEL = env . OTEL_LOG_LEVEL ?? 'none' ; // silence by default
49
- env . OTEL_TRACES_SAMPLER = env . OTEL_TRACES_SAMPLER ?? 'parentbased_always_on' ;
50
- env . OTEL_TRACES_SAMPLER_ARG = env . OTEL_TRACES_SAMPLER_ARG ?? '1' ;
56
+ const stopOnTerminationSignals = config . stopOnTerminationSignals ?? true ; // Stop by default
51
57
52
- // patch OTEL_EXPORTER_OTLP_HEADERS to include API key
58
+ let exporterHeaders ;
53
59
if ( env . HYPERDX_API_KEY ) {
54
- env . OTEL_EXPORTER_OTLP_HEADERS = `${ env . OTEL_EXPORTER_OTLP_HEADERS } ,authorization=${ env . HYPERDX_API_KEY } ` ;
60
+ exporterHeaders = {
61
+ Authorization : env . HYPERDX_API_KEY ,
62
+ } ;
55
63
} else {
56
64
console . warn ( `${ LOG_PREFIX } HYPERDX_API_KEY is not set` ) ;
57
65
}
58
66
59
- const stopOnTerminationSignals = config . stopOnTerminationSignals ?? true ; // Stop by default
60
-
61
67
hdx ( 'Initializing OpenTelemetry SDK' ) ;
62
- const consoleInstrumentationEnabled = config . consoleCapture ?? true ;
68
+ let consoleInstrumentationEnabled = config . consoleCapture ?? true ;
69
+ if ( DEFAULT_OTEL_LOG_LEVEL === DiagLogLevel . DEBUG ) {
70
+ // FIXME: better to disable console instrumentation if otel log is enabled
71
+ consoleInstrumentationEnabled = false ;
72
+ console . warn (
73
+ `${ LOG_PREFIX } OTEL_LOG_LEVEL is set to 'debug', disabling console instrumentation` ,
74
+ ) ;
75
+ }
76
+
63
77
hdxConsoleInstrumentation = new HyperDXConsoleInstrumentation ( {
78
+ baseUrl : DEFAULT_OTEL_LOGS_EXPORTER_URL ,
64
79
betaMode : config . betaMode ,
65
- service : env . OTEL_SERVICE_NAME ,
80
+ service : DEFAULT_SERVICE_NAME ,
81
+ headers : exporterHeaders ,
66
82
} ) ;
67
83
68
84
sdk = new NodeSDK ( {
@@ -76,13 +92,17 @@ export const initSDK = (config: SDKConfig) => {
76
92
? {
77
93
spanProcessor : new HyperDXSpanProcessor (
78
94
new OTLPTraceExporter ( {
79
- timeoutMillis : 60000 ,
95
+ timeoutMillis : DEFAULT_OTEL_EXPORTER_OTLP_TRACES_TIMEOUT ,
96
+ url : DEFAULT_OTEL_TRACES_EXPORTER_URL ,
97
+ headers : exporterHeaders ,
80
98
} ) ,
81
99
) as any ,
82
100
}
83
101
: {
84
102
traceExporter : new OTLPTraceExporter ( {
85
- timeoutMillis : 60000 ,
103
+ timeoutMillis : DEFAULT_OTEL_EXPORTER_OTLP_TRACES_TIMEOUT ,
104
+ url : DEFAULT_OTEL_TRACES_EXPORTER_URL ,
105
+ headers : exporterHeaders ,
86
106
} ) ,
87
107
} ) ,
88
108
instrumentations : [
@@ -109,21 +129,21 @@ export const initSDK = (config: SDKConfig) => {
109
129
] ,
110
130
} ) ;
111
131
112
- if ( env . OTEL_EXPORTER_OTLP_ENDPOINT && env . OTEL_EXPORTER_OTLP_HEADERS ) {
132
+ if ( env . OTEL_EXPORTER_OTLP_HEADERS || env . HYPERDX_API_KEY ) {
113
133
console . warn (
114
134
`${ LOG_PREFIX } Tracing is enabled with configs (${ JSON . stringify (
115
135
{
116
136
advancedNetworkCapture : config . advancedNetworkCapture ,
117
137
betaMode : config . betaMode ,
118
138
consoleCapture : consoleInstrumentationEnabled ,
119
- endpoint : env . OTEL_EXPORTER_OTLP_ENDPOINT ,
120
- logLevel : env . OTEL_LOG_LEVEL ,
139
+ endpoint : DEFAULT_OTEL_TRACES_EXPORTER_URL ,
140
+ logLevel : DEFAULT_OTEL_LOG_LEVEL ,
121
141
propagators : env . OTEL_PROPAGATORS ,
122
142
resourceAttributes : env . OTEL_RESOURCE_ATTRIBUTES ,
123
143
resourceDetectors : env . OTEL_NODE_RESOURCE_DETECTORS ,
124
- sampler : env . OTEL_TRACES_SAMPLER ,
125
- samplerArg : env . OTEL_TRACES_SAMPLER_ARG ,
126
- serviceName : env . OTEL_SERVICE_NAME ,
144
+ sampler : DEFAULT_OTEL_TRACES_SAMPLER ,
145
+ samplerArg : DEFAULT_OTEL_TRACES_SAMPLER_ARG ,
146
+ serviceName : DEFAULT_SERVICE_NAME ,
127
147
stopOnTerminationSignals,
128
148
} ,
129
149
null ,
@@ -144,7 +164,7 @@ export const initSDK = (config: SDKConfig) => {
144
164
}
145
165
} else {
146
166
console . warn (
147
- `${ LOG_PREFIX } OTEL_EXPORTER_OTLP_ENDPOINT and OTEL_EXPORTER_OTLP_HEADERS are not set, tracing is disabled` ,
167
+ `${ LOG_PREFIX } HYPERDX_API_KEY or OTEL_EXPORTER_OTLP_HEADERS is not set, tracing is disabled` ,
148
168
) ;
149
169
}
150
170
0 commit comments