From 865654c9cd8fdb8745a7871ff8b7e1372859579e Mon Sep 17 00:00:00 2001 From: Ugaitz Urien Date: Mon, 2 Dec 2024 10:59:29 +0100 Subject: [PATCH 1/3] Protect req.socket.remoteAddress in appsec reporter (#4954) --- packages/dd-trace/src/appsec/reporter.js | 4 +++- packages/dd-trace/test/appsec/reporter.spec.js | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/dd-trace/src/appsec/reporter.js b/packages/dd-trace/src/appsec/reporter.js index be038279dc8..57519e5bc79 100644 --- a/packages/dd-trace/src/appsec/reporter.js +++ b/packages/dd-trace/src/appsec/reporter.js @@ -148,7 +148,9 @@ function reportAttack (attackData) { newTags['_dd.appsec.json'] = '{"triggers":' + attackData + '}' } - newTags['network.client.ip'] = req.socket.remoteAddress + if (req.socket) { + newTags['network.client.ip'] = req.socket.remoteAddress + } rootSpan.addTags(newTags) } diff --git a/packages/dd-trace/test/appsec/reporter.spec.js b/packages/dd-trace/test/appsec/reporter.spec.js index 757884c3566..cd7cc9a1581 100644 --- a/packages/dd-trace/test/appsec/reporter.spec.js +++ b/packages/dd-trace/test/appsec/reporter.spec.js @@ -223,6 +223,22 @@ describe('reporter', () => { storage.disable() }) + it('should add tags to request span when socket is not there', () => { + delete req.socket + + const result = Reporter.reportAttack('[{"rule":{},"rule_matches":[{}]}]') + + expect(result).to.not.be.false + expect(web.root).to.have.been.calledOnceWith(req) + + expect(span.addTags).to.have.been.calledOnceWithExactly({ + 'appsec.event': 'true', + '_dd.origin': 'appsec', + '_dd.appsec.json': '{"triggers":[{"rule":{},"rule_matches":[{}]}]}' + }) + expect(prioritySampler.setPriority).to.have.been.calledOnceWithExactly(span, USER_KEEP, SAMPLING_MECHANISM_APPSEC) + }) + it('should add tags to request span', () => { const result = Reporter.reportAttack('[{"rule":{},"rule_matches":[{}]}]') expect(result).to.not.be.false From c9be2d49aba745ff7016ac81ce737acbbe80cd7f Mon Sep 17 00:00:00 2001 From: Brian Marks Date: Mon, 2 Dec 2024 15:45:50 -0500 Subject: [PATCH 2/3] fix(config): test for completeness of config telemetry (#4941) * fix(config): test for completeness of config telemetry * fully case sensitive checks * handle blocked key prefixes * handle aggregation and nodejs specific rules * Update to latest config rules * Run eslint * Apply new config mappings * revert .gitignore * Update config_norm_rules.json --- packages/dd-trace/test/config.spec.js | 79 ++ .../telemetry/config_aggregation_list.json | 24 + .../fixtures/telemetry/config_norm_rules.json | 741 ++++++++++++++++++ .../telemetry/config_prefix_block_list.json | 243 ++++++ .../telemetry/nodejs_config_rules.json | 175 +++++ 5 files changed, 1262 insertions(+) create mode 100644 packages/dd-trace/test/fixtures/telemetry/config_aggregation_list.json create mode 100644 packages/dd-trace/test/fixtures/telemetry/config_norm_rules.json create mode 100644 packages/dd-trace/test/fixtures/telemetry/config_prefix_block_list.json create mode 100644 packages/dd-trace/test/fixtures/telemetry/nodejs_config_rules.json diff --git a/packages/dd-trace/test/config.spec.js b/packages/dd-trace/test/config.spec.js index 1720c4a5c91..503c2675a95 100644 --- a/packages/dd-trace/test/config.spec.js +++ b/packages/dd-trace/test/config.spec.js @@ -28,6 +28,14 @@ describe('Config', () => { const BLOCKED_TEMPLATE_GRAPHQL_PATH = require.resolve('./fixtures/config/appsec-blocked-graphql-template.json') const BLOCKED_TEMPLATE_GRAPHQL = readFileSync(BLOCKED_TEMPLATE_GRAPHQL_PATH, { encoding: 'utf8' }) const DD_GIT_PROPERTIES_FILE = require.resolve('./fixtures/config/git.properties') + const CONFIG_NORM_RULES_PATH = require.resolve('./fixtures/telemetry/config_norm_rules.json') + const CONFIG_NORM_RULES = readFileSync(CONFIG_NORM_RULES_PATH, { encoding: 'utf8' }) + const CONFIG_PREFIX_BLOCK_LIST_PATH = require.resolve('./fixtures/telemetry/config_prefix_block_list.json') + const CONFIG_PREFIX_BLOCK_LIST = readFileSync(CONFIG_PREFIX_BLOCK_LIST_PATH, { encoding: 'utf8' }) + const CONFIG_AGGREGATION_LIST_PATH = require.resolve('./fixtures/telemetry/config_aggregation_list.json') + const CONFIG_AGGREGATION_LIST = readFileSync(CONFIG_AGGREGATION_LIST_PATH, { encoding: 'utf8' }) + const NODEJS_CONFIG_RULES_PATH = require.resolve('./fixtures/telemetry/nodejs_config_rules.json') + const NODEJS_CONFIG_RULES = readFileSync(NODEJS_CONFIG_RULES_PATH, { encoding: 'utf8' }) function reloadLoggerAndConfig () { log = proxyquire('../src/log', {}) @@ -2258,5 +2266,76 @@ describe('Config', () => { expect(taggingConfig).to.have.property('responsesEnabled', true) expect(taggingConfig).to.have.property('maxDepth', 7) }) + + it('config_norm_rules completeness', () => { + // ⚠️ Did this test just fail? Read here! ⚠️ + // + // Some files are manually copied from dd-go from/to the following paths + // from: https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/ + // to: packages/dd-trace/test/fixtures/telemetry/ + // files: + // - config_norm_rules.json + // - config_prefix_block_list.json + // - config_aggregation_list.json + // - nodejs_config_rules.json + // + // If this test fails, it means that a telemetry key was found in config.js that does not + // exist in any of the files listed above in dd-go + // The impact is that telemetry will not be reported to the Datadog backend won't be unusable + // + // To fix this, you must update dd-go to either + // 1) Add an exact config key to match config_norm_rules.json + // 2) Add a prefix that matches the config keys to config_prefix_block_list.json + // 3) Add a prefix rule that fits an existing prefix to config_aggregation_list.json + // 4) (Discouraged) Add a language-specific rule to nodejs_config_rules.json + // + // Once dd-go is updated, you can copy over the files to this repo and merge them in as part of your changes + + function getKeysInDotNotation (obj, parentKey = '') { + const keys = [] + + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + const fullKey = parentKey ? `${parentKey}.${key}` : key + + if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) { + keys.push(...getKeysInDotNotation(obj[key], fullKey)) + } else { + keys.push(fullKey) + } + } + } + + return keys + } + + const config = new Config() + + const libraryConfigKeys = getKeysInDotNotation(config).sort() + + const nodejsConfigRules = JSON.parse(NODEJS_CONFIG_RULES) + const configNormRules = JSON.parse(CONFIG_NORM_RULES) + const configPrefixBlockList = JSON.parse(CONFIG_PREFIX_BLOCK_LIST) + const configAggregationList = JSON.parse(CONFIG_AGGREGATION_LIST) + + const allowedConfigKeys = [ + ...Object.keys(configNormRules), + ...Object.keys(nodejsConfigRules.normalization_rules) + ] + const blockedConfigKeyPrefixes = [...configPrefixBlockList, ...nodejsConfigRules.prefix_block_list] + const configAggregationPrefixes = [ + ...Object.keys(configAggregationList), + ...Object.keys(nodejsConfigRules.reduce_rules) + ] + + const missingConfigKeys = libraryConfigKeys.filter(key => { + const isAllowed = allowedConfigKeys.includes(key) + const isBlocked = blockedConfigKeyPrefixes.some(prefix => key.startsWith(prefix)) + const isReduced = configAggregationPrefixes.some(prefix => key.startsWith(prefix)) + return !isAllowed && !isBlocked && !isReduced + }) + + expect(missingConfigKeys).to.be.empty + }) }) }) diff --git a/packages/dd-trace/test/fixtures/telemetry/config_aggregation_list.json b/packages/dd-trace/test/fixtures/telemetry/config_aggregation_list.json new file mode 100644 index 00000000000..b23fc7ff760 --- /dev/null +++ b/packages/dd-trace/test/fixtures/telemetry/config_aggregation_list.json @@ -0,0 +1,24 @@ +{ + "tags": "tags", + "global_tag_": "global_tags", + "trace_global_tags": "trace_global_tags", + "DD_TAGS": "tags", + "trace_span_tags": "trace_span_tags", + "http_client_tag_headers": "http_client_tag_headers", + "DD_TRACE_HEADER_TAGS": "trace_header_tags", + "trace_header_tags": "trace_header_tags", + "_options.headertags": "trace_header_tags", + "trace_request_header_tags": "trace_request_header_tags", + "trace_response_header_tags": "trace_response_header_tags", + "trace_request_header_tags_comma_allowed": "trace_request_header_tags", + "trace.header_tags": "trace_header_tags", + "DD_TRACE_GRPC_TAGS": "trace_grpc_tags", + "DD_TRACE_SERVICE_MAPPING": "trace_service_mappings", + "service_mapping": "trace_service_mappings", + "serviceMapping.": "trace_service_mappings", + "logger.": "logger_configs", + "sampler.rules.": "sampler_rules", + "sampler.spansamplingrules.": "sampler_span_sampling_rules", + "appsec.rules.rules": "appsec_rules", + "installSignature": "install_signature" +} diff --git a/packages/dd-trace/test/fixtures/telemetry/config_norm_rules.json b/packages/dd-trace/test/fixtures/telemetry/config_norm_rules.json new file mode 100644 index 00000000000..f00fbc27dcb --- /dev/null +++ b/packages/dd-trace/test/fixtures/telemetry/config_norm_rules.json @@ -0,0 +1,741 @@ +{ + "aas_app_type": "aas_app_type", + "aas_configuration_error": "aas_configuration_error", + "aas_functions_runtime_version": "aas_functions_runtime_version", + "aas_siteextensions_version": "aas_site_extensions_version", + "activity_listener_enabled": "activity_listener_enabled", + "agent_transport": "agent_transport", + "DD_AGENT_TRANSPORT": "agent_transport", + "agent_url": "trace_agent_url", + "analytics_enabled": "analytics_enabled", + "autoload_no_compile": "autoload_no_compile", + "cloud_hosting": "cloud_hosting_provider", + "code_hotspots_enabled": "code_hotspots_enabled", + "data_streams_enabled": "data_streams_enabled", + "dsmEnabled": "data_streams_enabled", + "enabled": "trace_enabled", + "environment_fulltrust_appdomain": "environment_fulltrust_appdomain_enabled", + "logInjection_enabled": "logs_injection_enabled", + "partialflush_enabled": "trace_partial_flush_enabled", + "partialflush_minspans": "trace_partial_flush_min_spans", + "platform": "platform", + "profiler_loaded": "profiler_loaded", + "routetemplate_expansion_enabled": "trace_route_template_expansion_enabled", + "routetemplate_resourcenames_enabled": "trace_route_template_resource_names_enabled", + "runtimemetrics_enabled": "runtime_metrics_enabled", + "runtime.metrics.enabled": "runtime_metrics_enabled", + "sample_rate": "trace_sample_rate", + "sampling_rules": "trace_sample_rules", + "span_sampling_rules": "span_sample_rules", + "spanattributeschema": "trace_span_attribute_schema", + "security_enabled": "appsec_enabled", + "stats_computation_enabled": "trace_stats_computation_enabled", + "native_tracer_version": "native_tracer_version", + "managed_tracer_framework": "managed_tracer_framework", + "wcf_obfuscation_enabled": "trace_wcf_obfuscation_enabled", + "data.streams.enabled": "data_streams_enabled", + "dynamic.instrumentation.enabled": "dynamic_instrumentation_enabled", + "dynamic_instrumentation.enabled": "dynamic_instrumentation_enabled", + "HOSTNAME": "agent_hostname", + "dd_agent_host": "agent_host", + "instrumentation.telemetry.enabled": "instrumentation_telemetry_enabled", + "integrations.enabled": "trace_integrations_enabled", + "logs.injection": "logs_injection_enabled", + "logs.mdc.tags.injection": "logs_mdc_tags_injection_enabled", + "os.name": "os_name", + "openai_service": "open_ai_service", + "openai_logs_enabled": "open_ai_logs_enabled", + "openAiLogsEnabled": "open_ai_logs_enabled", + "openai_span_char_limit": "open_ai_span_char_limit", + "openaiSpanCharLimit": "open_ai_span_char_limit", + "openai_span_prompt_completion_sample_rate": "open_ai_span_prompt_completion_sample_rate", + "openai_log_prompt_completion_sample_rate": "open_ai_log_prompt_completion_sample_rate", + "openai_metrics_enabled": "open_ai_metrics_enabled", + "priority.sampling": "trace_priority_sample_enabled", + "profiling.allocation.enabled": "profiling_allocation_enabled", + "profiling.enabled": "profiling_enabled", + "profiling.start-force-first": "profiling_start_force_first", + "remote_config.enabled": "remote_config_enabled", + "remoteConfig.enabled": "remote_config_enabled", + "remoteConfig.pollInterval": "remote_config_poll_interval", + "trace.agent.port": "trace_agent_port", + "trace.agent.v0.5.enabled": "trace_agent_v0.5_enabled", + "trace.analytics.enabled": "trace_analytics_enabled", + "trace.enabled": "trace_enabled", + "trace.client-ip.enabled": "trace_client_ip_enabled", + "trace.jms.propagation.enabled": "trace_jms_propagation_enabled", + "trace.x-datadog-tags.max.length": "trace_x_datadog_tags_max_length", + "trace.kafka.client.propagation.enabled": "trace_kafka_client_propagation_enabled", + "trace.laravel_queue_distributed_tracing": "trace_laravel_queue_distributed_tracing", + "trace.symfony_messenger_distributed_tracing": "trace_symfony_messenger_distributed_tracing", + "trace.symfony_messenger_middlewares": "trace_symfony_messenger_middlewares", + "trace.sources_path": "trace_sources_path", + "trace.log_file": "trace_log_file", + "trace.log_level": "trace_log_level", + "kafka.client.base64.decoding.enabled": "trace_kafka_client_base64_decoding_enabled", + "trace.aws-sdk.propagation.enabled": "trace_aws_sdk_propagation_enabled", + "trace.aws-sdk.legacy.tracing.enabled": "trace_aws_sdk_legacy_tracing_enabled", + "trace.servlet.principal.enabled": "trace_servlet_principal_enabled", + "trace.servlet.async-timeout.error": "trace_servlet_async_timeout_error_enabled", + "trace.rabbit.propagation.enabled": "trace_rabbit_propagation_enabled", + "trace.partial.flush.min.spans": "trace_partial_flush_min_spans", + "trace.sample.rate": "trace_sample_rate", + "trace.sqs.propagation.enabled": "trace_sqs_propagation_enabled", + "trace.peerservicetaginterceptor.enabled": "trace_peer_service_tag_interceptor_enabled", + "dd_trace_sample_rate": "trace_sample_rate", + "trace_methods": "trace_methods", + "tracer_instance_count": "trace_instance_count", + "trace.db.client.split-by-instance": "trace_db_client_split_by_instance", + "trace.db.client.split-by-instance.type.suffix": "trace_db_client_split_by_instance_type_suffix", + "trace.http.client.split-by-domain" : "trace_http_client_split_by_domain", + "trace.agent.timeout": "trace_agent_timeout", + "trace.header.tags.legacy.parsing.enabled": "trace_header_tags_legacy_parsing_enabled", + "trace.client-ip.resolver.enabled": "trace_client_ip_resolver_enabled", + "trace.play.report-http-status": "trace_play_report_http_status", + "trace.jmxfetch.tomcat.enabled": "trace_jmxfetch_tomcat_enabled", + "trace.jmxfetch.kafka.enabled": "trace_jmxfetch_kafka_enabled", + "trace.scope.depth.limit": "trace_scope_depth_limit", + "inferredProxyServicesEnabled": "inferred_proxy_services_enabled", + "resolver.use.loadclass": "resolver_use_loadclass", + "resolver.outline.pool.enabled": "resolver_outline_pool_enabled", + "appsec.apiSecurity.enabled": "api_security_enabled", + "appsec.apiSecurity.requestSampling": "api_security_request_sample_rate", + "appsec.enabled": "appsec_enabled", + "appsec.eventTracking": "appsec_auto_user_events_tracking", + "appsec.eventTracking.mode": "appsec_auto_user_events_tracking", + "appsec.testing": "appsec_testing", + "appsec.trace.rate.limit": "appsec_trace_rate_limit", + "appsec.obfuscatorKeyRegex": "appsec_obfuscation_parameter_key_regexp", + "appsec.obfuscatorValueRegex": "appsec_obfuscation_parameter_value_regexp", + "appsec.rasp.enabled": "appsec_rasp_enabled", + "appsec.rateLimit": "appsec_rate_limit", + "appsec.rules": "appsec_rules", + "appsec.sca_enabled": "appsec_sca_enabled", + "appsec.wafTimeout": "appsec_waf_timeout", + "appsec.sca.enabled": "appsec_sca_enabled", + "clientIpHeader": "trace_client_ip_header", + "clientIpEnabled": "trace_client_ip_enabled", + "clientIpHeaderDisabled": "client_ip_header_disabled", + "debug": "trace_debug_enabled", + "dd.trace.debug": "trace_debug_enabled", + "dogstatsd.hostname": "dogstatsd_hostname", + "dogstatsd.port": "dogstatsd_port", + "dogstatsd.start-delay": "dogstatsd_start_delay", + "env": "env", + "experimental.b3": "experimental_b3", + "experimental.enableGetRumData": "experimental_enable_get_rum_data", + "experimental.exporter": "experimental_exporter", + "experimental.runtimeId": "experimental_runtime_id", + "experimental.sampler.rateLimit": "experimental_sampler_rate_limit", + "experimental.sampler.sampleRate": "experimental_sampler_sample_rate", + "experimental.traceparent": "experimental_traceparent", + "flushInterval": "flush_interval", + "flushMinSpans": "flush_min_spans", + "hostname": "agent_hostname", + "iast.enabled": "iast_enabled", + "iast.cookieFilterPattern": "iast_cookie_filter_pattern", + "iast.deduplication.enabled": "iast_deduplication_enabled", + "iast.maxConcurrentRequests": "iast_max_concurrent_requests", + "iast.max-concurrent-requests": "iast_max_concurrent_requests", + "iast.maxContextOperations": "iast_max_context_operations", + "iast.requestSampling": "iast_request_sampling", + "iast.request-sampling": "iast_request_sampling", + "iast.debug.enabled": "iast_debug_enabled", + "iast.vulnerabilities-per-request": "iast_vulnerability_per_request", + "iast.deduplicationEnabled": "iast_deduplication_enabled", + "iast.redactionEnabled": "iast_redaction_enabled", + "iast.redactionNamePattern": "iast_redaction_name_pattern", + "iast.redactionValuePattern": "iast_redaction_value_pattern", + "iast.telemetryVerbosity": "iast_telemetry_verbosity", + "isAzureFunction": "azure_function", + "isGitUploadEnabled": "git_upload_enabled", + "isIntelligentTestRunnerEnabled": "intelligent_test_runner_enabled", + "logger": "logger", + "logInjection": "logs_injection_enabled", + "logLevel": "trace_log_level", + "memcachedCommandEnabled": "memchached_command_enabled", + "lookup": "lookup", + "plugins": "plugins", + "port": "trace_agent_port", + "profiling.exporters": "profiling_exporters", + "profiling.sourceMap": "profiling_source_map_enabled", + "protocolVersion": "trace_agent_protocol_version", + "querystringObfuscation": "trace_obfuscation_query_string_regexp", + "reportHostname": "trace_report_hostname", + "trace.report-hostname": "trace_report_hostname", + "runtimeMetrics": "runtime_metrics_enabled", + "sampler.rateLimit": "trace_rate_limit", + "trace.rate.limit": "trace_rate_limit", + "sampler.sampleRate": "trace_sample_rate", + "sampleRate": "trace_sample_rate", + "scope": "scope", + "service": "service", + "serviceMapping": "dd_service_mapping", + "site": "site", + "startupLogs": "trace_startup_logs_enabled", + "stats.enabled": "stats_enabled", + "DD_TRACE_HEADER_TAGS": "trace_header_tags", + "tagsHeaderMaxLength": "trace_header_tags_max_length", + "telemetryEnabled": "instrumentation_telemetry_enabled", + "otel_enabled": "trace_otel_enabled", + "trace.otel.enabled": "trace_otel_enabled", + "trace.otel_enabled": "trace_otel_enabled", + "tracing": "trace_enabled", + "url": "trace_agent_url", + "version": "application_version", + "trace.tracer.metrics.enabled": "trace_metrics_enabled", + "trace.perf.metrics.enabled": "trace_perf_metrics_enabled", + "trace.health.metrics.enabled": "trace_health_metrics_enabled", + "trace.health.metrics.statsd.port": "trace_health_metrics_statsd_port", + "trace.grpc.server.trim-package-resource": "trace_grpc_server_trim_package_resource_enabled", + "DD_TRACE_DEBUG": "trace_debug_enabled", + "profiling.start-delay": "profiling_start_delay", + "profiling.upload.period": "profiling_upload_period", + "profiling.async.enabled": "profiling_async_enabled", + "profiling.async.alloc.enabled": "profiling_async_alloc_enabled", + "profiling.directallocation.enabled": "profiling_direct_allocation_enabled", + "profiling.hotspots.enabled": "profiling_hotspots_enabled", + "profiling.async.cpu.enabled": "profiling_async_cpu_enabled", + "profiling.async.memleak.enabled": "profiling_async_memleak_enabled", + "profiling.async.wall.enabled": "profiling_async_wall_enabled", + "profiling.ddprof.enabled": "profiling_ddprof_enabled", + "profiling.heap.enabled": "profiling_heap_enabled", + "profiling.legacy.tracing.integration": "profiling_legacy_tracing_integration_enabled", + "queryStringObfuscation": "trace_obfuscation_query_string_regexp", + "dbmPropagationMode": "dbm_propagation_mode", + "rcPollingInterval": "rc_polling_interval", + "jmxfetch.initial-refresh-beans-period": "jmxfetch_initial_refresh_beans_period", + "jmxfetch.refresh-beans-period": "jmxfetch_initial_refresh_beans_period", + "jmxfetch.multiple-runtime-services.enabled": "jmxfetch_multiple_runtime_services_enabled", + "jmxfetch.enabled": "jmxfetch_enabled", + "jmxfetch.statsd.port": "jmxfetch_statsd_port", + "jmxfetch.check-period": "jmxfetch_check_period", + "appsec.blockedTemplateGraphql": "appsec_blocked_template_graphql", + "appsec.blockedTemplateHtml": "appsec_blocked_template_html", + "appsec.blockedTemplateJson": "appsec_blocked_template_json", + "appsec.waf.timeout": "appsec_waf_timeout", + "civisibility.enabled": "ci_visibility_enabled", + "civisibility.agentless.enabled": "ci_visibility_agentless_enabled", + "isCiVisibility": "ci_visibility_enabled", + "cws.enabled": "cws_enabled", + "AWS_LAMBDA_INITIALIZATION_TYPE": "aws_lambda_initialization_type", + "http.server.tag.query-string": "trace_http_server_tag_query_string", + "http.server.route-based-naming": "trace_http_server_route_based_naming_enabled", + "http.client.tag.query-string": "trace_http_client_tag_query_string", + "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING": "trace_http_client_tag_query_string", + "hystrix.tags.enabled": "hystrix_tags_enabled", + "hystrix.measured.enabled": "hystrix_measured_enabled", + "ignite.cache.include_keys": "ignite_cache_include_keys_enabled", + "dynamic.instrumentation.classfile.dump.enabled": "dynamic_instrumentation_classfile_dump_enabled", + "dynamic.instrumentation.metrics.enabled": "dynamic_instrumentation_metrics_enabled", + "message.broker.split-by-destination": "message_broker_split_by_destination", + "agent_feature_drop_p0s": "agent_feature_drop_p0s", + "appsec.rules.metadata.rules_version": "appsec_rules_metadata_rules_version", + "appsec.rules.version": "appsec_rules_version", + "appsec.customRulesProvided": "appsec_rules_custom_provided", + "dogstatsd_addr": "dogstatsd_url", + "lambda_mode": "lambda_mode", + "profiling.ddprof.alloc.enabled": "profiling_ddprof_alloc_enabled", + "profiling.ddprof.cpu.enabled": "profiling_ddprof_cpu_enabled", + "profiling.ddprof.memleak.enabled": "profiling_ddprof_memleak_enabled", + "profiling.ddprof.wall.enabled": "profiling_ddprof_wall_enabled", + "profiling_endpoints_enabled": "profiling_endpoints_enabled", + "send_retries": "trace_send_retries", + "telemetry.enabled": "instrumentation_telemetry_enabled", + "telemetry.debug": "instrumentation_telemetry_debug_enabled", + "telemetry.logCollection": "instrumentation_telemetry_log_collection_enabled", + "telemetry.metrics": "instrumentation_telemetry_metrics_enabled", + "telemetry.metricsInterval": "instrumentation_telemetry_metrics_interval", + "telemetry.heartbeat.interval": "instrumentation_telemetry_heartbeat_interval", + "telemetry_heartbeat_interval": "instrumentation_telemetry_heartbeat_interval", + "universal_version": "universal_version_enabled", + "global_tag_version": "version", + "traceId128BitGenerationEnabled": "trace_128_bits_id_enabled", + "traceId128BitLoggingEnabled": "trace_128_bits_id_logging_enabled", + "trace.status404decorator.enabled": "trace_status_404_decorator_enabled", + "trace.status404rule.enabled": "trace_status_404_rule_enabled", + "discovery": "agent_discovery_enabled", + "repositoryurl": "repository_url", + "gitmetadataenabled": "git_metadata_enabled", + "commitsha": "commit_sha", + "isgcpfunction": "is_gcp_function", + "isGCPFunction": "is_gcp_function", + "legacy.installer.enabled": "legacy_installer_enabled", + "trace.request_init_hook": "trace_request_init_hook", + "dogstatsd_url": "dogstatsd_url", + "distributed_tracing": "trace_distributed_trace_enabled", + "autofinish_spans": "trace_auto_finish_spans_enabled", + "trace.url_as_resource_names_enabled": "trace_url_as_resource_names_enabled", + "integrations_disabled": "trace_disabled_integrations", + "priority_sampling": "trace_priority_sampling_enabled", + "trace.auto_flush_enabled": "trace_auto_flush_enabled", + "trace.measure_compile_time": "trace_measure_compile_time_enabled", + "trace.measure_peak_memory_usage": "trace_measure_peak_memory_usage_enabled", + "trace.health_metrics_heartbeat_sample_rate": "trace_health_metrics_heartbeat_sample_rate", + "trace.redis_client_split_by_host": "trace_redis_client_split_by_host_enabled", + "trace.memory_limit": "trace_memory_limit", + "trace.flush_collect_cycles": "trace_flush_collect_cycles_enabled", + "trace.resource_uri_fragment_regex": "trace_resource_uri_fragment_regex", + "trace.resource_uri_mapping_incoming": "trace_resource_uri_mapping_incoming", + "trace.resource_uri_mapping_outgoing": "trace_resource_uri_mapping_outgoing", + "trace.resource_uri_query_param_allowed": "trace_resource_uri_query_param_allowed", + "trace.http_url_query_param_allowed": "trace_http_url_query_param_allowed", + "trace.http_post_data_param_allowed": "trace_http_post_data_param_allowed", + "trace.sampling_rules": "trace_sample_rules", + "span_sampling_rules_file": "span_sample_rules_file", + "trace.propagation_style_extract": "trace_propagation_style_extract", + "trace.propagation_style_inject": "trace_propagation_style_inject", + "trace.propagation_style": "trace_propagation_style", + "trace.propagation_extract_first": "trace_propagation_extract_first", + "tracePropagationExtractFirst": "trace_propagation_extract_first", + "tracePropagationStyle.extract": "trace_propagation_style_extract", + "tracePropagationStyle.inject": "trace_propagation_style_inject", + "tracePropagationStyle,otelPropagators": "trace_propagation_style_otel_propagators", + "tracing.distributed_tracing.propagation_extract_style": "trace_propagation_style_extract", + "tracing.distributed_tracing.propagation_inject_style": "trace_propagation_style_inject", + "trace.traced_internal_functions": "trace_traced_internal_functions", + "trace.agent_connect_timeout": "trace_agent_connect_timeout", + "trace.debug_prng_seed": "trace_debug_prng_seed", + "log_backtrace": "trace_log_backtrace_enabled", + "trace.generate_root_span": "trace_generate_root_span_enabled", + "trace.spans_limit": "trace_spans_limit", + "trace.128_bit_traceid_generation_enabled": "trace_128_bits_id_enabled", + "trace.agent_max_consecutive_failures": "trace_send_retries", + "trace.agent_attempt_retry_time_msec": "trace_agent_attempt_retry_time_msec", + "trace.bgs_connect_timeout": "trace_bgs_connect_timeout", + "trace.bgs_timeout": "trace_bgs_timeout", + "trace.agent_flush_interval": "trace_agent_flush_interval", + "trace.agent_flush_after_n_requests": "trace_agent_flush_after_n_requests", + "trace.shutdown_timeout": "trace_shutdown_timeout", + "trace.agent_debug_verbose_curl": "trace_agent_debug_verbose_curl_enabled", + "trace.debug_curl_output": "trace_debug_curl_output_enabled", + "trace.beta_high_memory_pressure_percent": "trace_beta_high_memory_pressure_percent", + "trace.warn_legacy_dd_trace": "trace_warn_legacy_dd_trace_enabled", + "trace.retain_thread_capabilities": "trace_retain_thread_capabilities_enabled", + "trace.client_ip_header": "client_ip_header", + "trace.forked_process": "trace_forked_process_enabled", + "trace.hook_limit": "trace_hook_limit", + "trace.agent_max_payload_size": "trace_agent_max_payload_size", + "trace.agent_stack_initial_size": "trace_agent_stack_initial_size", + "trace.agent_stack_backlog": "trace_agent_stack_backlog", + "trace.agent_retries": "trace_send_retries", + "trace.agent_test_session_token": "trace_agent_test_session_token", + "trace.propagate_user_id_default": "trace_propagate_user_id_default_enabled", + "dbm_propagation_mode": "dbm_propagation_mode", + "trace.remove_root_span_laravel_queue": "trace_remove_root_span_laravel_queue_enabled", + "trace.remove_root_span_symfony_messenger": "trace_remove_root_span_symfony_messenger_enabled", + "trace.remove_autoinstrumentation_orphans": "trace_remove_auto_instrumentation_orphans_enabled", + "trace.memcached_obfuscation": "trace_memcached_obfuscation_enabled", + "DD_TRACE_CONFIG_FILE": "trace_config_file", + "DD_DOTNET_TRACER_CONFIG_FILE": "trace_config_file", + "DD_ENV": "env", + "DD_SERVICE": "service", + "DD_SERVICE_NAME": "service", + "DD_VERSION": "application_version", + "DD_GIT_REPOSITORY_URL": "repository_url", + "git_repository_url": "repository_url", + "DD_GIT_COMMIT_SHA": "commit_sha", + "DD_TRACE_GIT_METADATA_ENABLED": "git_metadata_enabled", + "trace.git_metadata_enabled": "git_metadata_enabled", + "git_commit_sha": "commit_sha", + "DD_TRACE_ENABLED": "trace_enabled", + "DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED": "experimental_appsec_standalone_enabled", + "DD_INTERNAL_WAIT_FOR_DEBUGGER_ATTACH": "internal_wait_for_debugger_attach_enabled", + "DD_INTERNAL_WAIT_FOR_NATIVE_DEBUGGER_ATTACH": "internal_wait_for_native_debugger_attach_enabled", + "DD_DISABLED_INTEGRATIONS": "trace_disabled_integrations", + "DD_TRACE_ANALYTICS_ENABLED": "trace_analytics_enabled", + "DD_TRACE_BUFFER_SIZE": "trace_serialization_buffer_size", + "trace.buffer_size": "trace_serialization_buffer_size", + "DD_TRACE_BATCH_INTERVAL": "trace_serialization_batch_interval", + "DD_LOG_INJECTION": "logs_injection_enabled", + "DD_LOGS_INJECTION": "logs_injection_enabled", + "DD_TRACE_RATE_LIMIT": "trace_rate_limit", + "DD_MAX_TRACES_PER_SECOND": "trace_rate_limit", + "DD_TRACE_SAMPLING_RULES": "trace_sample_rules", + "DD_SPAN_SAMPLING_RULES": "span_sample_rules", + "DD_TRACE_SAMPLE_RATE": "trace_sample_rate", + "DD_APM_ENABLE_RARE_SAMPLER": "trace_rare_sampler_enabled", + "DD_TRACE_METRICS_ENABLED": "trace_metrics_enabled", + "DD_RUNTIME_METRICS_ENABLED": "runtime_metrics_enabled", + "DD_TRACE_AGENT_PATH": "agent_trace_agent_excecutable_path", + "DD_TRACE_AGENT_ARGS": "agent_trace_agent_excecutable_args", + "DD_DOGSTATSD_PATH": "agent_dogstatsd_executable_path", + "DD_DOGSTATSD_ARGS": "agent_dogstatsd_executable_args", + "DD_DIAGNOSTIC_SOURCE_ENABLED": "trace_diagnostic_source_enabled", + "DD_SITE": "site", + "DD_TRACE_HTTP_CLIENT_EXCLUDED_URL_SUBSTRINGS": "trace_http_client_excluded_urls", + "DD_HTTP_SERVER_ERROR_STATUSES": "trace_http_server_error_statuses", + "DD_HTTP_CLIENT_ERROR_STATUSES": "trace_http_client_error_statuses", + "DD_TRACE_HTTP_SERVER_ERROR_STATUSES": "trace_http_server_error_statuses", + "DD_TRACE_HTTP_CLIENT_ERROR_STATUSES": "trace_http_client_error_statuses", + "DD_TRACE_CLIENT_IP_HEADER": "trace_client_ip_header", + "DD_TRACE_CLIENT_IP_ENABLED": "trace_client_ip_enabled", + "DD_TRACE_KAFKA_CREATE_CONSUMER_SCOPE_ENABLED": "trace_kafka_create_consumer_scope_enabled", + "DD_TRACE_EXPAND_ROUTE_TEMPLATES_ENABLED": "trace_route_template_expansion_enabled", + "DD_TRACE_STATS_COMPUTATION_ENABLED": "trace_stats_computation_enabled", + "_DD_TRACE_STATS_COMPUTATION_INTERVAL": "trace_stats_computation_interval", + "DD_TRACE_PROPAGATION_STYLE_INJECT": "trace_propagation_style_inject", + "DD_PROPAGATION_STYLE_INJECT": "trace_propagation_style_inject", + "DD_TRACE_PROPAGATION_STYLE_EXTRACT": "trace_propagation_style_extract", + "DD_PROPAGATION_STYLE_EXTRACT": "trace_propagation_style_extract", + "DD_TRACE_PROPAGATION_STYLE": "trace_propagation_style", + "DD_TRACE_PROPAGATION_EXTRACT_FIRST": "trace_propagation_extract_first", + "DD_TRACE_METHODS": "trace_methods", + "DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP": "trace_obfuscation_query_string_regexp", + "DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP_TIMEOUT": "trace_obfuscation_query_string_regexp_timeout", + "DD_HTTP_SERVER_TAG_QUERY_STRING_SIZE": "trace_http_server_tag_query_string_size", + "DD_HTTP_SERVER_TAG_QUERY_STRING": "trace_http_server_tag_query_string_enabled", + "DD_DBM_PROPAGATION_MODE": "dbm_propagation_mode", + "DD_TRACE_SPAN_ATTRIBUTE_SCHEMA": "trace_span_attribute_schema", + "DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED": "trace_peer_service_defaults_enabled", + "DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED": "trace_remove_integration_service_names_enabled", + "DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH": "trace_x_datadog_tags_max_length", + "DD_DATA_STREAMS_ENABLED": "data_streams_enabled", + "DD_DATA_STREAMS_LEGACY_HEADERS": "data_streams_legacy_headers", + "DD_CIVISIBILITY_ENABLED": "ci_visibility_enabled", + "DD_CIVISIBILITY_AGENTLESS_ENABLED": "ci_visibility_agentless_enabled", + "DD_CIVISIBILITY_AGENTLESS_URL": "ci_visibility_agentless_url", + "DD_CIVISIBILITY_LOGS_ENABLED": "ci_visibility_logs_enabled", + "DD_CIVISIBILITY_CODE_COVERAGE_ENABLED": "ci_visibility_code_coverage_enabled", + "DD_CIVISIBILITY_CODE_COVERAGE_MODE": "ci_visibility_code_coverage_mode", + "DD_CIVISIBILITY_CODE_COVERAGE_SNK_FILEPATH": "ci_visibility_code_coverage_snk_path", + "DD_CIVISIBILITY_CODE_COVERAGE_ENABLE_JIT_OPTIMIZATIONS": "ci_visibility_code_coverage_jit_optimisations_enabled", + "DD_CIVISIBILITY_CODE_COVERAGE_PATH": "ci_visibility_code_coverage_path", + "DD_CIVISIBILITY_GIT_UPLOAD_ENABLED": "ci_visibility_git_upload_enabled", + "DD_CIVISIBILITY_TESTSSKIPPING_ENABLED": "ci_visibility_test_skipping_enabled", + "DD_CIVISIBILITY_ITR_ENABLED": "ci_visibility_intelligent_test_runner_enabled", + "DD_CIVISIBILITY_FORCE_AGENT_EVP_PROXY": "ci_visibility_force_agent_evp_proxy_enabled", + "DD_CIVISIBILITY_EXTERNAL_CODE_COVERAGE_PATH": "ci_visibility_code_coverage_external_path", + "DD_CIVISIBILITY_GAC_INSTALL_ENABLED": "ci_visibility_gac_install_enabled", + "DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED": "ci_visibility_early_flake_detection_enabled", + "DD_CIVISIBILITY_CODE_COVERAGE_COLLECTORPATH": "ci_visibility_code_coverage_collectorpath", + "DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS": "ci_visibility_rum_flush_wait_millis", + "DD_CIVISIBILITY_FLAKY_RETRY_ENABLED": "ci_visibility_flaky_retry_enabled", + "DD_CIVISIBILITY_FLAKY_RETRY_COUNT": "ci_visibility_flaky_retry_count", + "DD_CIVISIBILITY_TOTAL_FLAKY_RETRY_COUNT": "ci_visibility_total_flaky_retry_count", + "DD_TEST_SESSION_NAME": "test_session_name", + "DD_PROXY_HTTPS": "proxy_https", + "DD_PROXY_NO_PROXY": "proxy_no_proxy", + "DD_TRACE_DEBUG_LOOKUP_MDTOKEN": "trace_lookup_mdtoken_enabled", + "DD_TRACE_DEBUG_LOOKUP_FALLBACK": "trace_lookup_fallback_enabled", + "DD_TRACE_ROUTE_TEMPLATE_RESOURCE_NAMES_ENABLED": "trace_route_template_resource_names_enabled", + "DD_TRACE_DELAY_WCF_INSTRUMENTATION_ENABLED": "trace_delay_wcf_instrumentation_enabled", + "DD_TRACE_WCF_WEB_HTTP_RESOURCE_NAMES_ENABLED": "trace_wcf_web_http_resource_names_enabled", + "DD_TRACE_WCF_RESOURCE_OBFUSCATION_ENABLED": "trace_wcf_obfuscation_enabled", + "DD_TRACE_HEADER_TAG_NORMALIZATION_FIX_ENABLED": "trace_header_tag_normalization_fix_enabled", + "DD_TRACE_OTEL_ENABLED": "trace_otel_enabled", + "DD_TRACE_OTEL_LEGACY_OPERATION_NAME_ENABLED": "trace_otel_legacy_operation_name_enabled", + "DD_TRACE_ACTIVITY_LISTENER_ENABLED": "trace_activity_listener_enabled", + "DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED": "trace_128_bits_id_enabled", + "DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED": "trace_128_bits_id_logging_enabled", + "DD_TRACE_HEALTH_METRICS_ENABLED": "dd_trace_health_metrics_enabled", + "DD_LIB_INJECTION_ATTEMPTED": "dd_lib_injection_attempted", + "DD_LIB_INJECTED": "dd_lib_injected", + "DD_INJECT_FORCED": "dd_lib_injection_forced", + "DD_SPAN_SAMPLING_RULES_FILE": "dd_span_sampling_rules_file", + "DD_TRACE_COMPUTE_STATS": "dd_trace_compute_stats", + "DD_EXCEPTION_DEBUGGING_ENABLED": "dd_exception_debugging_enabled", + "DD_EXCEPTION_DEBUGGING_MAX_FRAMES_TO_CAPTURE": "dd_exception_debugging_max_frames_to_capture", + "DD_EXCEPTION_DEBUGGING_CAPTURE_FULL_CALLSTACK_ENABLED": "dd_exception_debugging_capture_full_callstack_enabled", + "DD_EXCEPTION_DEBUGGING_RATE_LIMIT_SECONDS": "dd_exception_debugging_rate_limit_seconds", + "DD_EXCEPTION_DEBUGGING_MAX_EXCEPTION_ANALYSIS_LIMIT": "dd_exception_debugging_max_exception_analysis_limit", + "DD_EXCEPTION_REPLAY_ENABLED": "dd_exception_replay_enabled", + "DD_EXCEPTION_REPLAY_MAX_FRAMES_TO_CAPTURE": "dd_exception_replay_max_frames_to_capture", + "DD_EXCEPTION_REPLAY_CAPTURE_FULL_CALLSTACK_ENABLED": "dd_exception_replay_capture_full_callstack_enabled", + "DD_EXCEPTION_REPLAY_RATE_LIMIT_SECONDS": "dd_exception_replay_rate_limit_seconds", + "DD_EXCEPTION_REPLAY_MAX_EXCEPTION_ANALYSIS_LIMIT": "dd_exception_replay_max_exception_analysis_limit", + "exception_replay_capture_interval_seconds": "dd_exception_replay_capture_interval_seconds", + "exception_replay_capture_max_frames": "dd_exception_replay_capture_max_frames", + "exception_replay_enabled": "dd_exception_replay_enabled", + "DD_TRACE_OBFUSCATION_QUERY_STRING_PATTERN": "dd_trace_obfuscation_query_string_pattern", + "DD_CALL_BASIC_CONFIG": "dd_call_basic_config", + "DD_SERVICE_MAPPING": "dd_service_mapping", + "DD_INSTRUMENTATION_TELEMETRY_ENABLED": "instrumentation_telemetry_enabled", + "DD_INSTRUMENTATION_TELEMETRY_AGENTLESS_ENABLED": "instrumentation_telemetry_agentless_enabled", + "DD_INSTRUMENTATION_TELEMETRY_AGENT_PROXY_ENABLED": "instrumentation_telemetry_agent_proxy_enabled", + "DD_INSTRUMENTATION_TELEMETRY_URL": "instrumentation_telemetry_agentless_url", + "DD_TELEMETRY_HEARTBEAT_INTERVAL": "instrumentation_telemetry_heartbeat_interval", + "DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED": "instrumentation_telemetry_dependency_collection_enabled", + "DD_TELEMETRY_LOG_COLLECTION_ENABLED": "instrumentation_telemetry_log_collection_enabled", + "DD_TELEMETRY_METRICS_ENABLED": "instrumentation_telemetry_metrics_enabled", + "DD_INTERNAL_TELEMETRY_V2_ENABLED": "instrumentation_telemetry_v2_enabled", + "DD_INTERNAL_TELEMETRY_DEBUG_ENABLED": "instrumentation_telemetry_debug_enabled", + "DD_APPSEC_ENABLED": "appsec_enabled", + "DD_APPSEC_RULES": "appsec_rules", + "DD_APPSEC_IPHEADER": "appsec_ip_header", + "DD_APPSEC_EXTRA_HEADERS": "appsec_extra_headers", + "DD_APPSEC_KEEP_TRACES": "appsec_force_keep_traces_enabled", + "DD_APPSEC_TRACE_RATE_LIMIT": "appsec_trace_rate_limit", + "DD_APPSEC_WAF_TIMEOUT": "appsec_waf_timeout", + "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP": "appsec_obfuscation_parameter_key_regexp", + "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP": "appsec_obfuscation_parameter_value_regexp", + "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML": "appsec_blocked_template_html", + "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON": "appsec_blocked_template_json", + "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING": "appsec_auto_user_events_tracking", + "DD_APPSEC_RASP_ENABLED": "appsec_rasp_enabled", + "DD_APPSEC_STACK_TRACE_ENABLED": "appsec_stack_trace_enabled", + "DD_APPSEC_MAX_STACK_TRACES": "appsec_max_stack_traces", + "DD_APPSEC_MAX_STACK_TRACE_DEPTH": "appsec_max_stack_trace_depth", + "DD_APPSEC_MAX_STACK_TRACE_DEPTH_TOP_PERCENT": "appsec_max_stack_trace_depth_top_percent", + "DD_APPSEC_SCA_ENABLED": "appsec_sca_enabled", + "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE": "appsec_auto_user_instrumentation_mode", + "DD_EXPERIMENTAL_APPSEC_USE_UNSAFE_ENCODER": "appsec_use_unsafe_encoder", + "DD_API_SECURITY_REQUEST_SAMPLE_RATE":"api_security_request_sample_rate", + "DD_API_SECURITY_MAX_CONCURRENT_REQUESTS":"api_security_max_concurrent_requests", + "DD_API_SECURITY_SAMPLE_DELAY":"api_security_sample_delay", + "DD_API_SECURITY_ENABLED":"api_security_enabled", + "DD_EXPERIMENTAL_API_SECURITY_ENABLED":"experimental_api_security_enabled", + "DD_APPSEC_WAF_DEBUG": "appsec_waf_debug_enabled", + "DD_AZURE_APP_SERVICES": "aas_enabled", + "DD_AAS_DOTNET_EXTENSION_VERSION": "aas_site_extensions_version", + "WEBSITE_OWNER_NAME": "aas_website_owner_name", + "WEBSITE_RESOURCE_GROUP": "aas_website_resource_group", + "WEBSITE_SITE_NAME": "aas_website_site_name", + "FUNCTIONS_EXTENSION_VERSION": "aas_functions_runtime_version", + "FUNCTIONS_WORKER_RUNTIME": "aas_functions_worker_runtime", + "COMPUTERNAME": "aas_instance_name", + "WEBSITE_INSTANCE_ID": "aas_website_instance_id", + "WEBSITE_OS": "aas_website_os", + "WEBSITE_SKU": "aas_website_sku", + "FUNCTION_NAME": "gcp_deprecated_function_name", + "GCP_PROJECT": "gcp_deprecated_project", + "K_SERVICE": "gcp_function_name", + "FUNCTION_TARGET": "gcp_function_target", + "DD_AAS_ENABLE_CUSTOM_TRACING": "aas_custom_tracing_enabled", + "DD_AAS_ENABLE_CUSTOM_METRICS": "aas_custom_metrics_enabled", + "DD_DYNAMIC_INSTRUMENTATION_ENABLED": "dynamic_instrumentation_enabled", + "DD_DEBUGGER_MAX_DEPTH_TO_SERIALIZE": "dynamic_instrumentation_serialization_max_depth", + "DD_DEBUGGER_MAX_TIME_TO_SERIALIZE": "dynamic_instrumentation_serialization_max_duration", + "DD_DEBUGGER_UPLOAD_BATCH_SIZE": "dynamic_instrumentation_upload_batch_size", + "DD_DEBUGGER_DIAGNOSTICS_INTERVAL": "dynamic_instrumentation_diagnostics_interval", + "DD_DEBUGGER_UPLOAD_FLUSH_INTERVAL": "dynamic_instrumentation_upload_interval", + "DD_DYNAMIC_INSTRUMENTATION_MAX_DEPTH_TO_SERIALIZE": "dynamic_instrumentation_serialization_max_depth", + "DD_DYNAMIC_INSTRUMENTATION_MAX_TIME_TO_SERIALIZE": "dynamic_instrumentation_serialization_max_duration", + "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_BATCH_SIZE": "dynamic_instrumentation_upload_batch_size", + "DD_DYNAMIC_INSTRUMENTATION_DIAGNOSTICS_INTERVAL": "dynamic_instrumentation_diagnostics_interval", + "DD_DYNAMIC_INSTRUMENTATION_UPLOAD_FLUSH_INTERVAL": "dynamic_instrumentation_upload_interval", + "DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS": "dynamic_instrumentation_redacted_identifiers", + "DD_DYNAMIC_INSTRUMENTATION_REDACTED_TYPES": "dynamic_instrumentation_redacted_types", + "dynamic_instrumentation.redacted_types": "dynamic_instrumentation_redacted_types", + "dynamic_instrumentation.redacted_identifiers": "dynamic_instrumentation_redacted_identifiers", + "DD_SYMBOL_DATABASE_BATCH_SIZE_BYTES": "symbol_database_batch_size_bytes", + "DD_DYNAMIC_INSTRUMENTATION_SYMBOL_DATABASE_BATCH_SIZE_BYTES": "dynamic_instrumentation_symbol_database_batch_size_bytes", + "DD_SYMBOL_DATABASE_UPLOAD_ENABLED": "symbol_database_upload_enabled", + "DD_DYNAMIC_INSTRUMENTATION_SYMBOL_DATABASE_UPLOAD_ENABLED": "dynamic_instrumentation_symbol_database_upload_enabled", + "DD_INTERAL_FORCE_SYMBOL_DATABASE_UPLOAD": "internal_force_symbol_database_upload", + "DD_THIRD_PARTY_DETECTION_INCLUDES": "third_party_detection_includes", + "DD_THIRD_PARTY_DETECTION_EXCLUDES": "third_party_detection_excludes", + "DD_SYMBOL_DATABASE_THIRD_PARTY_DETECTION_INCLUDES": "symbol_database_third_party_detection_includes", + "DD_SYMBOL_DATABASE_THIRD_PARTY_DETECTION_EXCLUDES": "symbol_database_third_party_detection_excludes", + "DD_CODE_ORIGIN_FOR_SPANS_ENABLED": "code_origin_for_spans_enabled", + "DD_CODE_ORIGIN_FOR_SPANS_MAX_USER_FRAMES": "code_origin_for_spans_max_user_frames", + "DD_LOGS_DIRECT_SUBMISSION_INTEGRATIONS": "logs_direct_submission_integrations", + "DD_LOGS_DIRECT_SUBMISSION_HOST": "logs_direct_submission_host", + "DD_LOGS_DIRECT_SUBMISSION_SOURCE": "logs_direct_submission_source", + "DD_LOGS_DIRECT_SUBMISSION_TAGS": "logs_direct_submission_tags", + "DD_LOGS_DIRECT_SUBMISSION_URL": "logs_direct_submission_url", + "DD_LOGS_DIRECT_SUBMISSION_MINIMUM_LEVEL": "logs_direct_submission_minimum_level", + "DD_LOGS_DIRECT_SUBMISSION_MAX_BATCH_SIZE": "logs_direct_submission_max_batch_size", + "DD_LOGS_DIRECT_SUBMISSION_MAX_QUEUE_SIZE": "logs_direct_submission_max_queue_size", + "DD_LOGS_DIRECT_SUBMISSION_BATCH_PERIOD_SECONDS": "logs_direct_submission_batch_period_seconds", + "DD_AGENT_HOST": "agent_host", + "DATADOG_TRACE_AGENT_HOSTNAME": "agent_host", + "DD_TRACE_AGENT_HOSTNAME": "agent_host", + "DD_TRACE_AGENT_PORT": "trace_agent_port", + "DATADOG_TRACE_AGENT_PORT": "trace_agent_port", + "DD_TRACE_PIPE_NAME": "trace_agent_named_pipe", + "DD_TRACE_PIPE_TIMEOUT_MS": "trace_agent_named_pipe_timeout_ms", + "DD_DOGSTATSD_PIPE_NAME": "dogstatsd_named_pipe", + "DD_APM_RECEIVER_PORT": "trace_agent_port", + "DD_TRACE_AGENT_URL": "trace_agent_url", + "DD_DOGSTATSD_PORT": "dogstatsd_port", + "DD_TRACE_PARTIAL_FLUSH_ENABLED": "trace_partial_flush_enabled", + "DD_TRACE_PARTIAL_FLUSH_MIN_SPANS": "trace_partial_flush_min_spans", + "DD_APM_RECEIVER_SOCKET": "trace_agent_socket", + "DD_DOGSTATSD_SOCKET": "dogstatsd_socket", + "DD_DOGSTATSD_URL": "dogstatsd_url", + "DD_IAST_ENABLED": "iast_enabled", + "DD_IAST_WEAK_HASH_ALGORITHMS": "iast_weak_hash_algorithms", + "DD_IAST_WEAK_CIPHER_ALGORITHMS": "iast_weak_cipher_algorithms", + "DD_IAST_DEDUPLICATION_ENABLED": "iast_deduplication_enabled", + "DD_IAST_REQUEST_SAMPLING": "iast_request_sampling_percentage", + "DD_IAST_MAX_CONCURRENT_REQUESTS": "iast_max_concurrent_requests", + "DD_IAST_MAX_RANGE_COUNT": "iast_max_range_count", + "DD_IAST_VULNERABILITIES_PER_REQUEST": "iast_vulnerability_per_request", + "DD_IAST_REDACTION_ENABLED": "iast_redaction_enabled", + "DD_IAST_REDACTION_KEYS_REGEXP": "iast_redaction_keys_regexp", + "DD_IAST_REDACTION_VALUES_REGEXP": "iast_redaction_values_regexp", + "DD_IAST_REDACTION_NAME_PATTERN": "iast_redaction_name_pattern", + "DD_IAST_REDACTION_VALUE_PATTERN": "iast_redaction_value_pattern", + "DD_IAST_REDACTION_REGEXP_TIMEOUT": "iast_redaction_regexp_timeout", + "DD_IAST_REGEXP_TIMEOUT": "iast_regexp_timeout", + "DD_IAST_TELEMETRY_VERBOSITY": "iast_telemetry_verbosity", + "DD_IAST_TRUNCATION_MAX_VALUE_LENGTH": "iast_truncation_max_value_length", + "DD_IAST_DB_ROWS_TO_TAINT": "iast_db_rows_to_taint", + "DD_IAST_COOKIE_FILTER_PATTERN": "iast_cookie_filter_pattern", + "DD_TRACE_STARTUP_LOGS": "trace_startup_logs_enabled", + "DD_TRACE_DISABLED_ADONET_COMMAND_TYPES": "trace_disabled_adonet_command_types", + "DD_MAX_LOGFILE_SIZE": "trace_log_file_max_size", + "DD_TRACE_LOGGING_RATE": "trace_log_rate", + "DD_TRACE_LOG_PATH": "trace_log_path", + "DD_TRACE_LOG_DIRECTORY": "trace_log_directory", + "DD_TRACE_LOGFILE_RETENTION_DAYS": "trace_log_file_retention_days", + "DD_TRACE_LOG_SINKS": "trace_log_sinks", + "DD_TRACE_COMMANDS_COLLECTION_ENABLED": "trace_commands_collection_enabled", + "DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS": "remote_config_poll_interval", + "remote_config_poll_interval_seconds": "remote_config_poll_interval", + "DD_INTERNAL_RCM_POLL_INTERVAL": "remote_config_poll_interval", + "trace.128_bit_traceid_logging_enabled": "trace_128_bits_id_logging_enabled", + "DD_PROFILING_ENABLED": "profiling_enabled", + "DD_PROFILING_CODEHOTSPOTS_ENABLED": "profiling_codehotspots_enabled", + "DD_PROFILING_ENDPOINT_COLLECTION_ENABLED": "profiling_endpoint_collection_enabled", + "DD_LOG_LEVEL": "agent_log_level", + "DD_TAGS": "agent_tags", + "DD_TRACE_GLOBAL_TAGS": "trace_tags", + "trace.agent_url": "trace_agent_url", + "trace.append_trace_ids_to_logs": "trace_append_trace_ids_to_logs", + "trace.client_ip_enabled": "trace_client_ip_enabled", + "trace.analytics_enabled": "trace_analytics_enabled", + "trace.rate_limit": "trace_rate_limit", + "trace.report_hostname": "trace_report_hostname", + "trace.http_client_split_by_domain": "trace_http_client_split_by_domain", + "trace.debug": "trace_debug_enabled", + "trace.agent_timeout": "trace_agent_timeout", + "trace.agent_port": "trace_agent_port", + "trace.x_datadog_tags_max_length": "trace_x_datadog_tags_max_length", + "trace.obfuscation_query_string_regexp": "trace_obfuscation_query_string_regexp", + "trace.peer_service_defaults_enabled": "trace_peer_service_defaults_enabled", + "trace.propagate_service": "trace_propagate_service", + "trace.remove_integration_service_names_enabled": "trace_remove_integration_service_names_enabled", + "trace.sample_rate": "trace_sample_rate", + "trace.health_metrics_enabled": "trace_health_metrics_enabled", + "trace.telemetry_enabled": "instrumentation_telemetry_enabled", + "trace.cli_enabled": "trace_cli_enabled", + "trace.db_client_split_by_instance": "trace_db_client_split_by_instance", + "trace.startup_logs": "trace_startup_logs", + "http_server_route_based_naming": "http_server_route_based_naming", + "DD_TRACE_PEER_SERVICE_MAPPING": "trace_peer_service_mapping", + "peerServiceMapping": "trace_peer_service_mapping", + "trace.peer.service.mapping": "trace_peer_service_mapping", + "trace.peer_service_mapping": "trace_peer_service_mapping", + "spanComputePeerService": "trace_peer_service_defaults_enabled", + "spanLeakDebug": "span_leak_debug", + "trace.peer.service.defaults.enabled": "trace_peer_service_defaults_enabled", + "spanAttributeSchema": "trace_span_attribute_schema", + "trace.span.attribute.schema": "trace_span_attribute_schema", + "spanRemoveIntegrationFromService": "trace_remove_integration_service_names_enabled", + "trace.remove.integration-service-names.enabled": "trace_remove_integration_service_names_enabled", + "ddtrace_auto_used": "ddtrace_auto_used", + "ddtrace_bootstrapped": "ddtrace_bootstrapped", + "orchestrion_enabled": "orchestrion_enabled", + "orchestrion_version": "orchestrion_version", + "trace.once_logs": "trace_once_logs", + "trace.wordpress_callbacks": "trace_wordpress_callbacks", + "trace.wordpress_enhanced_integration": "trace_wordpress_enhanced_integration", + "trace.wordpress_additional_actions": "trace_wordpress_additional_actions", + "trace.sidecar_trace_sender": "trace_sidecar_trace_sender", + "trace.sampling_rules_format": "trace_sampling_rules_format", + "DD_TRACE_SAMPLING_RULES_FORMAT": "trace_sampling_rules_format", + "trace.agentless": "trace_agentless", + "dd_agent_port": "trace_agent_port", + "dd_priority_sampling": "trace_priority_sampling_enabled", + "dd_profiling_capture_pct": "profiling_capture_pct", + "dd_profiling_export_libdd_enabled": "profiling_export_libdd_enabled", + "dd_profiling_heap_enabled": "profiling_heap_enabled", + "dd_profiling_lock_enabled": "profiling_lock_enabled", + "dd_profiling_max_frames": "profiling_max_frames", + "dd_profiling_memory_enabled": "profiling_memory_enabled", + "dd_profiling_stack_enabled": "profiling_stack_enabled", + "dd_profiling_upload_interval": "profiling_upload_interval", + "dd_remote_configuration_enabled": "remote_config_enabled", + "dd_trace_agent_timeout_seconds": "trace_agent_timeout", + "dd_trace_api_version": "trace_api_version", + "dd_trace_writer_buffer_size_bytes": "trace_serialization_buffer_size", + "dd_trace_writer_interval_seconds": "trace_agent_flush_interval", + "dd_trace_writer_max_payload_size_bytes": "trace_agent_max_payload_size", + "dd_trace_writer_reuse_connections": "trace_agent_reuse_connections", + "tracing_enabled": "trace_enabled", + "ssi_injection_enabled": "ssi_injection_enabled", + "DD_INJECTION_ENABLED": "ssi_injection_enabled", + "ssi_forced_injection_enabled": "ssi_forced_injection_enabled", + "DD_INJECT_FORCE": "ssi_forced_injection_enabled", + "inject_force": "ssi_forced_injection_enabled", + "OTEL_LOGS_EXPORTER": "otel_logs_exporter", + "OTEL_LOG_LEVEL": "otel_log_level", + "OTEL_METRICS_EXPORTER": "otel_metrics_exporter", + "integration_metrics_enabled": "integration_metrics_enabled", + "OTEL_SDK_DISABLED": "otel_sdk_disabled", + "OTEL_SERVICE_NAME": "otel_service_name", + "OTEL_PROPAGATORS": "otel_propagators", + "OTEL_RESOURCE_ATTRIBUTES": "otel_resource_attributes", + "OTEL_TRACES_EXPORTER": "otel_traces_exporter", + "OTEL_TRACES_SAMPLER": "otel_traces_sampler", + "OTEL_TRACES_SAMPLER_ARG": "otel_traces_sampler_arg", + "crashtracking_enabled": "crashtracking_enabled", + "crashtracking_available": "crashtracking_available", + "crashtracking_started": "crashtracking_started", + "crashtracking_stdout_filename": "crashtracking_stdout_filename", + "crashtracking_stderr_filename": "crashtracking_stderr_filename", + "crashtracking_alt_stack": "crashtracking_alt_stack", + "crashtracking_stacktrace_resolver": "crashtracking_stacktrace_resolver", + "crashtracking_debug_url": "crashtracking_debug_url", + "debug_stack_enabled": "debug_stack_enabled", + "DD_TRACE_BAGGAGE_MAX_ITEMS": "trace_baggage_max_items", + "DD_TRACE_BAGGAGE_MAX_BYTES": "trace_baggage_max_bytes", + "appsec.apiSecurity.sampleDelay": "api_security_sample_delay", + "appsec.stackTrace.enabled": "appsec_stack_trace_enabled", + "appsec.stackTrace.maxDepth": "appsec_max_stack_trace_depth", + "appsec.stackTrace.maxStackTraces": "appsec_max_stack_traces", + "appsec.standalone.enabled": "experimental_appsec_standalone_enabled", + "baggageMaxBytes": "trace_baggage_max_bytes", + "baggageMaxItems": "trace_baggage_max_items", + "ciVisAgentlessLogSubmissionEnabled": "ci_visibility_agentless_enabled", + "ciVisibilityTestSessionName": "test_session_name", + "cloudPayloadTagging.maxDepth": "cloud_payload_tagging_max_depth", + "cloudPayloadTagging.requestsEnabled": "cloud_payload_tagging_requests_enabled", + "cloudPayloadTagging.responsesEnabled": "cloud_payload_tagging_responses_enabled", + "cloudPayloadTagging.rules.aws.eventbridge.expand": "cloud_payload_tagging_rules_aws_eventbridge_expand", + "cloudPayloadTagging.rules.aws.eventbridge.request": "cloud_payload_tagging_rules_aws_eventbridge_request", + "cloudPayloadTagging.rules.aws.eventbridge.response": "cloud_payload_tagging_rules_aws_eventbridge_response", + "cloudPayloadTagging.rules.aws.kinesis.expand": "cloud_payload_tagging_rules_aws_kinesis_expand", + "cloudPayloadTagging.rules.aws.kinesis.request": "cloud_payload_tagging_rules_aws_kinesis_request", + "cloudPayloadTagging.rules.aws.kinesis.response": "cloud_payload_tagging_rules_aws_kinesis_response", + "cloudPayloadTagging.rules.aws.s3.expand": "cloud_payload_tagging_rules_aws_s3_expand", + "cloudPayloadTagging.rules.aws.s3.request": "cloud_payload_tagging_rules_aws_s3_request", + "cloudPayloadTagging.rules.aws.s3.response": "cloud_payload_tagging_rules_aws_s3_response", + "cloudPayloadTagging.rules.aws.sns.expand": "cloud_payload_tagging_rules_aws_sns_expand", + "cloudPayloadTagging.rules.aws.sns.request": "cloud_payload_tagging_rules_aws_sns_request", + "cloudPayloadTagging.rules.aws.sns.response": "cloud_payload_tagging_rules_aws_sns_response", + "cloudPayloadTagging.rules.aws.sqs.expand": "cloud_payload_tagging_rules_aws_sqs_expand", + "cloudPayloadTagging.rules.aws.sqs.request": "cloud_payload_tagging_rules_aws_sqs_request", + "cloudPayloadTagging.rules.aws.sqs.response": "cloud_payload_tagging_rules_aws_sqs_response", + "codeOriginForSpans.enabled": "code_origin_for_spans_enabled", + "commitSHA": "commit_sha", + "crashtracking.enabled": "crashtracking_enabled", + "dynamicInstrumentationEnabled": "dynamic_instrumentation_enabled", + "flakyTestRetriesCount": "ci_visibility_flaky_retry_count", + "gitMetadataEnabled": "git_metadata_enabled", + "grpc.client.error.statuses": "trace_grpc_client_error_statuses", + "grpc.server.error.statuses": "trace_grpc_server_error_statuses", + "headerTags": "trace_header_tags", + "injectionEnabled": "ssi_injection_enabled", + "instrumentation_config_id": "instrumentation_config_id", + "isEarlyFlakeDetectionEnabled": "ci_visibility_early_flake_detection_enabled", + "isFlakyTestRetriesEnabled": "ci_visibility_flaky_retry_enabled", + "isManualApiEnabled": "ci_visibility_manual_api_enabled", + "isTestDynamicInstrumentationEnabled": "ci_visibility_test_dynamic_instrumentation_enabled", + "langchain.spanCharLimit": "langchain_span_char_limit", + "langchain.spanPromptCompletionSampleRate": "langchain_span_prompt_completion_sample_rate", + "legacyBaggageEnabled": "trace_legacy_baggage_enabled", + "llmobs.agentlessEnabled": "llmobs_agentless_enabled", + "llmobs.enabled": "llmobs_enabled", + "llmobs.mlApp": "llmobs_ml_app", + "profiling.longLivedThreshold": "profiling_long_lived_threshold", + "repositoryUrl": "repository_url", + "sampler.rules": "trace_sample_rules", + "sampler.spanSamplingRules": "span_sample_rules", + "telemetry.dependencyCollection": "instrumentation_telemetry_dependency_collection_enabled", + "telemetry.heartbeatInterval": "instrumentation_telemetry_heartbeat_interval", + "traceEnabled": "trace_enabled", + "tracePropagationStyle.otelPropagators": "trace_propagation_style_otel_propagators" +} diff --git a/packages/dd-trace/test/fixtures/telemetry/config_prefix_block_list.json b/packages/dd-trace/test/fixtures/telemetry/config_prefix_block_list.json new file mode 100644 index 00000000000..fc5188f2c2b --- /dev/null +++ b/packages/dd-trace/test/fixtures/telemetry/config_prefix_block_list.json @@ -0,0 +1,243 @@ +[ + "apiKey", + "appsec.eventTracking.enabled", + "trace.integration.", + "global_tag_runtime-id", + "tracePropagationStyle.inject.", + "DD_PROFILING_API_KEY", + "dd_profiling_apikey", + "N/A", + "DD_API_KEY", + "DD_APPLICATION_KEY", + "DD_TRACE_HttpMessageHandler_", + "DD_HttpMessageHandler_", + "DD_TRACE_HttpSocketsHandler_", + "DD_HttpSocketsHandler_", + "DD_TRACE_WinHttpHandler_", + "DD_WinHttpHandler_", + "DD_TRACE_CurlHandler_", + "DD_CurlHandler_", + "DD_TRACE_AspNetCore_", + "DD_AspNetCore_", + "DD_TRACE_AdoNet_", + "DD_AdoNet_", + "DD_TRACE_AspNet_", + "DD_AspNet_", + "DD_TRACE_AspNetMvc_", + "DD_AspNetMvc_", + "DD_TRACE_AspNetWebApi2_", + "DD_AspNetWebApi2_", + "DD_TRACE_GraphQL_", + "DD_GraphQL_", + "DD_TRACE_HotChocolate_", + "DD_HotChocolate_", + "DD_TRACE_MongoDb_", + "DD_MongoDb_", + "DD_TRACE_XUnit_", + "DD_XUnit_", + "DD_TRACE_NUnit_", + "DD_NUnit_", + "DD_TRACE_MsTestV2_", + "DD_MsTestV2_", + "DD_TRACE_Wcf_", + "DD_Wcf_", + "DD_TRACE_WebRequest_", + "DD_WebRequest_", + "DD_TRACE_ElasticsearchNet_", + "DD_ElasticsearchNet_", + "DD_TRACE_ServiceStackRedis_", + "DD_ServiceStackRedis_", + "DD_TRACE_StackExchangeRedis_", + "DD_StackExchangeRedis_", + "DD_TRACE_ServiceRemoting_", + "DD_ServiceRemoting_", + "DD_TRACE_RabbitMQ_", + "DD_RabbitMQ_", + "DD_TRACE_Msmq_", + "DD_Msmq_", + "DD_TRACE_Kafka_", + "DD_Kafka_", + "DD_TRACE_CosmosDb_", + "DD_CosmosDb_", + "DD_TRACE_AwsLambda_", + "DD_AwsLambda_", + "DD_TRACE_AwsSdk_", + "DD_AwsSdk_", + "DD_TRACE_AwsSqs_", + "DD_AwsSqs_", + "DD_TRACE_AwsSns_", + "DD_AwsSns_", + "DD_TRACE_ILogger_", + "DD_ILogger_", + "DD_TRACE_Aerospike_", + "DD_Aerospike_", + "DD_TRACE_AzureFunctions_", + "DD_AzureFunctions_", + "DD_TRACE_Couchbase_", + "DD_Couchbase_", + "DD_TRACE_MySql_", + "DD_MySql_", + "DD_TRACE_Npgsql_", + "DD_Npgsql_", + "DD_TRACE_Oracle_", + "DD_Oracle_", + "DD_TRACE_SqlClient_", + "DD_SqlClient_", + "DD_TRACE_Sqlite_", + "DD_Sqlite_", + "DD_TRACE_Serilog_", + "DD_Serilog_", + "DD_TRACE_Log4Net_", + "DD_Log4Net_", + "DD_TRACE_NLog_", + "DD_NLog_", + "DD_TRACE_TraceAnnotations_", + "DD_TraceAnnotations_", + "DD_TRACE_Grpc_", + "DD_Grpc_", + "DD_TRACE_Process_", + "DD_Process_", + "DD_TRACE_HashAlgorithm_", + "DD_HashAlgorithm_", + "DD_TRACE_SymmetricAlgorithm_", + "DD_SymmetricAlgorithm_", + "DD_TRACE_OpenTelemetry_", + "DD_OpenTelemetry_", + "DD_TRACE_PathTraversal_", + "DD_PathTraversal_", + "DD_TRACE_Ssrf_", + "DD_Ssrf_", + "DD_TRACE_Ldap_", + "DD_Ldap_", + "DD_TRACE_AwsKinesis_", + "DD_AwsKinesis_", + "DD_TRACE_AzureServiceBus_", + "DD_AzureServiceBus_", + "DD_TRACE_SystemRandom_", + "DD_SystemRandom_", + "DD_TRACE_AwsDynamoDb_", + "DD_AwsDynamoDb_", + "DD_TRACE_HardcodedSecret_", + "DD_HarcodedSecret_", + "DD_TRACE_IbmMq_", + "DD_IbmMq_", + "DD_TRACE_Remoting_", + "DD_Remoting_", + "trace.amqp_enabled", + "trace.amqp_analytics_enabled", + "trace.amqp_analytics_sample_rate", + "trace.cakephp_enabled", + "trace.cakephp_analytics_enabled", + "trace.cakephp_analytics_sample_rate", + "trace.codeigniter_enabled", + "trace.codeigniter_analytics_enabled", + "trace.codeigniter_analytics_sample_rate", + "trace.curl_enabled", + "trace.curl_analytics_enabled", + "trace.curl_analytics_sample_rate", + "trace.elasticsearch_enabled", + "trace.elasticsearch_analytics_enabled", + "trace.elasticsearch_analytics_sample_rate", + "trace.eloquent_enabled", + "trace.eloquent_analytics_enabled", + "trace.eloquent_analytics_sample_rate", + "trace.frankenphp_enabled", + "trace.frankenphp_analytics_enabled", + "trace.frankenphp_analytics_sample_rate", + "trace.googlespanner_enabled", + "trace.googlespanner_analytics_enabled", + "trace.googlespanner_analytics_sample_rate", + "trace.guzzle_enabled", + "trace.guzzle_analytics_enabled", + "trace.guzzle_analytics_sample_rate", + "trace.laminas_enabled", + "trace.laminas_analytics_enabled", + "trace.laminas_analytics_sample_rate", + "trace.laravel_enabled", + "trace.laravel_analytics_enabled", + "trace.laravel_analytics_sample_rate", + "trace.laravelqueue_enabled", + "trace.laravelqueue_analytics_enabled", + "trace.laravelqueue_analytics_sample_rate", + "trace.logs_enabled", + "trace.logs_analytics_enabled", + "trace.logs_analytics_sample_rate", + "trace.lumen_enabled", + "trace.lumen_analytics_enabled", + "trace.lumen_analytics_sample_rate", + "trace.memcache_enabled", + "trace.memcache_analytics_enabled", + "trace.memcache_analytics_sample_rate", + "trace.memcached_enabled", + "trace.memcached_analytics_enabled", + "trace.memcached_analytics_sample_rate", + "trace.mongo_enabled", + "trace.mongo_analytics_enabled", + "trace.mongo_analytics_sample_rate", + "trace.mongodb_enabled", + "trace.mongodb_analytics_enabled", + "trace.mongodb_analytics_sample_rate", + "trace.mysqli_enabled", + "trace.mysqli_analytics_enabled", + "trace.mysqli_analytics_sample_rate", + "trace.nette_enabled", + "trace.nette_analytics_enabled", + "trace.nette_analytics_sample_rate", + "trace.openai_enabled", + "trace.openai_analytics_enabled", + "trace.openai_analytics_sample_rate", + "trace.pcntl_enabled", + "trace.pcntl_analytics_enabled", + "trace.pcntl_analytics_sample_rate", + "trace.pdo_enabled", + "trace.pdo_analytics_enabled", + "trace.pdo_analytics_sample_rate", + "trace.phpredis_enabled", + "trace.phpredis_analytics_enabled", + "trace.phpredis_analytics_sample_rate", + "trace.predis_enabled", + "trace.predis_analytics_enabled", + "trace.predis_analytics_sample_rate", + "trace.psr18_enabled", + "trace.psr18_analytics_enabled", + "trace.psr18_analytics_sample_rate", + "trace.roadrunner_enabled", + "trace.roadrunner_analytics_enabled", + "trace.roadrunner_analytics_sample_rate", + "trace.sqlsrv_enabled", + "trace.sqlsrv_analytics_enabled", + "trace.sqlsrv_analytics_sample_rate", + "trace.slim_enabled", + "trace.slim_analytics_enabled", + "trace.slim_analytics_sample_rate", + "trace.swoole_enabled", + "trace.swoole_analytics_enabled", + "trace.swoole_analytics_sample_rate", + "trace.symfonymessenger_enabled", + "trace.symfonymessenger_analytics_enabled", + "trace.symfonymessenger_analytics_sample_rate", + "trace.symfony_enabled", + "trace.symfony_analytics_enabled", + "trace.symfony_analytics_sample_rate", + "trace.web_enabled", + "trace.web_analytics_enabled", + "trace.web_analytics_sample_rate", + "trace.wordpress_enabled", + "trace.wordpress_analytics_enabled", + "trace.wordpress_analytics_sample_rate", + "trace.yii_enabled", + "trace.yii_analytics_enabled", + "trace.yii_analytics_sample_rate", + "trace.zendframework_enabled", + "trace.zendframework_analytics_enabled", + "trace.zendframework_analytics_sample_rate", + "trace.drupal_enabled", + "trace.drupal_analytics_enabled", + "trace.drupal_analytics_sample_rate", + "trace.magento_enabled", + "trace.magento_analytics_enabled", + "trace.magento_analytics_sample_rate", + "trace.exec_enabled", + "trace.exec_analytics_enabled", + "trace.exec_analytics_sample_rate" +] diff --git a/packages/dd-trace/test/fixtures/telemetry/nodejs_config_rules.json b/packages/dd-trace/test/fixtures/telemetry/nodejs_config_rules.json new file mode 100644 index 00000000000..b96a6ab5d15 --- /dev/null +++ b/packages/dd-trace/test/fixtures/telemetry/nodejs_config_rules.json @@ -0,0 +1,175 @@ +{ + "normalization_rules" : + { + "HOSTNAME" : "agent_hostname", + "hostname" : "agent_hostname", + "appsec.blockedTemplateHtml" : "appsec_blocked_template_html", + "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML" : "appsec_blocked_template_html", + "appsec.blockedTemplateJson" : "appsec_blocked_template_json", + "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON" : "appsec_blocked_template_json", + "security_enabled" : "appsec_enabled", + "appsec.enabled" : "appsec_enabled", + "DD_APPSEC_ENABLED" : "appsec_enabled", + "appsec.obfuscatorKeyRegex" : "appsec_obfuscation_parameter_key_regexp", + "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP" : "appsec_obfuscation_parameter_key_regexp", + "appsec.obfuscatorValueRegex" : "appsec_obfuscation_parameter_value_regexp", + "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP" : "appsec_obfuscation_parameter_value_regexp", + "appsec.rateLimit" : "appsec_rate_limit", + "appsec.rules" : "appsec_rules", + "DD_APPSEC_RULES" : "appsec_rules", + "appsec.customRulesProvided" : "appsec_rules_custom_provided", + "appsec.rules.metadata.rules_version" : "appsec_rules_metadata_rules_version", + "appsec.rules.version" : "appsec_rules_version", + "appsec.wafTimeout" : "appsec_waf_timeout", + "appsec.waf.timeout" : "appsec_waf_timeout", + "DD_APPSEC_WAF_TIMEOUT" : "appsec_waf_timeout", + "civisibility.enabled" : "ci_visibility_enabled", + "isCiVisibility" : "ci_visibility_enabled", + "DD_CIVISIBILITY_ENABLED" : "ci_visibility_enabled", + "clientIpHeaderDisabled" : "client_ip_header_disabled", + "dbmPropagationMode" : "dbm_propagation_mode", + "dbm_propagation_mode" : "dbm_propagation_mode", + "DD_DBM_PROPAGATION_MODE" : "dbm_propagation_mode", + "dogstatsd.hostname" : "dogstatsd_hostname", + "dogstatsd.port" : "dogstatsd_port", + "DD_DOGSTATSD_PORT" : "dogstatsd_port", + "env" : "env", + "DD_ENV" : "env", + "experimental.b3" : "experimental_b3", + "experimental.enableGetRumData" : "experimental_enable_get_rum_data", + "experimental.exporter" : "experimental_exporter", + "experimental.runtimeId" : "experimental_runtime_id", + "experimental.sampler.rateLimit" : "experimental_sampler_rate_limit", + "experimental.sampler.sampleRate" : "experimental_sampler_sample_rate", + "experimental.traceparent" : "experimental_traceparent", + "flushInterval" : "flush_interval", + "flushMinSpans" : "flush_min_spans", + "isGitUploadEnabled" : "git_upload_enabled", + "iast.deduplication.enabled" : "iast_deduplication_enabled", + "iast.deduplicationEnabled" : "iast_deduplication_enabled", + "DD_IAST_DEDUPLICATION_ENABLED" : "iast_deduplication_enabled", + "iast.enabled" : "iast_enabled", + "DD_IAST_ENABLED" : "iast_enabled", + "iast.maxConcurrentRequests" : "iast_max_concurrent_requests", + "iast.max-concurrent-requests" : "iast_max_concurrent_requests", + "DD_IAST_MAX_CONCURRENT_REQUESTS" : "iast_max_concurrent_requests", + "iast.maxContextOperations" : "iast_max_context_operations", + "iast.requestSampling" : "iast_request_sampling", + "iast.request-sampling" : "iast_request_sampling", + "telemetry.debug" : "instrumentation_telemetry_debug_enabled", + "DD_INTERNAL_TELEMETRY_DEBUG_ENABLED" : "instrumentation_telemetry_debug_enabled", + "instrumentation.telemetry.enabled" : "instrumentation_telemetry_enabled", + "telemetryEnabled" : "instrumentation_telemetry_enabled", + "telemetry.enabled" : "instrumentation_telemetry_enabled", + "DD_INSTRUMENTATION_TELEMETRY_ENABLED" : "instrumentation_telemetry_enabled", + "trace.telemetry_enabled" : "instrumentation_telemetry_enabled", + "telemetry.logCollection" : "instrumentation_telemetry_log_collection_enabled", + "telemetry.metrics" : "instrumentation_telemetry_metrics_enabled", + "DD_TELEMETRY_METRICS_ENABLED" : "instrumentation_telemetry_metrics_enabled", + "isIntelligentTestRunnerEnabled" : "intelligent_test_runner_enabled", + "logger" : "logger", + "logInjection_enabled" : "logs_injection_enabled", + "logs.injection" : "logs_injection_enabled", + "logInjection" : "logs_injection_enabled", + "DD_LOGS_INJECTION" : "logs_injection_enabled", + "lookup" : "lookup", + "plugins" : "plugins", + "profiling.enabled" : "profiling_enabled", + "DD_PROFILING_ENABLED" : "profiling_enabled", + "profiling.exporters" : "profiling_exporters", + "profiling.sourceMap" : "profiling_source_map_enabled", + "remote_config.enabled" : "remote_config_enabled", + "remoteConfig.enabled" : "remote_config_enabled", + "remoteConfig.pollInterval" : "remote_config_poll_interval", + "DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS" : "remote_config_poll_interval", + "DD_INTERNAL_RCM_POLL_INTERVAL" : "remote_config_poll_interval", + "runtimemetrics_enabled" : "runtime_metrics_enabled", + "runtime.metrics.enabled" : "runtime_metrics_enabled", + "runtimeMetrics" : "runtime_metrics_enabled", + "DD_RUNTIME_METRICS_ENABLED" : "runtime_metrics_enabled", + "scope" : "scope", + "service" : "service", + "DD_SERVICE" : "service", + "DD_SERVICE_NAME" : "service", + "site" : "site", + "DD_SITE" : "site", + "stats.enabled" : "stats_enabled", + "traceId128BitGenerationEnabled" : "trace_128_bits_id_enabled", + "trace.128_bit_traceid_generation_enabled" : "trace_128_bits_id_enabled", + "DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED" : "trace_128_bits_id_enabled", + "traceId128BitLoggingEnabled" : "trace_128_bits_id_logging_enabled", + "DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED" : "trace_128_bits_id_logging_enabled", + "trace.128_bit_traceid_logging_enabled" : "trace_128_bits_id_logging_enabled", + "trace.agent.port" : "trace_agent_port", + "port" : "trace_agent_port", + "DD_TRACE_AGENT_PORT" : "trace_agent_port", + "DATADOG_TRACE_AGENT_PORT" : "trace_agent_port", + "DD_APM_RECEIVER_PORT" : "trace_agent_port", + "trace.agent_port" : "trace_agent_port", + "protocolVersion" : "trace_agent_protocol_version", + "agent_url" : "trace_agent_url", + "url" : "trace_agent_url", + "DD_TRACE_AGENT_URL" : "trace_agent_url", + "trace.agent_url" : "trace_agent_url", + "trace.client-ip.enabled" : "trace_client_ip_enabled", + "clientIpEnabled" : "trace_client_ip_enabled", + "DD_TRACE_CLIENT_IP_ENABLED" : "trace_client_ip_enabled", + "trace.client_ip_enabled" : "trace_client_ip_enabled", + "clientIpHeader" : "trace_client_ip_header", + "DD_TRACE_CLIENT_IP_HEADER" : "trace_client_ip_header", + "debug" : "trace_debug_enabled", + "dd.trace.debug" : "trace_debug_enabled", + "DD_TRACE_DEBUG" : "trace_debug_enabled", + "trace.debug" : "trace_debug_enabled", + "enabled" : "trace_enabled", + "trace.enabled" : "trace_enabled", + "tracing" : "trace_enabled", + "DD_TRACE_ENABLED" : "trace_enabled", + "tagsHeaderMaxLength" : "trace_header_tags_max_length", + "logLevel" : "trace_log_level", + "querystringObfuscation" : "trace_obfuscation_query_string_regexp", + "queryStringObfuscation" : "trace_obfuscation_query_string_regexp", + "DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP" : "trace_obfuscation_query_string_regexp", + "trace.obfuscation_query_string_regexp" : "trace_obfuscation_query_string_regexp", + "DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED" : "trace_peer_service_defaults_enabled", + "trace.peer_service_defaults_enabled" : "trace_peer_service_defaults_enabled", + "spanComputePeerService" : "trace_peer_service_defaults_enabled", + "trace.peer.service.defaults.enabled" : "trace_peer_service_defaults_enabled", + "DD_TRACE_PEER_SERVICE_MAPPING" : "trace_peer_service_mapping", + "peerServiceMapping" : "trace_peer_service_mapping", + "trace.peer.service.mapping" : "trace_peer_service_mapping", + "trace.peer_service_mapping" : "trace_peer_service_mapping", + "sampler.rateLimit" : "trace_rate_limit", + "trace.rate.limit" : "trace_rate_limit", + "DD_TRACE_RATE_LIMIT" : "trace_rate_limit", + "DD_MAX_TRACES_PER_SECOND" : "trace_rate_limit", + "trace.rate_limit" : "trace_rate_limit", + "DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED" : "trace_remove_integration_service_names_enabled", + "trace.remove_integration_service_names_enabled" : "trace_remove_integration_service_names_enabled", + "spanRemoveIntegrationFromService" : "trace_remove_integration_service_names_enabled", + "trace.remove.integration-service-names.enabled" : "trace_remove_integration_service_names_enabled", + "reportHostname" : "trace_report_hostname", + "trace.report-hostname" : "trace_report_hostname", + "trace.report_hostname" : "trace_report_hostname", + "sample_rate" : "trace_sample_rate", + "trace.sample.rate" : "trace_sample_rate", + "dd_trace_sample_rate" : "trace_sample_rate", + "sampler.sampleRate" : "trace_sample_rate", + "sampleRate" : "trace_sample_rate", + "DD_TRACE_SAMPLE_RATE" : "trace_sample_rate", + "trace.sample_rate" : "trace_sample_rate", + "spanattributeschema" : "trace_span_attribute_schema", + "DD_TRACE_SPAN_ATTRIBUTE_SCHEMA" : "trace_span_attribute_schema", + "spanAttributeSchema" : "trace_span_attribute_schema", + "trace.span.attribute.schema" : "trace_span_attribute_schema", + "startupLogs" : "trace_startup_logs_enabled", + "DD_TRACE_STARTUP_LOGS" : "trace_startup_logs_enabled", + "global_tag_version" : "version" + }, + "prefix_block_list" : [ + ], + "redaction_list" :[ + ], + "reduce_rules" : { + } +} From 844d62377fc5e20b55bca916c72f1e3c6acc9690 Mon Sep 17 00:00:00 2001 From: Roch Devost Date: Mon, 2 Dec 2024 17:27:50 -0500 Subject: [PATCH 3/3] fix mysql2 3.11.5 support (#4962) --- .../datadog-instrumentations/src/mysql2.js | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/datadog-instrumentations/src/mysql2.js b/packages/datadog-instrumentations/src/mysql2.js index 096eec0e80e..bd5c48daf56 100644 --- a/packages/datadog-instrumentations/src/mysql2.js +++ b/packages/datadog-instrumentations/src/mysql2.js @@ -8,7 +8,7 @@ const { const shimmer = require('../../datadog-shimmer') const semver = require('semver') -addHook({ name: 'mysql2', file: 'lib/connection.js', versions: ['>=1'] }, (Connection, version) => { +function wrapConnection (Connection, version) { const startCh = channel('apm:mysql2:query:start') const finishCh = channel('apm:mysql2:query:finish') const errorCh = channel('apm:mysql2:query:error') @@ -151,9 +151,8 @@ addHook({ name: 'mysql2', file: 'lib/connection.js', versions: ['>=1'] }, (Conne } }, cmd)) } -}) - -addHook({ name: 'mysql2', file: 'lib/pool.js', versions: ['>=1'] }, (Pool, version) => { +} +function wrapPool (Pool, version) { const startOuterQueryCh = channel('datadog:mysql2:outerquery:start') const shouldEmitEndAfterQueryAbort = semver.intersects(version, '>=1.3.3') @@ -221,10 +220,9 @@ addHook({ name: 'mysql2', file: 'lib/pool.js', versions: ['>=1'] }, (Pool, versi }) return Pool -}) +} -// PoolNamespace.prototype.query does not exist in mysql2<2.3.0 -addHook({ name: 'mysql2', file: 'lib/pool_cluster.js', versions: ['>=2.3.0'] }, PoolCluster => { +function wrapPoolCluster (PoolCluster) { const startOuterQueryCh = channel('datadog:mysql2:outerquery:start') const wrappedPoolNamespaces = new WeakSet() @@ -297,4 +295,11 @@ addHook({ name: 'mysql2', file: 'lib/pool_cluster.js', versions: ['>=2.3.0'] }, }) return PoolCluster -}) +} + +addHook({ name: 'mysql2', file: 'lib/base/connection.js', versions: ['>=3.11.5'] }, wrapConnection) +addHook({ name: 'mysql2', file: 'lib/connection.js', versions: ['1 - 3.11.4'] }, wrapConnection) +addHook({ name: 'mysql2', file: 'lib/pool.js', versions: ['1 - 3.11.4'] }, wrapPool) + +// PoolNamespace.prototype.query does not exist in mysql2<2.3.0 +addHook({ name: 'mysql2', file: 'lib/pool_cluster.js', versions: ['2.3.0 - 3.11.4'] }, wrapPoolCluster)