dd-trace 5.74.0 → 5.76.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/LICENSE-3rdparty.csv +1 -0
- package/ci/init.js +1 -0
- package/index.d.ts +11 -7
- package/loader-hook.mjs +52 -1
- package/package.json +7 -18
- package/packages/datadog-esbuild/index.js +1 -0
- package/packages/datadog-instrumentations/src/cookie-parser.js +0 -2
- package/packages/datadog-instrumentations/src/cucumber.js +2 -2
- package/packages/datadog-instrumentations/src/express-session.js +0 -1
- package/packages/datadog-instrumentations/src/mariadb.js +9 -7
- package/packages/datadog-instrumentations/src/openai.js +8 -0
- package/packages/datadog-instrumentations/src/playwright.js +163 -37
- package/packages/datadog-instrumentations/src/vitest.js +138 -20
- package/packages/datadog-plugin-aws-sdk/src/base.js +0 -1
- package/packages/datadog-plugin-openai/src/stream-helpers.js +26 -1
- package/packages/datadog-plugin-openai/src/tracing.js +46 -1
- package/packages/datadog-plugin-playwright/src/index.js +74 -31
- package/packages/datadog-plugin-vitest/src/index.js +5 -1
- package/packages/datadog-shimmer/src/shimmer.js +2 -0
- package/packages/dd-trace/src/aiguard/sdk.js +25 -3
- package/packages/dd-trace/src/aiguard/tags.js +4 -1
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +6 -0
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +30 -7
- package/packages/dd-trace/src/config-helper.js +1 -0
- package/packages/dd-trace/src/config.js +345 -329
- package/packages/dd-trace/src/config_defaults.js +9 -0
- package/packages/dd-trace/src/llmobs/plugins/openai.js +216 -12
- package/packages/dd-trace/src/llmobs/span_processor.js +2 -1
- package/packages/dd-trace/src/llmobs/tagger.js +9 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +3 -1
- package/packages/dd-trace/src/plugins/util/test.js +6 -0
- package/packages/dd-trace/src/profiling/config.js +32 -10
- package/packages/dd-trace/src/proxy.js +1 -1
- package/packages/dd-trace/src/remote_config/capabilities.js +2 -0
- package/packages/dd-trace/src/remote_config/index.js +4 -0
- package/packages/dd-trace/src/supported-configurations.json +1 -0
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +5 -3
- package/register.js +1 -11
|
@@ -19,6 +19,7 @@ const { appendRules } = require('./payload-tagging/config')
|
|
|
19
19
|
const { getEnvironmentVariable: getEnv, getEnvironmentVariables } = require('./config-helper')
|
|
20
20
|
const defaults = require('./config_defaults')
|
|
21
21
|
const path = require('path')
|
|
22
|
+
const { DD_MAJOR } = require('../../../version')
|
|
22
23
|
|
|
23
24
|
const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
|
|
24
25
|
|
|
@@ -83,20 +84,6 @@ function getFromOtelSamplerMap (otelTracesSampler, otelTracesSamplerArg) {
|
|
|
83
84
|
return OTEL_TRACES_SAMPLER_MAPPING[otelTracesSampler]
|
|
84
85
|
}
|
|
85
86
|
|
|
86
|
-
function validateOtelPropagators (propagators) {
|
|
87
|
-
if (!getEnv('PROPAGATION_STYLE_EXTRACT') &&
|
|
88
|
-
!getEnv('PROPAGATION_STYLE_INJECT') &&
|
|
89
|
-
!getEnv('DD_TRACE_PROPAGATION_STYLE') &&
|
|
90
|
-
getEnv('OTEL_PROPAGATORS')) {
|
|
91
|
-
for (const style in propagators) {
|
|
92
|
-
if (!VALID_PROPAGATION_STYLES.has(style)) {
|
|
93
|
-
log.warn('unexpected value for OTEL_PROPAGATORS environment variable')
|
|
94
|
-
getCounter('otel.env.invalid', 'DD_TRACE_PROPAGATION_STYLE', 'OTEL_PROPAGATORS').inc()
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
87
|
/**
|
|
101
88
|
* Validate the type of an environment variable
|
|
102
89
|
* @param {string} envVar - The name of the environment variable
|
|
@@ -210,30 +197,33 @@ function remapify (input, mappings) {
|
|
|
210
197
|
return output
|
|
211
198
|
}
|
|
212
199
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
200
|
+
/**
|
|
201
|
+
* Normalizes propagation style values to a lowercase array.
|
|
202
|
+
* Handles both string (comma-separated) and array inputs.
|
|
203
|
+
*/
|
|
204
|
+
function normalizePropagationStyle (value) {
|
|
205
|
+
if (Array.isArray(value)) {
|
|
206
|
+
return value.map(v => v.toLowerCase())
|
|
217
207
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if (
|
|
208
|
+
if (typeof value === 'string') {
|
|
209
|
+
return value.split(',')
|
|
210
|
+
.filter(v => v !== '')
|
|
211
|
+
.map(v => v.trim().toLowerCase())
|
|
212
|
+
}
|
|
213
|
+
if (value !== undefined) {
|
|
224
214
|
log.warn('Unexpected input for config.tracePropagationStyle')
|
|
225
215
|
}
|
|
216
|
+
}
|
|
226
217
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
.map(v => v.trim().toLowerCase())
|
|
218
|
+
/**
|
|
219
|
+
* Warns if both DD_TRACE_PROPAGATION_STYLE and specific inject/extract vars are set.
|
|
220
|
+
*/
|
|
221
|
+
function warnIfPropagationStyleConflict (general, inject, extract) {
|
|
222
|
+
if (general && (inject || extract)) {
|
|
223
|
+
log.warn(
|
|
224
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
225
|
+
'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT environment variables'
|
|
226
|
+
)
|
|
237
227
|
}
|
|
238
228
|
}
|
|
239
229
|
|
|
@@ -315,36 +305,6 @@ class Config {
|
|
|
315
305
|
|
|
316
306
|
checkIfBothOtelAndDdEnvVarSet()
|
|
317
307
|
|
|
318
|
-
const {
|
|
319
|
-
DD_API_KEY,
|
|
320
|
-
DD_APP_KEY,
|
|
321
|
-
DD_INSTRUMENTATION_INSTALL_ID = null,
|
|
322
|
-
DD_INSTRUMENTATION_INSTALL_TIME = null,
|
|
323
|
-
DD_INSTRUMENTATION_INSTALL_TYPE = null,
|
|
324
|
-
DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH,
|
|
325
|
-
DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING,
|
|
326
|
-
DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING,
|
|
327
|
-
DD_TRACE_PROPAGATION_STYLE_EXTRACT,
|
|
328
|
-
DD_TRACE_PROPAGATION_STYLE_INJECT,
|
|
329
|
-
DD_TRACE_PROPAGATION_STYLE,
|
|
330
|
-
} = envs
|
|
331
|
-
|
|
332
|
-
if (DD_TRACE_PROPAGATION_STYLE && (
|
|
333
|
-
DD_TRACE_PROPAGATION_STYLE_INJECT ||
|
|
334
|
-
DD_TRACE_PROPAGATION_STYLE_EXTRACT
|
|
335
|
-
)) {
|
|
336
|
-
log.warn(
|
|
337
|
-
// eslint-disable-next-line @stylistic/max-len
|
|
338
|
-
'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT environment variables'
|
|
339
|
-
)
|
|
340
|
-
}
|
|
341
|
-
const PROPAGATION_STYLE_INJECT = propagationStyle(
|
|
342
|
-
'inject',
|
|
343
|
-
options.tracePropagationStyle
|
|
344
|
-
)
|
|
345
|
-
|
|
346
|
-
validateOtelPropagators(PROPAGATION_STYLE_INJECT)
|
|
347
|
-
|
|
348
308
|
if (typeof options.appsec === 'boolean') {
|
|
349
309
|
options.appsec = {
|
|
350
310
|
enabled: options.appsec
|
|
@@ -357,42 +317,8 @@ class Config {
|
|
|
357
317
|
}
|
|
358
318
|
}
|
|
359
319
|
|
|
360
|
-
const cloudPayloadTaggingRequestRules = splitJSONPathRules(
|
|
361
|
-
DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING ??
|
|
362
|
-
options.cloudPayloadTagging?.request ??
|
|
363
|
-
''
|
|
364
|
-
)
|
|
365
|
-
|
|
366
|
-
const cloudPayloadTaggingResponseRules = splitJSONPathRules(
|
|
367
|
-
DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING ??
|
|
368
|
-
options.cloudPayloadTagging?.response ??
|
|
369
|
-
''
|
|
370
|
-
)
|
|
371
|
-
|
|
372
|
-
const cloudPayloadTaggingMaxDepth = maybeInt(
|
|
373
|
-
DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH ??
|
|
374
|
-
options.cloudPayloadTagging?.maxDepth
|
|
375
|
-
) ?? 10
|
|
376
|
-
|
|
377
|
-
// TODO: refactor
|
|
378
|
-
this.apiKey = DD_API_KEY
|
|
379
|
-
this.appKey = DD_APP_KEY
|
|
380
|
-
|
|
381
|
-
// sent in telemetry event app-started
|
|
382
|
-
this.installSignature = {
|
|
383
|
-
id: DD_INSTRUMENTATION_INSTALL_ID,
|
|
384
|
-
time: DD_INSTRUMENTATION_INSTALL_TIME,
|
|
385
|
-
type: DD_INSTRUMENTATION_INSTALL_TYPE
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
this.cloudPayloadTagging = {
|
|
389
|
-
requestsEnabled: !!cloudPayloadTaggingRequestRules,
|
|
390
|
-
responsesEnabled: !!cloudPayloadTaggingResponseRules,
|
|
391
|
-
maxDepth: cloudPayloadTaggingMaxDepth,
|
|
392
|
-
rules: appendRules(cloudPayloadTaggingRequestRules, cloudPayloadTaggingResponseRules)
|
|
393
|
-
}
|
|
394
|
-
|
|
395
320
|
this.#defaults = defaults
|
|
321
|
+
this.#applyDefaults()
|
|
396
322
|
this.#applyStableConfig(this.stableConfig?.localEntries ?? {}, this.#localStableConfig)
|
|
397
323
|
this.#applyEnvironment(envs)
|
|
398
324
|
this.#applyStableConfig(this.stableConfig?.fleetEntries ?? {}, this.#fleetStableConfig)
|
|
@@ -452,35 +378,32 @@ class Config {
|
|
|
452
378
|
}
|
|
453
379
|
|
|
454
380
|
#applyStableConfig (config, obj) {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
this.#setBoolean(obj, 'iast.enabled', DD_IAST_ENABLED)
|
|
475
|
-
this.#setBoolean(obj, 'logInjection', DD_LOGS_INJECTION)
|
|
476
|
-
const profilingEnabled = normalizeProfilingEnabledValue(DD_PROFILING_ENABLED)
|
|
477
|
-
this.#setString(obj, 'profiling.enabled', profilingEnabled)
|
|
478
|
-
this.#setBoolean(obj, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED)
|
|
479
|
-
this.#setString(obj, 'service', DD_SERVICE)
|
|
480
|
-
this.#setString(obj, 'version', DD_VERSION)
|
|
381
|
+
this.#applyConfigValues(config, obj, {})
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// Set environment-dependent defaults that can be overridden by users
|
|
385
|
+
#applyDefaults () {
|
|
386
|
+
const defaults = this.#defaults
|
|
387
|
+
|
|
388
|
+
if (isInServerlessEnvironment()) {
|
|
389
|
+
this.#setBoolean(defaults, 'crashtracking.enabled', false)
|
|
390
|
+
this.#setString(defaults, 'profiling.enabled', 'false')
|
|
391
|
+
this.#setBoolean(defaults, 'telemetry.enabled', false)
|
|
392
|
+
this.#setBoolean(defaults, 'remoteConfig.enabled', false)
|
|
393
|
+
} else {
|
|
394
|
+
this.#setBoolean(defaults, 'crashtracking.enabled', true)
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
if (getEnv('JEST_WORKER_ID')) {
|
|
398
|
+
this.#setBoolean(defaults, 'telemetry.enabled', false)
|
|
399
|
+
}
|
|
481
400
|
}
|
|
482
401
|
|
|
483
|
-
#applyEnvironment (
|
|
402
|
+
#applyEnvironment () {
|
|
403
|
+
this.#applyConfigValues(getEnvironmentVariables(), this.#env, this.#envUnprocessed)
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
#applyConfigValues (source, target, unprocessedTarget) {
|
|
484
407
|
const {
|
|
485
408
|
AWS_LAMBDA_FUNCTION_NAME,
|
|
486
409
|
DD_AGENT_HOST,
|
|
@@ -489,11 +412,13 @@ class Config {
|
|
|
489
412
|
DD_AI_GUARD_MAX_CONTENT_SIZE,
|
|
490
413
|
DD_AI_GUARD_MAX_MESSAGES_LENGTH,
|
|
491
414
|
DD_AI_GUARD_TIMEOUT,
|
|
415
|
+
DD_API_KEY,
|
|
492
416
|
DD_API_SECURITY_ENABLED,
|
|
493
417
|
DD_API_SECURITY_SAMPLE_DELAY,
|
|
494
418
|
DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED,
|
|
495
419
|
DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT,
|
|
496
420
|
DD_APM_TRACING_ENABLED,
|
|
421
|
+
DD_APP_KEY,
|
|
497
422
|
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
498
423
|
DD_APPSEC_COLLECT_ALL_HEADERS,
|
|
499
424
|
DD_APPSEC_ENABLED,
|
|
@@ -530,7 +455,6 @@ class Config {
|
|
|
530
455
|
DD_PROFILING_ENABLED,
|
|
531
456
|
DD_GRPC_CLIENT_ERROR_STATUSES,
|
|
532
457
|
DD_GRPC_SERVER_ERROR_STATUSES,
|
|
533
|
-
JEST_WORKER_ID,
|
|
534
458
|
DD_HEAP_SNAPSHOT_COUNT,
|
|
535
459
|
DD_HEAP_SNAPSHOT_DESTINATION,
|
|
536
460
|
DD_HEAP_SNAPSHOT_INTERVAL,
|
|
@@ -562,6 +486,9 @@ class Config {
|
|
|
562
486
|
DD_PROFILING_EXPORTERS,
|
|
563
487
|
DD_PROFILING_SOURCE_MAP,
|
|
564
488
|
DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD,
|
|
489
|
+
DD_INSTRUMENTATION_INSTALL_ID,
|
|
490
|
+
DD_INSTRUMENTATION_INSTALL_TIME,
|
|
491
|
+
DD_INSTRUMENTATION_INSTALL_TYPE,
|
|
565
492
|
DD_REMOTE_CONFIGURATION_ENABLED,
|
|
566
493
|
DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS,
|
|
567
494
|
DD_RUNTIME_METRICS_ENABLED,
|
|
@@ -588,6 +515,9 @@ class Config {
|
|
|
588
515
|
DD_TRACE_BAGGAGE_TAG_KEYS,
|
|
589
516
|
DD_TRACE_CLIENT_IP_ENABLED,
|
|
590
517
|
DD_TRACE_CLIENT_IP_HEADER,
|
|
518
|
+
DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING,
|
|
519
|
+
DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING,
|
|
520
|
+
DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH,
|
|
591
521
|
DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS,
|
|
592
522
|
DD_TRACE_ENABLED,
|
|
593
523
|
DD_TRACE_EXPERIMENTAL_EXPORTER,
|
|
@@ -646,262 +576,327 @@ class Config {
|
|
|
646
576
|
OTEL_EXPORTER_OTLP_TIMEOUT,
|
|
647
577
|
OTEL_BSP_SCHEDULE_DELAY,
|
|
648
578
|
OTEL_BSP_MAX_EXPORT_BATCH_SIZE
|
|
649
|
-
} =
|
|
579
|
+
} = source
|
|
650
580
|
|
|
651
581
|
const tags = {}
|
|
652
|
-
const env = this.#env
|
|
653
582
|
|
|
654
|
-
|
|
583
|
+
const parsedDdTags = parseSpaceSeparatedTags(DD_TAGS)
|
|
584
|
+
tagger.add(this.#parsedDdTags, parsedDdTags)
|
|
655
585
|
|
|
656
586
|
tagger.add(tags, parseSpaceSeparatedTags(handleOtel(OTEL_RESOURCE_ATTRIBUTES)))
|
|
657
|
-
tagger.add(tags,
|
|
587
|
+
tagger.add(tags, parsedDdTags)
|
|
658
588
|
tagger.add(tags, DD_TRACE_TAGS)
|
|
659
589
|
tagger.add(tags, DD_TRACE_GLOBAL_TAGS)
|
|
660
590
|
|
|
661
|
-
this.#
|
|
591
|
+
this.#setString(target, 'apiKey', DD_API_KEY)
|
|
592
|
+
this.#setBoolean(target, 'otelLogsEnabled', DD_LOGS_OTEL_ENABLED)
|
|
662
593
|
// Set OpenTelemetry logs configuration with specific _LOGS_ vars taking precedence over generic _EXPORTERS_ vars
|
|
663
594
|
if (OTEL_EXPORTER_OTLP_ENDPOINT) {
|
|
664
595
|
// Only set if there's a custom URL, otherwise let calc phase handle the default
|
|
665
|
-
this.#setString(
|
|
596
|
+
this.#setString(target, 'otelUrl', OTEL_EXPORTER_OTLP_ENDPOINT)
|
|
666
597
|
}
|
|
667
598
|
if (OTEL_EXPORTER_OTLP_ENDPOINT || OTEL_EXPORTER_OTLP_LOGS_ENDPOINT) {
|
|
668
|
-
this.#setString(
|
|
599
|
+
this.#setString(target, 'otelLogsUrl', OTEL_EXPORTER_OTLP_LOGS_ENDPOINT || target.otelUrl)
|
|
669
600
|
}
|
|
670
|
-
this.#setString(
|
|
671
|
-
this.#setString(
|
|
672
|
-
this.#setString(
|
|
673
|
-
this.#setString(
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
601
|
+
this.#setString(target, 'otelHeaders', OTEL_EXPORTER_OTLP_HEADERS)
|
|
602
|
+
this.#setString(target, 'otelLogsHeaders', OTEL_EXPORTER_OTLP_LOGS_HEADERS || target.otelHeaders)
|
|
603
|
+
this.#setString(target, 'otelProtocol', OTEL_EXPORTER_OTLP_PROTOCOL)
|
|
604
|
+
this.#setString(target, 'otelLogsProtocol', OTEL_EXPORTER_OTLP_LOGS_PROTOCOL || target.otelProtocol)
|
|
605
|
+
target.otelTimeout = maybeInt(OTEL_EXPORTER_OTLP_TIMEOUT)
|
|
606
|
+
target.otelLogsTimeout = maybeInt(OTEL_EXPORTER_OTLP_LOGS_TIMEOUT) || target.otelTimeout
|
|
607
|
+
target.otelLogsBatchTimeout = maybeInt(OTEL_BSP_SCHEDULE_DELAY)
|
|
608
|
+
target.otelLogsMaxExportBatchSize = maybeInt(OTEL_BSP_MAX_EXPORT_BATCH_SIZE)
|
|
678
609
|
this.#setBoolean(
|
|
679
|
-
|
|
610
|
+
target,
|
|
680
611
|
'apmTracingEnabled',
|
|
681
612
|
DD_APM_TRACING_ENABLED ??
|
|
682
613
|
(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED))
|
|
683
614
|
)
|
|
684
|
-
this.#
|
|
685
|
-
|
|
686
|
-
|
|
615
|
+
this.#setString(target, 'appKey', DD_APP_KEY)
|
|
616
|
+
this.#setBoolean(target, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
|
|
617
|
+
target['appsec.apiSecurity.sampleDelay'] = maybeFloat(DD_API_SECURITY_SAMPLE_DELAY)
|
|
618
|
+
this.#setBoolean(target, 'appsec.apiSecurity.endpointCollectionEnabled',
|
|
687
619
|
DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED)
|
|
688
|
-
|
|
620
|
+
target['appsec.apiSecurity.endpointCollectionMessageLimit'] =
|
|
689
621
|
maybeInt(DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT)
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
this.#setBoolean(
|
|
696
|
-
this.#setString(
|
|
622
|
+
target['appsec.blockedTemplateGraphql'] = maybeFile(DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON)
|
|
623
|
+
target['appsec.blockedTemplateHtml'] = maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML)
|
|
624
|
+
unprocessedTarget['appsec.blockedTemplateHtml'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML
|
|
625
|
+
target['appsec.blockedTemplateJson'] = maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON)
|
|
626
|
+
unprocessedTarget['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
|
|
627
|
+
this.#setBoolean(target, 'appsec.enabled', DD_APPSEC_ENABLED)
|
|
628
|
+
this.#setString(target, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
|
|
697
629
|
// TODO appsec.extendedHeadersCollection are deprecated, to delete in a major
|
|
698
|
-
this.#setBoolean(
|
|
630
|
+
this.#setBoolean(target, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
|
|
699
631
|
this.#setBoolean(
|
|
700
|
-
|
|
632
|
+
target,
|
|
701
633
|
'appsec.extendedHeadersCollection.redaction',
|
|
702
634
|
DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED
|
|
703
635
|
)
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
this.#setString(
|
|
707
|
-
this.#setString(
|
|
708
|
-
this.#setBoolean(
|
|
636
|
+
target['appsec.extendedHeadersCollection.maxHeaders'] = maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS)
|
|
637
|
+
unprocessedTarget['appsec.extendedHeadersCollection.maxHeaders'] = DD_APPSEC_MAX_COLLECTED_HEADERS
|
|
638
|
+
this.#setString(target, 'appsec.obfuscatorKeyRegex', DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP)
|
|
639
|
+
this.#setString(target, 'appsec.obfuscatorValueRegex', DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP)
|
|
640
|
+
this.#setBoolean(target, 'appsec.rasp.enabled', DD_APPSEC_RASP_ENABLED)
|
|
709
641
|
// TODO Deprecated, to delete in a major
|
|
710
|
-
this.#setBoolean(
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
this.#setString(
|
|
642
|
+
this.#setBoolean(target, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
|
|
643
|
+
target['appsec.rateLimit'] = maybeInt(DD_APPSEC_TRACE_RATE_LIMIT)
|
|
644
|
+
unprocessedTarget['appsec.rateLimit'] = DD_APPSEC_TRACE_RATE_LIMIT
|
|
645
|
+
this.#setString(target, 'appsec.rules', DD_APPSEC_RULES)
|
|
714
646
|
// DD_APPSEC_SCA_ENABLED is never used locally, but only sent to the backend
|
|
715
|
-
this.#setBoolean(
|
|
716
|
-
this.#setBoolean(
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
this.#setBoolean(
|
|
727
|
-
this.#setString(
|
|
728
|
-
|
|
729
|
-
|
|
647
|
+
this.#setBoolean(target, 'appsec.sca.enabled', DD_APPSEC_SCA_ENABLED)
|
|
648
|
+
this.#setBoolean(target, 'appsec.stackTrace.enabled', DD_APPSEC_STACK_TRACE_ENABLED)
|
|
649
|
+
target['appsec.stackTrace.maxDepth'] = maybeInt(DD_APPSEC_MAX_STACK_TRACE_DEPTH)
|
|
650
|
+
unprocessedTarget['appsec.stackTrace.maxDepth'] = DD_APPSEC_MAX_STACK_TRACE_DEPTH
|
|
651
|
+
target['appsec.stackTrace.maxStackTraces'] = maybeInt(DD_APPSEC_MAX_STACK_TRACES)
|
|
652
|
+
unprocessedTarget['appsec.stackTrace.maxStackTraces'] = DD_APPSEC_MAX_STACK_TRACES
|
|
653
|
+
target['appsec.wafTimeout'] = maybeInt(DD_APPSEC_WAF_TIMEOUT)
|
|
654
|
+
unprocessedTarget['appsec.wafTimeout'] = DD_APPSEC_WAF_TIMEOUT
|
|
655
|
+
target.baggageMaxBytes = DD_TRACE_BAGGAGE_MAX_BYTES
|
|
656
|
+
target.baggageMaxItems = DD_TRACE_BAGGAGE_MAX_ITEMS
|
|
657
|
+
target.baggageTagKeys = DD_TRACE_BAGGAGE_TAG_KEYS
|
|
658
|
+
this.#setBoolean(target, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
|
|
659
|
+
this.#setString(target, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
|
|
660
|
+
if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING || DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
|
|
661
|
+
if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING) {
|
|
662
|
+
this.#setBoolean(target, 'cloudPayloadTagging.requestsEnabled', true)
|
|
663
|
+
}
|
|
664
|
+
if (DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
|
|
665
|
+
this.#setBoolean(target, 'cloudPayloadTagging.responsesEnabled', true)
|
|
666
|
+
}
|
|
667
|
+
target['cloudPayloadTagging.rules'] = appendRules(
|
|
668
|
+
splitJSONPathRules(DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING),
|
|
669
|
+
splitJSONPathRules(DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING)
|
|
670
|
+
)
|
|
671
|
+
}
|
|
672
|
+
if (DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH) {
|
|
673
|
+
target['cloudPayloadTagging.maxDepth'] = maybeInt(DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH)
|
|
674
|
+
}
|
|
675
|
+
this.#setBoolean(target, 'crashtracking.enabled', DD_CRASHTRACKING_ENABLED)
|
|
676
|
+
this.#setBoolean(target, 'codeOriginForSpans.enabled', DD_CODE_ORIGIN_FOR_SPANS_ENABLED)
|
|
730
677
|
this.#setBoolean(
|
|
731
|
-
|
|
678
|
+
target,
|
|
732
679
|
'codeOriginForSpans.experimental.exit_spans.enabled',
|
|
733
680
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED
|
|
734
681
|
)
|
|
735
|
-
this.#setString(
|
|
736
|
-
this.#setString(
|
|
737
|
-
this.#setString(
|
|
738
|
-
this.#setBoolean(
|
|
739
|
-
this.#setBoolean(
|
|
740
|
-
this.#setString(
|
|
741
|
-
this.#setArray(
|
|
682
|
+
this.#setString(target, 'dbmPropagationMode', DD_DBM_PROPAGATION_MODE)
|
|
683
|
+
this.#setString(target, 'dogstatsd.hostname', DD_DOGSTATSD_HOST)
|
|
684
|
+
this.#setString(target, 'dogstatsd.port', DD_DOGSTATSD_PORT)
|
|
685
|
+
this.#setBoolean(target, 'dsmEnabled', DD_DATA_STREAMS_ENABLED)
|
|
686
|
+
this.#setBoolean(target, 'dynamicInstrumentation.enabled', DD_DYNAMIC_INSTRUMENTATION_ENABLED)
|
|
687
|
+
this.#setString(target, 'dynamicInstrumentation.probeFile', DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE)
|
|
688
|
+
this.#setArray(target, 'dynamicInstrumentation.redactedIdentifiers',
|
|
689
|
+
DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS)
|
|
742
690
|
this.#setArray(
|
|
743
|
-
|
|
691
|
+
target,
|
|
744
692
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
745
693
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS
|
|
746
694
|
)
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
this.#
|
|
751
|
-
this.#setBoolean(
|
|
752
|
-
this.#setBoolean(
|
|
753
|
-
this.#
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
this.#
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
this.#
|
|
771
|
-
|
|
772
|
-
this.#
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
this.#
|
|
776
|
-
|
|
777
|
-
this.#
|
|
778
|
-
|
|
779
|
-
this.#
|
|
780
|
-
this.#setBoolean(
|
|
781
|
-
|
|
782
|
-
|
|
695
|
+
target['dynamicInstrumentation.uploadIntervalSeconds'] =
|
|
696
|
+
maybeFloat(DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS)
|
|
697
|
+
unprocessedTarget['dynamicInstrumentation.uploadInterval'] = DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS
|
|
698
|
+
this.#setString(target, 'env', DD_ENV || tags.env)
|
|
699
|
+
this.#setBoolean(target, 'experimental.flaggingProvider.enabled', DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED)
|
|
700
|
+
this.#setBoolean(target, 'traceEnabled', DD_TRACE_ENABLED)
|
|
701
|
+
this.#setBoolean(target, 'experimental.aiguard.enabled', DD_AI_GUARD_ENABLED)
|
|
702
|
+
this.#setString(target, 'experimental.aiguard.endpoint', DD_AI_GUARD_ENDPOINT)
|
|
703
|
+
target['experimental.aiguard.maxContentSize'] = maybeInt(DD_AI_GUARD_MAX_CONTENT_SIZE)
|
|
704
|
+
unprocessedTarget['experimental.aiguard.maxContentSize'] = DD_AI_GUARD_MAX_CONTENT_SIZE
|
|
705
|
+
target['experimental.aiguard.maxMessagesLength'] = maybeInt(DD_AI_GUARD_MAX_MESSAGES_LENGTH)
|
|
706
|
+
unprocessedTarget['experimental.aiguard.maxMessagesLength'] = DD_AI_GUARD_MAX_MESSAGES_LENGTH
|
|
707
|
+
target['experimental.aiguard.timeout'] = maybeInt(DD_AI_GUARD_TIMEOUT)
|
|
708
|
+
unprocessedTarget['experimental.aiguard.timeout'] = DD_AI_GUARD_TIMEOUT
|
|
709
|
+
this.#setBoolean(target, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
|
|
710
|
+
this.#setString(target, 'experimental.exporter', DD_TRACE_EXPERIMENTAL_EXPORTER)
|
|
711
|
+
if (AWS_LAMBDA_FUNCTION_NAME) {
|
|
712
|
+
target.flushInterval = 0
|
|
713
|
+
} else if (DD_TRACE_FLUSH_INTERVAL) {
|
|
714
|
+
target.flushInterval = maybeInt(DD_TRACE_FLUSH_INTERVAL)
|
|
715
|
+
}
|
|
716
|
+
target.flushMinSpans = maybeInt(DD_TRACE_PARTIAL_FLUSH_MIN_SPANS)
|
|
717
|
+
unprocessedTarget.flushMinSpans = DD_TRACE_PARTIAL_FLUSH_MIN_SPANS
|
|
718
|
+
this.#setBoolean(target, 'gitMetadataEnabled', DD_TRACE_GIT_METADATA_ENABLED)
|
|
719
|
+
this.#setIntegerRangeSet(target, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
|
|
720
|
+
this.#setIntegerRangeSet(target, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
|
|
721
|
+
this.#setArray(target, 'headerTags', DD_TRACE_HEADER_TAGS)
|
|
722
|
+
target['heapSnapshot.count'] = maybeInt(DD_HEAP_SNAPSHOT_COUNT)
|
|
723
|
+
this.#setString(target, 'heapSnapshot.destination', DD_HEAP_SNAPSHOT_DESTINATION)
|
|
724
|
+
target['heapSnapshot.interval'] = maybeInt(DD_HEAP_SNAPSHOT_INTERVAL)
|
|
725
|
+
this.#setString(target, 'hostname', DD_AGENT_HOST)
|
|
726
|
+
target['iast.dbRowsToTaint'] = maybeInt(DD_IAST_DB_ROWS_TO_TAINT)
|
|
727
|
+
this.#setBoolean(target, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
|
|
728
|
+
this.#setBoolean(target, 'iast.enabled', DD_IAST_ENABLED)
|
|
729
|
+
target['iast.maxConcurrentRequests'] = maybeInt(DD_IAST_MAX_CONCURRENT_REQUESTS)
|
|
730
|
+
unprocessedTarget['iast.maxConcurrentRequests'] = DD_IAST_MAX_CONCURRENT_REQUESTS
|
|
731
|
+
target['iast.maxContextOperations'] = maybeInt(DD_IAST_MAX_CONTEXT_OPERATIONS)
|
|
732
|
+
unprocessedTarget['iast.maxContextOperations'] = DD_IAST_MAX_CONTEXT_OPERATIONS
|
|
733
|
+
this.#setBoolean(target, 'iast.redactionEnabled', DD_IAST_REDACTION_ENABLED && !isFalse(DD_IAST_REDACTION_ENABLED))
|
|
734
|
+
this.#setString(target, 'iast.redactionNamePattern', DD_IAST_REDACTION_NAME_PATTERN)
|
|
735
|
+
this.#setString(target, 'iast.redactionValuePattern', DD_IAST_REDACTION_VALUE_PATTERN)
|
|
783
736
|
const iastRequestSampling = maybeInt(DD_IAST_REQUEST_SAMPLING)
|
|
784
737
|
if (iastRequestSampling !== undefined && iastRequestSampling > -1 && iastRequestSampling < 101) {
|
|
785
|
-
|
|
738
|
+
target['iast.requestSampling'] = iastRequestSampling
|
|
786
739
|
}
|
|
787
|
-
|
|
788
|
-
this.#setString(
|
|
789
|
-
this.#setString(
|
|
790
|
-
this.#setBoolean(
|
|
791
|
-
this.#
|
|
792
|
-
this.#setString(
|
|
793
|
-
this.#
|
|
794
|
-
this.#
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
this.#setBoolean(
|
|
799
|
-
this.#setBoolean(
|
|
800
|
-
this.#setBoolean(
|
|
801
|
-
|
|
802
|
-
|
|
740
|
+
unprocessedTarget['iast.requestSampling'] = DD_IAST_REQUEST_SAMPLING
|
|
741
|
+
this.#setString(target, 'iast.securityControlsConfiguration', DD_IAST_SECURITY_CONTROLS_CONFIGURATION)
|
|
742
|
+
this.#setString(target, 'iast.telemetryVerbosity', DD_IAST_TELEMETRY_VERBOSITY)
|
|
743
|
+
this.#setBoolean(target, 'iast.stackTrace.enabled', DD_IAST_STACK_TRACE_ENABLED)
|
|
744
|
+
this.#setString(target, 'installSignature.id', DD_INSTRUMENTATION_INSTALL_ID)
|
|
745
|
+
this.#setString(target, 'installSignature.time', DD_INSTRUMENTATION_INSTALL_TIME)
|
|
746
|
+
this.#setString(target, 'installSignature.type', DD_INSTRUMENTATION_INSTALL_TYPE)
|
|
747
|
+
this.#setArray(target, 'injectionEnabled', DD_INJECTION_ENABLED)
|
|
748
|
+
if (DD_INJECTION_ENABLED !== undefined) {
|
|
749
|
+
this.#setString(target, 'instrumentationSource', DD_INJECTION_ENABLED ? 'ssi' : 'manual')
|
|
750
|
+
}
|
|
751
|
+
this.#setBoolean(target, 'injectForce', DD_INJECT_FORCE)
|
|
752
|
+
this.#setBoolean(target, 'isAzureFunction', getIsAzureFunction())
|
|
753
|
+
this.#setBoolean(target, 'isGCPFunction', getIsGCPFunction())
|
|
754
|
+
target['langchain.spanCharLimit'] = maybeInt(DD_LANGCHAIN_SPAN_CHAR_LIMIT)
|
|
755
|
+
target['langchain.spanPromptCompletionSampleRate'] = maybeFloat(DD_LANGCHAIN_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
756
|
+
this.#setBoolean(target, 'legacyBaggageEnabled', DD_TRACE_LEGACY_BAGGAGE_ENABLED)
|
|
757
|
+
this.#setBoolean(target, 'llmobs.agentlessEnabled', DD_LLMOBS_AGENTLESS_ENABLED)
|
|
758
|
+
this.#setBoolean(target, 'llmobs.enabled', DD_LLMOBS_ENABLED)
|
|
759
|
+
this.#setString(target, 'llmobs.mlApp', DD_LLMOBS_ML_APP)
|
|
760
|
+
this.#setBoolean(target, 'logInjection', DD_LOGS_INJECTION)
|
|
803
761
|
// Requires an accompanying DD_APM_OBFUSCATION_MEMCACHED_KEEP_COMMAND=true in the agent
|
|
804
|
-
this.#setBoolean(
|
|
805
|
-
this.#setBoolean(
|
|
806
|
-
this.#setBoolean(
|
|
807
|
-
|
|
808
|
-
|
|
762
|
+
this.#setBoolean(target, 'memcachedCommandEnabled', DD_TRACE_MEMCACHED_COMMAND_ENABLED)
|
|
763
|
+
this.#setBoolean(target, 'middlewareTracingEnabled', DD_TRACE_MIDDLEWARE_TRACING_ENABLED)
|
|
764
|
+
this.#setBoolean(target, 'openAiLogsEnabled', DD_OPENAI_LOGS_ENABLED)
|
|
765
|
+
target['openai.spanCharLimit'] = maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT)
|
|
766
|
+
unprocessedTarget.openaiSpanCharLimit = DD_OPENAI_SPAN_CHAR_LIMIT
|
|
809
767
|
if (DD_TRACE_PEER_SERVICE_MAPPING) {
|
|
810
|
-
|
|
768
|
+
target.peerServiceMapping = Object.fromEntries(
|
|
811
769
|
DD_TRACE_PEER_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
812
770
|
)
|
|
813
|
-
|
|
771
|
+
unprocessedTarget.peerServiceMapping = DD_TRACE_PEER_SERVICE_MAPPING
|
|
814
772
|
}
|
|
815
|
-
this.#setString(
|
|
816
|
-
const profilingEnabled = normalizeProfilingEnabledValue(
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
)
|
|
820
|
-
this.#setString(env, 'profiling.enabled', profilingEnabled)
|
|
821
|
-
this.#setString(env, 'profiling.exporters', DD_PROFILING_EXPORTERS)
|
|
822
|
-
this.#setBoolean(env, 'profiling.sourceMap', DD_PROFILING_SOURCE_MAP && !isFalse(DD_PROFILING_SOURCE_MAP))
|
|
773
|
+
this.#setString(target, 'port', DD_TRACE_AGENT_PORT)
|
|
774
|
+
const profilingEnabled = normalizeProfilingEnabledValue(DD_PROFILING_ENABLED)
|
|
775
|
+
this.#setString(target, 'profiling.enabled', profilingEnabled)
|
|
776
|
+
this.#setString(target, 'profiling.exporters', DD_PROFILING_EXPORTERS)
|
|
777
|
+
this.#setBoolean(target, 'profiling.sourceMap', DD_PROFILING_SOURCE_MAP && !isFalse(DD_PROFILING_SOURCE_MAP))
|
|
823
778
|
if (DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD) {
|
|
824
779
|
// This is only used in testing to not have to wait 30s
|
|
825
|
-
|
|
780
|
+
target['profiling.longLivedThreshold'] = Number(DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD)
|
|
826
781
|
}
|
|
827
782
|
|
|
828
|
-
this.#setString(
|
|
829
|
-
this.#setString(
|
|
830
|
-
this.#setBoolean(
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
this.#setBoolean(
|
|
783
|
+
this.#setString(target, 'protocolVersion', DD_TRACE_AGENT_PROTOCOL_VERSION)
|
|
784
|
+
this.#setString(target, 'queryStringObfuscation', DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP)
|
|
785
|
+
this.#setBoolean(target, 'remoteConfig.enabled', DD_REMOTE_CONFIGURATION_ENABLED)
|
|
786
|
+
target['remoteConfig.pollInterval'] = maybeFloat(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS)
|
|
787
|
+
unprocessedTarget['remoteConfig.pollInterval'] = DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS
|
|
788
|
+
this.#setBoolean(target, 'reportHostname', DD_TRACE_REPORT_HOSTNAME)
|
|
834
789
|
// only used to explicitly set runtimeMetrics to false
|
|
835
790
|
const otelSetRuntimeMetrics = String(OTEL_METRICS_EXPORTER).toLowerCase() === 'none'
|
|
836
791
|
? false
|
|
837
792
|
: undefined
|
|
838
|
-
this.#setBoolean(
|
|
793
|
+
this.#setBoolean(target, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED ||
|
|
839
794
|
otelSetRuntimeMetrics)
|
|
840
|
-
this.#setBoolean(
|
|
841
|
-
this.#setBoolean(
|
|
842
|
-
this.#setBoolean(
|
|
843
|
-
this.#setArray(
|
|
795
|
+
this.#setBoolean(target, 'runtimeMetrics.eventLoop', DD_RUNTIME_METRICS_EVENT_LOOP_ENABLED)
|
|
796
|
+
this.#setBoolean(target, 'runtimeMetrics.gc', DD_RUNTIME_METRICS_GC_ENABLED)
|
|
797
|
+
this.#setBoolean(target, 'runtimeMetricsRuntimeId', DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED)
|
|
798
|
+
this.#setArray(target, 'sampler.spanSamplingRules', reformatSpanSamplingRules(
|
|
844
799
|
maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE) ??
|
|
845
800
|
safeJsonParse(DD_SPAN_SAMPLING_RULES)
|
|
846
801
|
))
|
|
847
|
-
this.#setUnit(
|
|
802
|
+
this.#setUnit(target, 'sampleRate', DD_TRACE_SAMPLE_RATE ||
|
|
848
803
|
getFromOtelSamplerMap(OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG))
|
|
849
|
-
|
|
850
|
-
this.#setSamplingRule(
|
|
851
|
-
|
|
852
|
-
this.#setString(
|
|
853
|
-
this.#setString(
|
|
804
|
+
target['sampler.rateLimit'] = DD_TRACE_RATE_LIMIT
|
|
805
|
+
this.#setSamplingRule(target, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
|
|
806
|
+
unprocessedTarget['sampler.rules'] = DD_TRACE_SAMPLING_RULES
|
|
807
|
+
this.#setString(target, 'scope', DD_TRACE_SCOPE)
|
|
808
|
+
this.#setString(target, 'service', DD_SERVICE || tags.service || OTEL_SERVICE_NAME)
|
|
854
809
|
if (DD_SERVICE_MAPPING) {
|
|
855
|
-
|
|
810
|
+
target.serviceMapping = Object.fromEntries(
|
|
856
811
|
DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
857
812
|
)
|
|
858
813
|
}
|
|
859
|
-
this.#setString(
|
|
814
|
+
this.#setString(target, 'site', DD_SITE)
|
|
860
815
|
if (DD_TRACE_SPAN_ATTRIBUTE_SCHEMA) {
|
|
861
|
-
this.#setString(
|
|
862
|
-
|
|
816
|
+
this.#setString(target, 'spanAttributeSchema', validateNamingVersion(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA))
|
|
817
|
+
unprocessedTarget.spanAttributeSchema = DD_TRACE_SPAN_ATTRIBUTE_SCHEMA
|
|
863
818
|
}
|
|
864
819
|
// 0: disabled, 1: logging, 2: garbage collection + logging
|
|
865
|
-
|
|
866
|
-
this.#setBoolean(
|
|
867
|
-
this.#setBoolean(
|
|
868
|
-
this.#setTags(
|
|
869
|
-
|
|
870
|
-
this.#setBoolean(
|
|
871
|
-
|
|
872
|
-
this.#
|
|
873
|
-
this.#setBoolean(
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
this.#
|
|
877
|
-
this.#setBoolean(
|
|
878
|
-
this.#setBoolean(
|
|
879
|
-
this.#setBoolean(
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
env.tracePropagationBehaviorExtract =
|
|
884
|
-
VALID_PROPAGATION_BEHAVIOR_EXTRACT.has(stringPropagationBehaviorExtract)
|
|
885
|
-
? stringPropagationBehaviorExtract
|
|
886
|
-
: 'continue'
|
|
887
|
-
this.#setBoolean(env, 'tracePropagationStyle.otelPropagators',
|
|
888
|
-
DD_TRACE_PROPAGATION_STYLE ||
|
|
889
|
-
DD_TRACE_PROPAGATION_STYLE_INJECT ||
|
|
820
|
+
target.spanLeakDebug = maybeInt(DD_TRACE_SPAN_LEAK_DEBUG)
|
|
821
|
+
this.#setBoolean(target, 'spanRemoveIntegrationFromService', DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED)
|
|
822
|
+
this.#setBoolean(target, 'startupLogs', DD_TRACE_STARTUP_LOGS)
|
|
823
|
+
this.#setTags(target, 'tags', tags)
|
|
824
|
+
target.tagsHeaderMaxLength = DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH
|
|
825
|
+
this.#setBoolean(target, 'telemetry.enabled', DD_INSTRUMENTATION_TELEMETRY_ENABLED)
|
|
826
|
+
this.#setString(target, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
|
|
827
|
+
this.#setBoolean(target, 'telemetry.debug', DD_TELEMETRY_DEBUG)
|
|
828
|
+
this.#setBoolean(target, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED)
|
|
829
|
+
target['telemetry.heartbeatInterval'] = maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000))
|
|
830
|
+
unprocessedTarget['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000
|
|
831
|
+
this.#setBoolean(target, 'telemetry.logCollection', DD_TELEMETRY_LOG_COLLECTION_ENABLED)
|
|
832
|
+
this.#setBoolean(target, 'telemetry.metrics', DD_TELEMETRY_METRICS_ENABLED)
|
|
833
|
+
this.#setBoolean(target, 'traceId128BitGenerationEnabled', DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED)
|
|
834
|
+
this.#setBoolean(target, 'traceId128BitLoggingEnabled', DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED)
|
|
835
|
+
warnIfPropagationStyleConflict(
|
|
836
|
+
DD_TRACE_PROPAGATION_STYLE,
|
|
837
|
+
DD_TRACE_PROPAGATION_STYLE_INJECT,
|
|
890
838
|
DD_TRACE_PROPAGATION_STYLE_EXTRACT
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
839
|
+
)
|
|
840
|
+
if (DD_TRACE_PROPAGATION_STYLE !== undefined) {
|
|
841
|
+
this.#setArray(target, 'tracePropagationStyle.inject', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
|
|
842
|
+
this.#setArray(target, 'tracePropagationStyle.extract', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
|
|
843
|
+
}
|
|
844
|
+
if (DD_TRACE_PROPAGATION_STYLE_INJECT !== undefined) {
|
|
845
|
+
this.#setArray(target, 'tracePropagationStyle.inject',
|
|
846
|
+
normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE_INJECT))
|
|
847
|
+
}
|
|
848
|
+
if (DD_TRACE_PROPAGATION_STYLE_EXTRACT !== undefined) {
|
|
849
|
+
this.#setArray(target, 'tracePropagationStyle.extract',
|
|
850
|
+
normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE_EXTRACT))
|
|
851
|
+
}
|
|
852
|
+
this.#setBoolean(target, 'tracePropagationExtractFirst', DD_TRACE_PROPAGATION_EXTRACT_FIRST)
|
|
853
|
+
if (DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT !== undefined) {
|
|
854
|
+
const stringPropagationBehaviorExtract = String(DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT)
|
|
855
|
+
target.tracePropagationBehaviorExtract =
|
|
856
|
+
VALID_PROPAGATION_BEHAVIOR_EXTRACT.has(stringPropagationBehaviorExtract)
|
|
857
|
+
? stringPropagationBehaviorExtract
|
|
858
|
+
: 'continue'
|
|
859
|
+
}
|
|
860
|
+
if (DD_TRACE_PROPAGATION_STYLE !== undefined ||
|
|
861
|
+
DD_TRACE_PROPAGATION_STYLE_INJECT !== undefined ||
|
|
862
|
+
DD_TRACE_PROPAGATION_STYLE_EXTRACT !== undefined ||
|
|
863
|
+
OTEL_PROPAGATORS !== undefined) {
|
|
864
|
+
// At least one var is defined, calculate value using truthy logic
|
|
865
|
+
const useDdStyle = DD_TRACE_PROPAGATION_STYLE ||
|
|
866
|
+
DD_TRACE_PROPAGATION_STYLE_INJECT ||
|
|
867
|
+
DD_TRACE_PROPAGATION_STYLE_EXTRACT
|
|
868
|
+
this.#setBoolean(target, 'tracePropagationStyle.otelPropagators',
|
|
869
|
+
useDdStyle ? false : !!OTEL_PROPAGATORS)
|
|
870
|
+
|
|
871
|
+
// Use OTEL_PROPAGATORS if no DD-specific vars are set
|
|
872
|
+
if (!useDdStyle && OTEL_PROPAGATORS) {
|
|
873
|
+
const otelStyles = normalizePropagationStyle(OTEL_PROPAGATORS)
|
|
874
|
+
// Validate OTEL propagators
|
|
875
|
+
for (const style of otelStyles || []) {
|
|
876
|
+
if (!VALID_PROPAGATION_STYLES.has(style)) {
|
|
877
|
+
log.warn('unexpected value %s for OTEL_PROPAGATORS environment variable', style)
|
|
878
|
+
getCounter('otel.env.invalid', 'DD_TRACE_PROPAGATION_STYLE', 'OTEL_PROPAGATORS').inc()
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
// Set inject/extract from OTEL_PROPAGATORS
|
|
882
|
+
if (otelStyles) {
|
|
883
|
+
this.#setArray(target, 'tracePropagationStyle.inject', otelStyles)
|
|
884
|
+
this.#setArray(target, 'tracePropagationStyle.extract', otelStyles)
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
this.#setBoolean(target, 'traceWebsocketMessagesEnabled', DD_TRACE_WEBSOCKET_MESSAGES_ENABLED)
|
|
889
|
+
this.#setBoolean(target, 'traceWebsocketMessagesInheritSampling', DD_TRACE_WEBSOCKET_MESSAGES_INHERIT_SAMPLING)
|
|
890
|
+
this.#setBoolean(target, 'traceWebsocketMessagesSeparateTraces', DD_TRACE_WEBSOCKET_MESSAGES_SEPARATE_TRACES)
|
|
891
|
+
this.#setBoolean(target, 'tracing', DD_TRACING_ENABLED)
|
|
892
|
+
this.#setString(target, 'version', DD_VERSION || tags.version)
|
|
893
|
+
this.#setBoolean(target, 'inferredProxyServicesEnabled', DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED)
|
|
894
|
+
this.#setBoolean(target, 'trace.aws.addSpanPointers', DD_TRACE_AWS_ADD_SPAN_POINTERS)
|
|
895
|
+
this.#setString(target, 'trace.dynamoDb.tablePrimaryKeys', DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS)
|
|
896
|
+
this.#setArray(target, 'graphqlErrorExtensions', DD_TRACE_GRAPHQL_ERROR_EXTENSIONS)
|
|
897
|
+
this.#setBoolean(target, 'trace.nativeSpanEvents', DD_TRACE_NATIVE_SPAN_EVENTS)
|
|
898
|
+
target['vertexai.spanPromptCompletionSampleRate'] = maybeFloat(DD_VERTEXAI_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
899
|
+
target['vertexai.spanCharLimit'] = maybeInt(DD_VERTEXAI_SPAN_CHAR_LIMIT)
|
|
905
900
|
}
|
|
906
901
|
|
|
907
902
|
#applyOptions (options) {
|
|
@@ -954,6 +949,25 @@ class Config {
|
|
|
954
949
|
this.#optsUnprocessed['appsec.wafTimeout'] = options.appsec?.wafTimeout
|
|
955
950
|
this.#setBoolean(opts, 'clientIpEnabled', options.clientIpEnabled)
|
|
956
951
|
this.#setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
|
|
952
|
+
if (options.cloudPayloadTagging?.request || options.cloudPayloadTagging?.response) {
|
|
953
|
+
if (options.cloudPayloadTagging.request) {
|
|
954
|
+
this.#setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', true)
|
|
955
|
+
}
|
|
956
|
+
if (options.cloudPayloadTagging.response) {
|
|
957
|
+
this.#setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', true)
|
|
958
|
+
}
|
|
959
|
+
opts['cloudPayloadTagging.rules'] = appendRules(
|
|
960
|
+
splitJSONPathRules(options.cloudPayloadTagging.request),
|
|
961
|
+
splitJSONPathRules(options.cloudPayloadTagging.response)
|
|
962
|
+
)
|
|
963
|
+
}
|
|
964
|
+
if (options.cloudPayloadTagging?.requestsEnabled !== undefined) {
|
|
965
|
+
this.#setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', options.cloudPayloadTagging.requestsEnabled)
|
|
966
|
+
}
|
|
967
|
+
if (options.cloudPayloadTagging?.responsesEnabled !== undefined) {
|
|
968
|
+
this.#setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', options.cloudPayloadTagging.responsesEnabled)
|
|
969
|
+
}
|
|
970
|
+
opts['cloudPayloadTagging.maxDepth'] = maybeInt(options.cloudPayloadTagging?.maxDepth)
|
|
957
971
|
opts.baggageMaxBytes = options.baggageMaxBytes
|
|
958
972
|
opts.baggageMaxItems = options.baggageMaxItems
|
|
959
973
|
opts.baggageTagKeys = options.baggageTagKeys
|
|
@@ -1019,7 +1033,9 @@ class Config {
|
|
|
1019
1033
|
opts['iast.requestSampling'] = iastRequestSampling
|
|
1020
1034
|
this.#optsUnprocessed['iast.requestSampling'] = options.iast?.requestSampling
|
|
1021
1035
|
}
|
|
1022
|
-
|
|
1036
|
+
if (DD_MAJOR < 6) {
|
|
1037
|
+
opts['iast.securityControlsConfiguration'] = options.iast?.securityControlsConfiguration
|
|
1038
|
+
}
|
|
1023
1039
|
this.#setBoolean(opts, 'iast.stackTrace.enabled', options.iast?.stackTrace?.enabled)
|
|
1024
1040
|
this.#setString(opts, 'iast.telemetryVerbosity', options.iast && options.iast.telemetryVerbosity)
|
|
1025
1041
|
this.#setBoolean(opts, 'isCiVisibility', options.isCiVisibility)
|
|
@@ -1070,6 +1086,12 @@ class Config {
|
|
|
1070
1086
|
this.#setBoolean(opts, 'inferredProxyServicesEnabled', options.inferredProxyServicesEnabled)
|
|
1071
1087
|
this.#setBoolean(opts, 'graphqlErrorExtensions', options.graphqlErrorExtensions)
|
|
1072
1088
|
this.#setBoolean(opts, 'trace.nativeSpanEvents', options.trace?.nativeSpanEvents)
|
|
1089
|
+
if (options.tracePropagationStyle) {
|
|
1090
|
+
this.#setArray(opts, 'tracePropagationStyle.inject',
|
|
1091
|
+
normalizePropagationStyle(options.tracePropagationStyle.inject ?? options.tracePropagationStyle))
|
|
1092
|
+
this.#setArray(opts, 'tracePropagationStyle.extract',
|
|
1093
|
+
normalizePropagationStyle(options.tracePropagationStyle.extract ?? options.tracePropagationStyle))
|
|
1094
|
+
}
|
|
1073
1095
|
|
|
1074
1096
|
// For LLMObs, we want the environment variable to take precedence over the options.
|
|
1075
1097
|
// This is reliant on environment config being set before options.
|
|
@@ -1189,17 +1211,11 @@ class Config {
|
|
|
1189
1211
|
this.#setBoolean(calc, 'spanComputePeerService', this.#getSpanComputePeerService())
|
|
1190
1212
|
this.#setBoolean(calc, 'stats.enabled', this.#isTraceStatsComputationEnabled())
|
|
1191
1213
|
const defaultPropagationStyle = this.#getDefaultPropagationStyle(this.#optionsArg)
|
|
1192
|
-
calc['tracePropagationStyle.inject'] = propagationStyle(
|
|
1193
|
-
'inject',
|
|
1194
|
-
this.#optionsArg.tracePropagationStyle
|
|
1195
|
-
)
|
|
1196
|
-
calc['tracePropagationStyle.extract'] = propagationStyle(
|
|
1197
|
-
'extract',
|
|
1198
|
-
this.#optionsArg.tracePropagationStyle
|
|
1199
|
-
)
|
|
1200
1214
|
if (defaultPropagationStyle.length > 2) {
|
|
1201
|
-
|
|
1202
|
-
|
|
1215
|
+
// b3 was added, so update defaults to include it
|
|
1216
|
+
// This will only be used if no other source (options, env, stable config) set the value
|
|
1217
|
+
calc['tracePropagationStyle.inject'] = defaultPropagationStyle
|
|
1218
|
+
calc['tracePropagationStyle.extract'] = defaultPropagationStyle
|
|
1203
1219
|
}
|
|
1204
1220
|
}
|
|
1205
1221
|
|