newrelic_rpm 9.7.0 → 9.16.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +376 -2
  3. data/README.md +17 -18
  4. data/Rakefile +1 -1
  5. data/lib/boot/strap.rb +101 -0
  6. data/lib/new_relic/agent/agent.rb +4 -1
  7. data/lib/new_relic/agent/agent_helpers/connect.rb +10 -8
  8. data/lib/new_relic/agent/agent_helpers/start_worker_thread.rb +1 -1
  9. data/lib/new_relic/agent/agent_helpers/startup.rb +2 -1
  10. data/lib/new_relic/agent/agent_logger.rb +3 -1
  11. data/lib/new_relic/agent/aws.rb +68 -0
  12. data/lib/new_relic/agent/configuration/default_source.rb +519 -23
  13. data/lib/new_relic/agent/configuration/environment_source.rb +14 -2
  14. data/lib/new_relic/agent/configuration/high_security_source.rb +1 -0
  15. data/lib/new_relic/agent/configuration/manager.rb +51 -8
  16. data/lib/new_relic/agent/configuration/security_policy_source.rb +11 -0
  17. data/lib/new_relic/agent/configuration/yaml_source.rb +2 -0
  18. data/lib/new_relic/agent/connect/request_builder.rb +1 -1
  19. data/lib/new_relic/agent/custom_event_aggregator.rb +27 -1
  20. data/lib/new_relic/agent/database/obfuscation_helpers.rb +11 -11
  21. data/lib/new_relic/agent/database/obfuscator.rb +1 -0
  22. data/lib/new_relic/agent/database.rb +39 -0
  23. data/lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb +1 -5
  24. data/lib/new_relic/agent/error_collector.rb +39 -10
  25. data/lib/new_relic/agent/harvester.rb +1 -1
  26. data/lib/new_relic/agent/instrumentation/active_merchant.rb +0 -13
  27. data/lib/new_relic/agent/instrumentation/active_record.rb +1 -8
  28. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +3 -0
  29. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +1 -12
  30. data/lib/new_relic/agent/instrumentation/active_support_broadcast_logger/instrumentation.rb +7 -3
  31. data/lib/new_relic/agent/instrumentation/active_support_broadcast_logger.rb +0 -2
  32. data/lib/new_relic/agent/instrumentation/active_support_logger.rb +0 -2
  33. data/lib/new_relic/agent/instrumentation/async_http.rb +4 -3
  34. data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/chain.rb +33 -0
  35. data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/instrumentation.rb +93 -0
  36. data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/prepend.rb +23 -0
  37. data/lib/new_relic/agent/instrumentation/aws_sdk_lambda.rb +23 -0
  38. data/lib/new_relic/agent/instrumentation/aws_sqs/chain.rb +37 -0
  39. data/lib/new_relic/agent/instrumentation/aws_sqs/instrumentation.rb +67 -0
  40. data/lib/new_relic/agent/instrumentation/aws_sqs/prepend.rb +21 -0
  41. data/lib/new_relic/agent/instrumentation/aws_sqs.rb +23 -0
  42. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +14 -0
  43. data/lib/new_relic/agent/instrumentation/bunny.rb +3 -4
  44. data/lib/new_relic/agent/instrumentation/concurrent_ruby.rb +1 -2
  45. data/lib/new_relic/agent/instrumentation/curb.rb +3 -4
  46. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +0 -23
  47. data/lib/new_relic/agent/instrumentation/dynamodb/chain.rb +27 -0
  48. data/lib/new_relic/agent/instrumentation/dynamodb/instrumentation.rb +64 -0
  49. data/lib/new_relic/agent/instrumentation/dynamodb/prepend.rb +19 -0
  50. data/lib/new_relic/agent/instrumentation/dynamodb.rb +23 -0
  51. data/lib/new_relic/agent/instrumentation/elasticsearch/instrumentation.rb +58 -8
  52. data/lib/new_relic/agent/instrumentation/elasticsearch.rb +0 -2
  53. data/lib/new_relic/agent/instrumentation/ethon.rb +0 -4
  54. data/lib/new_relic/agent/instrumentation/excon.rb +0 -16
  55. data/lib/new_relic/agent/instrumentation/fiber.rb +0 -2
  56. data/lib/new_relic/agent/instrumentation/grape.rb +1 -1
  57. data/lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb +0 -1
  58. data/lib/new_relic/agent/instrumentation/grpc_server.rb +1 -1
  59. data/lib/new_relic/agent/instrumentation/httpclient.rb +0 -1
  60. data/lib/new_relic/agent/instrumentation/httprb.rb +0 -1
  61. data/lib/new_relic/agent/instrumentation/httpx.rb +0 -4
  62. data/lib/new_relic/agent/instrumentation/logger.rb +1 -3
  63. data/lib/new_relic/agent/instrumentation/logstasher/chain.rb +21 -0
  64. data/lib/new_relic/agent/instrumentation/logstasher/instrumentation.rb +24 -0
  65. data/lib/new_relic/agent/instrumentation/logstasher/prepend.rb +13 -0
  66. data/lib/new_relic/agent/instrumentation/logstasher.rb +25 -0
  67. data/lib/new_relic/agent/instrumentation/memcache.rb +0 -1
  68. data/lib/new_relic/agent/instrumentation/net_http/instrumentation.rb +6 -0
  69. data/lib/new_relic/agent/instrumentation/opensearch/chain.rb +21 -0
  70. data/lib/new_relic/agent/instrumentation/opensearch/instrumentation.rb +66 -0
  71. data/lib/new_relic/agent/instrumentation/opensearch/prepend.rb +13 -0
  72. data/lib/new_relic/agent/instrumentation/opensearch.rb +23 -0
  73. data/lib/new_relic/agent/instrumentation/padrino.rb +3 -3
  74. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +3 -0
  75. data/lib/new_relic/agent/instrumentation/rails_notifications/action_controller.rb +9 -5
  76. data/lib/new_relic/agent/instrumentation/rake.rb +0 -1
  77. data/lib/new_relic/agent/instrumentation/rdkafka/chain.rb +72 -0
  78. data/lib/new_relic/agent/instrumentation/rdkafka/instrumentation.rb +70 -0
  79. data/lib/new_relic/agent/instrumentation/rdkafka/prepend.rb +67 -0
  80. data/lib/new_relic/agent/instrumentation/rdkafka.rb +25 -0
  81. data/lib/new_relic/agent/instrumentation/redis/cluster_middleware.rb +26 -0
  82. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +14 -11
  83. data/lib/new_relic/agent/instrumentation/redis/middleware.rb +3 -0
  84. data/lib/new_relic/agent/instrumentation/redis.rb +11 -5
  85. data/lib/new_relic/agent/instrumentation/resque.rb +0 -4
  86. data/lib/new_relic/agent/instrumentation/roda.rb +4 -4
  87. data/lib/new_relic/agent/instrumentation/ruby_kafka/chain.rb +55 -0
  88. data/lib/new_relic/agent/instrumentation/ruby_kafka/instrumentation.rb +67 -0
  89. data/lib/new_relic/agent/instrumentation/ruby_kafka/prepend.rb +60 -0
  90. data/lib/new_relic/agent/instrumentation/ruby_kafka.rb +25 -0
  91. data/lib/new_relic/agent/instrumentation/ruby_openai/chain.rb +36 -0
  92. data/lib/new_relic/agent/instrumentation/ruby_openai/instrumentation.rb +196 -0
  93. data/lib/new_relic/agent/instrumentation/ruby_openai/prepend.rb +20 -0
  94. data/lib/new_relic/agent/instrumentation/ruby_openai.rb +35 -0
  95. data/lib/new_relic/agent/instrumentation/sidekiq.rb +0 -14
  96. data/lib/new_relic/agent/instrumentation/sinatra.rb +3 -19
  97. data/lib/new_relic/agent/instrumentation/stripe_subscriber.rb +22 -1
  98. data/lib/new_relic/agent/instrumentation/thread.rb +0 -2
  99. data/lib/new_relic/agent/instrumentation/tilt.rb +0 -4
  100. data/lib/new_relic/agent/instrumentation/typhoeus.rb +0 -1
  101. data/lib/new_relic/agent/instrumentation/view_component/instrumentation.rb +13 -6
  102. data/lib/new_relic/agent/instrumentation/view_component.rb +0 -2
  103. data/lib/new_relic/agent/javascript_instrumentor.rb +2 -3
  104. data/lib/new_relic/agent/llm/chat_completion_message.rb +25 -0
  105. data/lib/new_relic/agent/llm/chat_completion_summary.rb +66 -0
  106. data/lib/new_relic/agent/llm/embedding.rb +60 -0
  107. data/lib/new_relic/agent/llm/llm_event.rb +95 -0
  108. data/lib/new_relic/agent/llm/response_headers.rb +80 -0
  109. data/lib/new_relic/agent/llm.rb +49 -0
  110. data/lib/new_relic/agent/local_log_decorator.rb +8 -1
  111. data/lib/new_relic/agent/log_event_aggregator.rb +120 -44
  112. data/lib/new_relic/agent/messaging.rb +11 -5
  113. data/lib/new_relic/agent/new_relic_service.rb +12 -2
  114. data/lib/new_relic/agent/serverless_handler.rb +400 -0
  115. data/lib/new_relic/agent/serverless_handler_event_sources.json +155 -0
  116. data/lib/new_relic/agent/serverless_handler_event_sources.rb +49 -0
  117. data/lib/new_relic/agent/span_event_primitive.rb +8 -10
  118. data/lib/new_relic/agent/system_info.rb +14 -0
  119. data/lib/new_relic/agent/threading/agent_thread.rb +1 -2
  120. data/lib/new_relic/agent/tracer.rb +5 -5
  121. data/lib/new_relic/agent/transaction/abstract_segment.rb +1 -1
  122. data/lib/new_relic/agent/transaction/external_request_segment.rb +0 -10
  123. data/lib/new_relic/agent/transaction/request_attributes.rb +13 -1
  124. data/lib/new_relic/agent/transaction/trace_context.rb +1 -1
  125. data/lib/new_relic/agent/transaction/tracing.rb +2 -2
  126. data/lib/new_relic/agent/transaction.rb +2 -6
  127. data/lib/new_relic/agent/transaction_error_primitive.rb +23 -19
  128. data/lib/new_relic/agent.rb +198 -10
  129. data/lib/new_relic/constants.rb +2 -0
  130. data/lib/new_relic/control/frameworks/grape.rb +14 -0
  131. data/lib/new_relic/control/frameworks/padrino.rb +14 -0
  132. data/lib/new_relic/control/frameworks/rails4.rb +1 -3
  133. data/lib/new_relic/control/instance_methods.rb +8 -0
  134. data/lib/new_relic/control/private_instance_methods.rb +4 -0
  135. data/lib/new_relic/control/security_interface.rb +57 -0
  136. data/lib/new_relic/control.rb +1 -1
  137. data/lib/new_relic/dependency_detection.rb +10 -5
  138. data/lib/new_relic/environment_report.rb +2 -2
  139. data/lib/new_relic/helper.rb +15 -0
  140. data/lib/new_relic/language_support.rb +3 -1
  141. data/lib/new_relic/local_environment.rb +14 -10
  142. data/lib/new_relic/rack/browser_monitoring.rb +28 -12
  143. data/lib/new_relic/supportability_helper.rb +2 -0
  144. data/lib/new_relic/thread_local_storage.rb +31 -0
  145. data/lib/new_relic/version.rb +2 -2
  146. data/lib/sequel/extensions/new_relic_instrumentation.rb +3 -2
  147. data/lib/tasks/config.rake +8 -3
  148. data/lib/tasks/gha.rake +31 -0
  149. data/lib/tasks/helpers/config.html.erb +3 -2
  150. data/lib/tasks/helpers/format.rb +1 -1
  151. data/lib/tasks/helpers/newrelicyml.rb +76 -13
  152. data/lib/tasks/instrumentation_generator/instrumentation.thor +31 -22
  153. data/lib/tasks/instrumentation_generator/templates/chain.tt +0 -1
  154. data/lib/tasks/instrumentation_generator/templates/chain_method.tt +0 -1
  155. data/lib/tasks/instrumentation_generator/templates/dependency_detection.tt +11 -8
  156. data/lib/tasks/instrumentation_generator/templates/newrelic.yml.tt +1 -1
  157. data/newrelic.yml +387 -143
  158. data/newrelic_rpm.gemspec +2 -0
  159. data/test/agent_helper.rb +17 -2
  160. metadata +80 -3
@@ -35,6 +35,15 @@ module NewRelic
35
35
  end
36
36
 
37
37
  class DefaultSource
38
+ BOOLEAN_MAP = {
39
+ 'true' => true,
40
+ 'yes' => true,
41
+ 'on' => true,
42
+ 'false' => false,
43
+ 'no' => false,
44
+ 'off' => false
45
+ }.freeze
46
+
38
47
  attr_reader :defaults
39
48
 
40
49
  extend Forwardable
@@ -52,12 +61,33 @@ module NewRelic
52
61
  result
53
62
  end
54
63
 
64
+ def self.default_settings(key)
65
+ ::NewRelic::Agent::Configuration::DEFAULTS[key]
66
+ end
67
+
68
+ def self.value_from_defaults(key, subkey)
69
+ default_settings(key)&.send(:[], subkey)
70
+ end
71
+
72
+ def self.allowlist_for(key)
73
+ value_from_defaults(key, :allowlist)
74
+ end
75
+
76
+ def self.boolean_for(key, value)
77
+ string_value = (value.respond_to?(:call) ? value.call : value).to_s
78
+
79
+ BOOLEAN_MAP.fetch(string_value, nil)
80
+ end
81
+
82
+ def self.default_for(key)
83
+ value_from_defaults(key, :default)
84
+ end
85
+
55
86
  def self.transform_for(key)
56
- default_settings = ::NewRelic::Agent::Configuration::DEFAULTS[key]
57
- default_settings[:transform] if default_settings
87
+ value_from_defaults(key, :transform)
58
88
  end
59
89
 
60
- def self.config_search_paths # rubocop:disable Metrics/AbcSize
90
+ def self.config_search_paths
61
91
  proc {
62
92
  yaml = 'newrelic.yml'
63
93
  config_yaml = File.join('config', yaml)
@@ -115,8 +145,10 @@ module NewRelic
115
145
  ::NewRelic::Agent.logger.warn("Detected untested Rails version #{Rails::VERSION::STRING}")
116
146
  :rails_notifications
117
147
  end
148
+ when defined?(::Padrino) && defined?(::Padrino::PathRouter::Router) then :padrino
118
149
  when defined?(::Sinatra) && defined?(::Sinatra::Base) then :sinatra
119
150
  when defined?(::Roda) then :roda
151
+ when defined?(::Grape) then :grape
120
152
  when defined?(::NewRelic::IA) then :external
121
153
  else :ruby
122
154
  end
@@ -360,6 +392,28 @@ module NewRelic
360
392
  - a.third.event
361
393
  DESCRIPTION
362
394
  },
395
+ :'ai_monitoring.enabled' => {
396
+ :default => false,
397
+ :public => true,
398
+ :type => Boolean,
399
+ :allowed_from_server => false,
400
+ :description => 'If `false`, all LLM instrumentation (OpenAI only for now) will be disabled and no metrics, events, or spans will be sent. AI Monitoring is automatically disabled if `high_security` mode is enabled.'
401
+ },
402
+ :'ai_monitoring.record_content.enabled' => {
403
+ :default => true,
404
+ :public => true,
405
+ :type => Boolean,
406
+ :allowed_from_server => false,
407
+ :description => <<~DESCRIPTION
408
+ If `false`, LLM instrumentation (OpenAI only for now) will not capture input and output content on specific LLM events.
409
+
410
+ The excluded attributes include:
411
+ * `content` from LlmChatCompletionMessage events
412
+ * `input` from LlmEmbedding events
413
+
414
+ This is an optional security setting to prevent recording sensitive data sent to and received from your LLMs.
415
+ DESCRIPTION
416
+ },
363
417
  # this is only set via server side config
364
418
  :apdex_t => {
365
419
  :default => 0.5,
@@ -373,6 +427,7 @@ module NewRelic
373
427
  :public => true,
374
428
  :type => String,
375
429
  :allowed_from_server => false,
430
+ :exclude_from_reported_settings => true,
376
431
  :description => 'Your New Relic <InlinePopover type="userKey" />. Required when using the New Relic REST API v2 to record deployments using the `newrelic deployments` command.'
377
432
  },
378
433
  :backport_fast_active_record_connection_lookup => {
@@ -388,7 +443,7 @@ module NewRelic
388
443
  :public => true,
389
444
  :type => String,
390
445
  :allowed_from_server => false,
391
- :description => "Manual override for the path to your local CA bundle. This CA bundle will be used to validate the SSL certificate presented by New Relic's data collection service."
446
+ :description => "Manual override for the path to your local CA bundle. This CA bundle validates the SSL certificate presented by New Relic's data collection service."
392
447
  },
393
448
  :capture_memcache_keys => {
394
449
  :default => false,
@@ -417,6 +472,14 @@ module NewRelic
417
472
  :allowed_from_server => false,
418
473
  :description => 'If `true`, the agent will clear `Tracer::State` in `Agent.drop_buffered_data`.'
419
474
  },
475
+ :'cloud.aws.account_id' => {
476
+ :default => nil,
477
+ :public => true,
478
+ :type => String,
479
+ :allow_nil => true,
480
+ :allowed_from_server => false,
481
+ :description => 'The AWS account ID for the AWS account associated with this app'
482
+ },
420
483
  :config_path => {
421
484
  :default => DefaultSource.config_path,
422
485
  :public => true,
@@ -442,12 +505,14 @@ module NewRelic
442
505
  :public => true,
443
506
  :type => Boolean,
444
507
  :allowed_from_server => false,
445
- :description => 'Forces the exit handler that sends all cached data to collector ' \
446
- 'before shutting down to be installed regardless of detecting scenarios where it generally should not be. ' \
447
- 'Known use-case for this option is where Sinatra is running as an embedded service within another framework ' \
448
- 'and the agent is detecting the Sinatra app and skipping the `at_exit` handler as a result. Sinatra classically ' \
449
- 'runs the entire application in an `at_exit` block and would otherwise misbehave if the agent\'s `at_exit` handler ' \
450
- 'was also installed in those circumstances. Note: `send_data_on_exit` should also be set to `true` in tandem with this setting.'
508
+ :description => <<~DESC
509
+ The exit handler that sends all cached data to the collector before shutting down is forcibly installed. \
510
+ This is true even when it detects scenarios where it generally should not be. The known use case for this \
511
+ option is when Sinatra runs as an embedded service within another framework. The agent detects the Sinatra \
512
+ app and skips the `at_exit` handler as a result. Sinatra classically runs the entire application in an \
513
+ `at_exit` block and would otherwise misbehave if the agent's `at_exit` handler was also installed in those \
514
+ circumstances. Note: `send_data_on_exit` should also be set to `true` in tandem with this setting.
515
+ DESC
451
516
  },
452
517
  :high_security => {
453
518
  :default => false,
@@ -554,6 +619,13 @@ module NewRelic
554
619
  :allowed_from_server => false,
555
620
  :description => 'When set to `true`, forces a synchronous connection to the New Relic [collector](/docs/using-new-relic/welcome-new-relic/get-started/glossary/#collector) during application startup. For very short-lived processes, this helps ensure the New Relic agent has time to report.'
556
621
  },
622
+ :thread_local_tracer_state => {
623
+ :default => false,
624
+ :public => true,
625
+ :type => Boolean,
626
+ :allowed_from_server => false,
627
+ :description => 'If `true`, tracer state storage is thread-local, otherwise, fiber-local'
628
+ },
557
629
  :timeout => {
558
630
  :default => 2 * 60, # 2 minutes
559
631
  :public => true,
@@ -574,7 +646,7 @@ module NewRelic
574
646
  :public => true,
575
647
  :type => Boolean,
576
648
  :allowed_from_server => true,
577
- :description => 'If `true`, enables the collection of explain plans in transaction traces. This setting will also apply to explain plans in slow SQL traces if [`slow_sql.explain_enabled`](#slow_sql-explain_enabled) is not set separately.'
649
+ :description => "If `true`, enables the collection of explain plans in transaction traces. This setting will also apply to explain plans in slow SQL traces if [`slow_sql.explain_enabled`](#slow_sql-explain_enabled) isn't set separately."
578
650
  },
579
651
  :'transaction_tracer.explain_threshold' => {
580
652
  :default => 0.5,
@@ -720,7 +792,7 @@ module NewRelic
720
792
  :public => true,
721
793
  :type => Integer,
722
794
  :allowed_from_server => false,
723
- :description => 'Defines the maximum number of frames in an error backtrace. Backtraces over this amount are truncated at the beginning and end.'
795
+ :description => 'Defines the maximum number of frames in an error backtrace. Backtraces over this amount are truncated in the middle, preserving the beginning and the end of the stack trace.'
724
796
  },
725
797
  :'error_collector.max_event_samples_stored' => {
726
798
  :default => 100,
@@ -738,6 +810,15 @@ module NewRelic
738
810
  :allowed_from_server => true,
739
811
  :description => 'If `true`, enables [auto-injection](/docs/browser/new-relic-browser/installation-configuration/adding-apps-new-relic-browser#select-apm-app) of the JavaScript header for page load timing (sometimes referred to as real user monitoring or RUM).'
740
812
  },
813
+ # CSP nonce
814
+ :'browser_monitoring.content_security_policy_nonce' => {
815
+ :default => value_of(:'rum.enabled'),
816
+ :documentation_default => true,
817
+ :public => true,
818
+ :type => Boolean,
819
+ :allowed_from_server => false,
820
+ :description => 'If `true`, enables auto-injection of [Content Security Policy Nonce](https://content-security-policy.com/nonce/) in browser monitoring scripts. For now, auto-injection only works with Rails 5.2+.'
821
+ },
741
822
  # Transaction events
742
823
  :'transaction_events.enabled' => {
743
824
  :default => true,
@@ -773,6 +854,7 @@ module NewRelic
773
854
  :public => true,
774
855
  :type => String,
775
856
  :allowed_from_server => false,
857
+ :allowlist => %w[debug info warn error fatal unknown DEBUG INFO WARN ERROR FATAL UNKNOWN],
776
858
  :description => <<~DESCRIPTION
777
859
  Sets the minimum level a log event must have to be forwarded to New Relic.
778
860
 
@@ -799,6 +881,21 @@ module NewRelic
799
881
  :allowed_from_server => false,
800
882
  :description => 'A hash with key/value pairs to add as custom attributes to all log events forwarded to New Relic. If sending using an environment variable, the value must be formatted like: "key1=value1,key2=value2"'
801
883
  },
884
+ :'application_logging.forwarding.labels.enabled' => {
885
+ :default => false,
886
+ :public => true,
887
+ :type => Boolean,
888
+ :allowed_from_server => false,
889
+ :description => 'If `true`, the agent attaches [labels](https://docs.newrelic.com/docs/apm/agents/ruby-agent/configuration/ruby-agent-configuration/#labels) to log records.'
890
+ },
891
+ :'application_logging.forwarding.labels.exclude' => {
892
+ :default => [],
893
+ :public => true,
894
+ :type => Array,
895
+ :transform => DefaultSource.method(:convert_to_list),
896
+ :allowed_from_server => false,
897
+ :description => 'A case-insensitive array or comma-delimited string containing the labels to exclude from log records.'
898
+ },
802
899
  :'application_logging.forwarding.max_samples_stored' => {
803
900
  :default => 10000,
804
901
  :public => true,
@@ -1027,6 +1124,7 @@ module NewRelic
1027
1124
  Rails::Command::InitializersCommand
1028
1125
  Rails::Command::NotesCommand
1029
1126
  Rails::Command::RoutesCommand
1127
+ Rails::Command::RunnerCommand
1030
1128
  Rails::Command::SecretsCommand
1031
1129
  Rails::Console
1032
1130
  Rails::DBConsole].join(','),
@@ -1055,7 +1153,7 @@ module NewRelic
1055
1153
  :public => true,
1056
1154
  :type => Boolean,
1057
1155
  :allowed_from_server => true,
1058
- :description => "If `true`, the agent will report source code level metrics for traced methods.\nsee: " \
1156
+ :description => "If `true`, the agent will report source code level metrics for traced methods.\nSee: " \
1059
1157
  'https://docs.newrelic.com/docs/apm/agents/ruby-agent/features/ruby-codestream-integration/'
1060
1158
  },
1061
1159
  # Cross application tracer
@@ -1078,6 +1176,56 @@ module NewRelic
1078
1176
  :allowed_from_server => false,
1079
1177
  :description => 'If `false`, custom attributes will not be sent on events.'
1080
1178
  },
1179
+ :automatic_custom_instrumentation_method_list => {
1180
+ :default => NewRelic::EMPTY_ARRAY,
1181
+ :public => true,
1182
+ :type => Array,
1183
+ :allowed_from_server => false,
1184
+ :transform => proc { |arr| NewRelic::Agent.add_automatic_method_tracers(arr) },
1185
+ :description => <<~DESCRIPTION
1186
+ An array of `CLASS#METHOD` (for instance methods) and/or `CLASS.METHOD` (for class methods) strings representing Ruby methods that the agent can automatically add custom instrumentation to. This doesn't require any modifications of the source code that defines the methods.
1187
+
1188
+ Use fully qualified class names (using the `::` delimiter) that include any module or class namespacing.
1189
+
1190
+ Here is some Ruby source code that defines a `render_png` instance method for an `Image` class and a `notify` class method for a `User` class, both within a `MyCompany` module namespace:
1191
+
1192
+ ```rb
1193
+ module MyCompany
1194
+ class Image
1195
+ def render_png
1196
+ # code to render a PNG
1197
+ end
1198
+ end
1199
+
1200
+ class User
1201
+ def self.notify
1202
+ # code to notify users
1203
+ end
1204
+ end
1205
+ end
1206
+ ```
1207
+
1208
+ Given that source code, the `newrelic.yml` config file might request instrumentation for both of these methods like so:
1209
+
1210
+ ```yaml
1211
+ automatic_custom_instrumentation_method_list:
1212
+ - MyCompany::Image#render_png
1213
+ - MyCompany::User.notify
1214
+ ```
1215
+
1216
+ That configuration example uses YAML array syntax to specify both methods. Alternatively, you can use a comma-delimited string:
1217
+
1218
+ ```yaml
1219
+ automatic_custom_instrumentation_method_list: 'MyCompany::Image#render_png, MyCompany::User.notify'
1220
+ ```
1221
+
1222
+ Whitespace around the comma(s) in the list is optional. When configuring the agent with a list of methods via the `NEW_RELIC_AUTOMATIC_CUSTOM_INSTRUMENTATION_METHOD_LIST` environment variable, use this comma-delimited string format:
1223
+
1224
+ ```sh
1225
+ export NEW_RELIC_AUTOMATIC_CUSTOM_INSTRUMENTATION_METHOD_LIST='MyCompany::Image#render_png, MyCompany::User.notify'
1226
+ ```
1227
+ DESCRIPTION
1228
+ },
1081
1229
  # Custom events
1082
1230
  :'custom_insights_events.enabled' => {
1083
1231
  :default => true,
@@ -1091,8 +1239,13 @@ module NewRelic
1091
1239
  :public => true,
1092
1240
  :type => Integer,
1093
1241
  :allowed_from_server => true,
1094
- :description => 'Specify a maximum number of custom events to buffer in memory at a time.',
1095
- :dynamic_name => true
1242
+ :dynamic_name => true,
1243
+ # Keep the extra two-space indent before the second bullet to appease translation tool
1244
+ :description => <<~DESC
1245
+ * Specify a maximum number of custom events to buffer in memory at a time.
1246
+ * When configuring the agent for [AI monitoring](/docs/ai-monitoring/intro-to-ai-monitoring), \
1247
+ set to max value `100000`. This ensures the agent captures the maximum amount of LLM events.
1248
+ DESC
1096
1249
  },
1097
1250
  # Datastore tracer
1098
1251
  :'datastore_tracer.database_name_reporting.enabled' => {
@@ -1383,6 +1536,7 @@ module NewRelic
1383
1536
  },
1384
1537
  :'instrumentation.async_http' => {
1385
1538
  :default => 'auto',
1539
+ :documentation_default => 'auto',
1386
1540
  :public => true,
1387
1541
  :type => String,
1388
1542
  :dynamic_name => true,
@@ -1391,14 +1545,67 @@ module NewRelic
1391
1545
  },
1392
1546
  :'instrumentation.bunny' => {
1393
1547
  :default => 'auto',
1548
+ :documentation_default => 'auto',
1394
1549
  :public => true,
1395
1550
  :type => String,
1396
1551
  :dynamic_name => true,
1397
1552
  :allowed_from_server => false,
1398
1553
  :description => 'Controls auto-instrumentation of bunny at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1399
1554
  },
1555
+ :'instrumentation.aws_sdk_lambda' => {
1556
+ :default => 'auto',
1557
+ :documentation_default => 'auto',
1558
+ :public => true,
1559
+ :type => String,
1560
+ :dynamic_name => true,
1561
+ :allowed_from_server => false,
1562
+ :description => 'Controls auto-instrumentation of the aws_sdk_lambda library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1563
+ },
1564
+ :'instrumentation.ruby_kafka' => {
1565
+ :default => 'auto',
1566
+ :public => true,
1567
+ :type => String,
1568
+ :dynamic_name => true,
1569
+ :allowed_from_server => false,
1570
+ :description => 'Controls auto-instrumentation of the ruby-kafka library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1571
+ },
1572
+ :'instrumentation.opensearch' => {
1573
+ :default => 'auto',
1574
+ :documentation_default => 'auto',
1575
+ :public => true,
1576
+ :type => String,
1577
+ :dynamic_name => true,
1578
+ :allowed_from_server => false,
1579
+ :description => 'Controls auto-instrumentation of the opensearch-ruby library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1580
+ },
1581
+ :'instrumentation.rdkafka' => {
1582
+ :default => 'auto',
1583
+ :public => true,
1584
+ :type => String,
1585
+ :dynamic_name => true,
1586
+ :allowed_from_server => false,
1587
+ :description => 'Controls auto-instrumentation of the rdkafka library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1588
+ },
1589
+ :'instrumentation.aws_sqs' => {
1590
+ :default => 'auto',
1591
+ :public => true,
1592
+ :type => String,
1593
+ :dynamic_name => true,
1594
+ :allowed_from_server => false,
1595
+ :description => 'Controls auto-instrumentation of the aws-sdk-sqs library at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1596
+ },
1597
+ :'instrumentation.dynamodb' => {
1598
+ :default => 'auto',
1599
+ :documentation_default => 'auto',
1600
+ :public => true,
1601
+ :type => String,
1602
+ :dynamic_name => true,
1603
+ :allowed_from_server => false,
1604
+ :description => 'Controls auto-instrumentation of the aws-sdk-dynamodb library at start-up. May be one of `auto`, `prepend`, `chain`, `disabled`.'
1605
+ },
1400
1606
  :'instrumentation.fiber' => {
1401
1607
  :default => 'auto',
1608
+ :documentation_default => 'auto',
1402
1609
  :public => true,
1403
1610
  :type => String,
1404
1611
  :dynamic_name => true,
@@ -1407,6 +1614,7 @@ module NewRelic
1407
1614
  },
1408
1615
  :'instrumentation.concurrent_ruby' => {
1409
1616
  :default => 'auto',
1617
+ :documentation_default => 'auto',
1410
1618
  :public => true,
1411
1619
  :type => String,
1412
1620
  :dynamic_name => true,
@@ -1433,6 +1641,7 @@ module NewRelic
1433
1641
  },
1434
1642
  :'instrumentation.elasticsearch' => {
1435
1643
  :default => 'auto',
1644
+ :documentation_default => 'auto',
1436
1645
  :public => true,
1437
1646
  :type => String,
1438
1647
  :dynamic_name => true,
@@ -1441,11 +1650,12 @@ module NewRelic
1441
1650
  },
1442
1651
  :'instrumentation.ethon' => {
1443
1652
  :default => 'auto',
1653
+ :documentation_default => 'auto',
1444
1654
  :public => true,
1445
1655
  :type => String,
1446
1656
  :dynamic_name => true,
1447
1657
  :allowed_from_server => false,
1448
- :description => 'Controls auto-instrumentation of ethon at start up. May be one of [auto|prepend|chain|disabled]'
1658
+ :description => 'Controls auto-instrumentation of ethon at start up. May be one of `auto`, `prepend`, `chain`, `disabled`'
1449
1659
  },
1450
1660
  :'instrumentation.excon' => {
1451
1661
  :default => 'enabled',
@@ -1458,6 +1668,7 @@ module NewRelic
1458
1668
  },
1459
1669
  :'instrumentation.grape' => {
1460
1670
  :default => 'auto',
1671
+ :documentation_default => 'auto',
1461
1672
  :public => true,
1462
1673
  :type => String,
1463
1674
  :dynamic_name => true,
@@ -1515,7 +1726,7 @@ module NewRelic
1515
1726
  :type => String,
1516
1727
  :dynamic_name => true,
1517
1728
  :allowed_from_server => false,
1518
- :description => 'Controls auto-instrumentation of httpx at start up. May be one of [auto|prepend|chain|disabled]'
1729
+ :description => 'Controls auto-instrumentation of httpx at start up. May be one of `auto`, `prepend`, `chain`, `disabled`'
1519
1730
  },
1520
1731
  :'instrumentation.logger' => {
1521
1732
  :default => instrumentation_value_from_boolean(:'application_logging.enabled'),
@@ -1526,8 +1737,18 @@ module NewRelic
1526
1737
  :allowed_from_server => false,
1527
1738
  :description => 'Controls auto-instrumentation of Ruby standard library Logger at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1528
1739
  },
1740
+ :'instrumentation.logstasher' => {
1741
+ :default => instrumentation_value_from_boolean(:'application_logging.enabled'),
1742
+ :documentation_default => 'auto',
1743
+ :public => true,
1744
+ :type => String,
1745
+ :dynamic_name => true,
1746
+ :allowed_from_server => false,
1747
+ :description => 'Controls auto-instrumentation of the LogStasher library at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1748
+ },
1529
1749
  :'instrumentation.memcache' => {
1530
1750
  :default => 'auto',
1751
+ :documentation_default => 'auto',
1531
1752
  :public => true,
1532
1753
  :type => String,
1533
1754
  :dynamic_name => true,
@@ -1570,6 +1791,15 @@ module NewRelic
1570
1791
  :allowed_from_server => false,
1571
1792
  :description => 'Controls auto-instrumentation of `Net::HTTP` at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
1572
1793
  },
1794
+ :'instrumentation.ruby_openai' => {
1795
+ :default => 'auto',
1796
+ :documentation_default => 'auto',
1797
+ :public => true,
1798
+ :type => String,
1799
+ :dynamic_name => true,
1800
+ :allowed_from_server => false,
1801
+ :description => 'Controls auto-instrumentation of the ruby-openai gem at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`. Defaults to `disabled` in high security mode.'
1802
+ },
1573
1803
  :'instrumentation.puma_rack' => {
1574
1804
  :default => value_of(:'instrumentation.rack'),
1575
1805
  :documentation_default => 'auto',
@@ -1612,6 +1842,7 @@ module NewRelic
1612
1842
  },
1613
1843
  :'instrumentation.rake' => {
1614
1844
  :default => 'auto',
1845
+ :documentation_default => 'auto',
1615
1846
  :public => true,
1616
1847
  :type => String,
1617
1848
  :dynamic_name => true,
@@ -1620,6 +1851,7 @@ module NewRelic
1620
1851
  },
1621
1852
  :'instrumentation.redis' => {
1622
1853
  :default => 'auto',
1854
+ :documentation_default => 'auto',
1623
1855
  :public => true,
1624
1856
  :type => String,
1625
1857
  :dynamic_name => true,
@@ -1637,6 +1869,7 @@ module NewRelic
1637
1869
  },
1638
1870
  :'instrumentation.roda' => {
1639
1871
  :default => 'auto',
1872
+ :documentation_default => 'auto',
1640
1873
  :public => true,
1641
1874
  :type => String,
1642
1875
  :dynamic_name => true,
@@ -1645,6 +1878,7 @@ module NewRelic
1645
1878
  },
1646
1879
  :'instrumentation.sinatra' => {
1647
1880
  :default => 'auto',
1881
+ :documentation_default => 'auto',
1648
1882
  :public => true,
1649
1883
  :type => String,
1650
1884
  :dynamic_name => true,
@@ -1660,6 +1894,7 @@ module NewRelic
1660
1894
  },
1661
1895
  :'instrumentation.view_component' => {
1662
1896
  :default => 'auto',
1897
+ :documentation_default => 'auto',
1663
1898
  :public => true,
1664
1899
  :type => String,
1665
1900
  :dynamic_name => true,
@@ -1676,7 +1911,7 @@ module NewRelic
1676
1911
  :description => <<~DESCRIPTION
1677
1912
  An array of strings to specify which keys inside a Stripe event's `user_data` hash should be reported
1678
1913
  to New Relic. Each string in this array will be turned into a regular expression via `Regexp.new` to
1679
- permit advanced matching. Setting the value to `["."]` will report all `user_data`.
1914
+ enable advanced matching. Setting the value to `["."]` will report all `user_data`.
1680
1915
  DESCRIPTION
1681
1916
  },
1682
1917
  :'stripe.user_data.exclude' => {
@@ -1689,13 +1924,14 @@ module NewRelic
1689
1924
  :description => <<~DESCRIPTION
1690
1925
  An array of strings to specify which keys and/or values inside a Stripe event's `user_data` hash should
1691
1926
  not be reported to New Relic. Each string in this array will be turned into a regular expression via
1692
- `Regexp.new` to permit advanced matching. For each hash pair, if either the key or value is matched the
1693
- pair will not be reported. By default, no `user_data` is reported, so this option should only be used if
1694
- the `stripe.user_data.include` option is being used.
1927
+ `Regexp.new` to permit advanced matching. For each hash pair, if either the key or value is matched the pair
1928
+ isn't reported. By default, no `user_data` is reported. Use this option only if the
1929
+ `stripe.user_data.include` option is also used.
1695
1930
  DESCRIPTION
1696
1931
  },
1697
1932
  :'instrumentation.thread' => {
1698
1933
  :default => 'auto',
1934
+ :documentation_default => 'auto',
1699
1935
  :public => true,
1700
1936
  :type => String,
1701
1937
  :dynamic_name => true,
@@ -1718,6 +1954,7 @@ module NewRelic
1718
1954
  },
1719
1955
  :'instrumentation.tilt' => {
1720
1956
  :default => 'auto',
1957
+ :documentation_default => 'auto',
1721
1958
  :public => true,
1722
1959
  :type => String,
1723
1960
  :dynamic_name => true,
@@ -1756,6 +1993,21 @@ module NewRelic
1756
1993
  :allowed_from_server => true,
1757
1994
  :description => 'If `true`, the agent obfuscates Mongo queries in transaction traces.'
1758
1995
  },
1996
+ # OpenSearch
1997
+ :'opensearch.capture_queries' => {
1998
+ :default => true,
1999
+ :public => true,
2000
+ :type => Boolean,
2001
+ :allowed_from_server => true,
2002
+ :description => 'If `true`, the agent captures OpenSearch queries in transaction traces.'
2003
+ },
2004
+ :'opensearch.obfuscate_queries' => {
2005
+ :default => true,
2006
+ :public => true,
2007
+ :type => Boolean,
2008
+ :allowed_from_server => true,
2009
+ :description => 'If `true`, the agent obfuscates OpenSearch queries in transaction traces.'
2010
+ },
1759
2011
  # Process host
1760
2012
  :'process_host.display_name' => {
1761
2013
  :default => proc { NewRelic::Agent::Hostname.get },
@@ -1808,6 +2060,17 @@ module NewRelic
1808
2060
  :transform => DefaultSource.method(:convert_to_regexp_list),
1809
2061
  :description => 'Define transactions you want the agent to ignore, by specifying a list of patterns matching the URI you want to ignore. For more detail, see [the docs on ignoring specific transactions](/docs/agents/ruby-agent/api-guides/ignoring-specific-transactions/#config-ignoring).'
1810
2062
  },
2063
+ # Serverless
2064
+ :'serverless_mode.enabled' => {
2065
+ :default => false,
2066
+ :public => true,
2067
+ :type => Boolean,
2068
+ :allowed_from_server => false,
2069
+ :transform => proc { |bool| NewRelic::Agent::ServerlessHandler.env_var_set? || bool },
2070
+ :description => 'If `true`, the agent will operate in a streamlined mode suitable for use with short-lived ' \
2071
+ 'serverless functions. NOTE: Only AWS Lambda functions are supported currently and this ' \
2072
+ "option isn't intended for use without [New Relic's Ruby Lambda layer](https://docs.newrelic.com/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/monitoring-aws-lambda-serverless-monitoring/) offering."
2073
+ },
1811
2074
  # Sidekiq
1812
2075
  :'sidekiq.args.include' => {
1813
2076
  default: NewRelic::EMPTY_ARRAY,
@@ -1900,7 +2163,12 @@ module NewRelic
1900
2163
  :public => true,
1901
2164
  :type => Integer,
1902
2165
  :allowed_from_server => true,
1903
- :description => 'Defines the maximum number of span events reported from a single harvest. Any Integer between `1` and `10000` is valid.'
2166
+ # Keep the extra two-space indent before the second bullet to appease translation tool
2167
+ :description => <<~DESC
2168
+ * Defines the maximum number of span events reported from a single harvest. Any Integer between `1` and `10000` is valid.'
2169
+ * When configuring the agent for [AI monitoring](/docs/ai-monitoring/intro-to-ai-monitoring), set to max value `10000`.\
2170
+ This ensures the agent captures the maximum amount of distributed traces.
2171
+ DESC
1904
2172
  },
1905
2173
  # Strip exception messages
1906
2174
  :'strip_exception_messages.enabled' => {
@@ -2048,7 +2316,7 @@ module NewRelic
2048
2316
  :description => 'Enable or disable debugging version of JavaScript agent loader for browser monitoring instrumentation.'
2049
2317
  },
2050
2318
  :'browser_monitoring.ssl_for_http' => {
2051
- :default => nil,
2319
+ :default => false,
2052
2320
  :allow_nil => true,
2053
2321
  :public => false,
2054
2322
  :type => Boolean,
@@ -2216,6 +2484,7 @@ module NewRelic
2216
2484
  :public => true,
2217
2485
  :type => Symbol,
2218
2486
  :allowed_from_server => false,
2487
+ :allowlist => %i[none low medium high],
2219
2488
  :external => :infinite_tracing,
2220
2489
  :description => <<~DESC
2221
2490
  Configure the compression level for data sent to the trace observer.
@@ -2412,6 +2681,233 @@ module NewRelic
2412
2681
  :type => Integer,
2413
2682
  :allowed_from_server => false,
2414
2683
  :description => 'This value represents the total amount of memory available to the host (not the process), in mebibytes (1024 squared or 1,048,576 bytes).'
2684
+ },
2685
+ # security agent
2686
+ :'security.agent.enabled' => {
2687
+ :default => false,
2688
+ :external => true,
2689
+ :public => true,
2690
+ :type => Boolean,
2691
+ :allowed_from_server => false,
2692
+ :description => "If `true`, the security agent loads (the agent performs a Ruby 'require')"
2693
+ },
2694
+ :'security.enabled' => {
2695
+ :default => false,
2696
+ :external => true,
2697
+ :public => true,
2698
+ :type => Boolean,
2699
+ :allowed_from_server => false,
2700
+ :description => 'If `true`, the security agent is started (the agent runs in its event loop)'
2701
+ },
2702
+ :'security.mode' => {
2703
+ :default => 'IAST',
2704
+ :external => true,
2705
+ :public => true,
2706
+ :type => String,
2707
+ :allowed_from_server => true,
2708
+ :allowlist => %w[IAST RASP],
2709
+ :description => 'Defines the mode for the security agent to operate in. Currently only `IAST` is supported',
2710
+ :dynamic_name => true
2711
+ },
2712
+ :'security.validator_service_url' => {
2713
+ :default => 'wss://csec.nr-data.net',
2714
+ :external => true,
2715
+ :public => true,
2716
+ :type => String,
2717
+ :allowed_from_server => true,
2718
+ :description => 'Defines the endpoint URL for posting security-related data',
2719
+ :dynamic_name => true
2720
+ },
2721
+ :'security.application_info.port' => {
2722
+ :default => nil,
2723
+ :allow_nil => true,
2724
+ :public => true,
2725
+ :type => Integer,
2726
+ :external => true,
2727
+ :allowed_from_server => false,
2728
+ :description => 'The port the application is listening on. This setting is mandatory for Passenger servers. The agent detects other servers by default.'
2729
+ },
2730
+ :'security.exclude_from_iast_scan.api' => {
2731
+ :default => [],
2732
+ :public => true,
2733
+ :type => Array,
2734
+ :external => true,
2735
+ :allowed_from_server => true,
2736
+ :transform => DefaultSource.method(:convert_to_list),
2737
+ :description => 'Defines API paths the security agent should ignore in IAST scans. Accepts an array of regex patterns matching the URI to ignore. The regex pattern should find a complete match for the URL without the endpoint. For example, `[".*account.*"], [".*/\api\/v1\/.*?\/login"]`'
2738
+ },
2739
+ :'security.exclude_from_iast_scan.http_request_parameters.header' => {
2740
+ :default => [],
2741
+ :public => true,
2742
+ :type => Array,
2743
+ :external => true,
2744
+ :allowed_from_server => true,
2745
+ :transform => DefaultSource.method(:convert_to_list),
2746
+ :description => 'An array of HTTP request headers the security agent should ignore in IAST scans. The array should specify a list of patterns matching the headers to ignore.'
2747
+ },
2748
+ :'security.exclude_from_iast_scan.http_request_parameters.query' => {
2749
+ :default => [],
2750
+ :public => true,
2751
+ :type => Array,
2752
+ :external => true,
2753
+ :allowed_from_server => true,
2754
+ :transform => DefaultSource.method(:convert_to_list),
2755
+ :description => 'An array of HTTP request query parameters the security agent should ignore in IAST scans. The array should specify a list of patterns matching the HTTP request query parameters to ignore.'
2756
+ },
2757
+ :'security.exclude_from_iast_scan.http_request_parameters.body' => {
2758
+ :default => [],
2759
+ :public => true,
2760
+ :type => Array,
2761
+ :external => true,
2762
+ :allowed_from_server => true,
2763
+ :transform => DefaultSource.method(:convert_to_list),
2764
+ :description => 'An array of HTTP request body keys the security agent should ignore in IAST scans.'
2765
+ },
2766
+ :'security.exclude_from_iast_scan.iast_detection_category.insecure_settings' => {
2767
+ :default => false,
2768
+ :external => true,
2769
+ :public => true,
2770
+ :type => Boolean,
2771
+ :allowed_from_server => false,
2772
+ :description => 'If `true`, disables the detection of low-severity insecure settings. For example, hash, crypto, cookie, random generators, trust boundary).'
2773
+ },
2774
+ :'security.exclude_from_iast_scan.iast_detection_category.invalid_file_access' => {
2775
+ :default => false,
2776
+ :external => true,
2777
+ :public => true,
2778
+ :type => Boolean,
2779
+ :allowed_from_server => false,
2780
+ :description => 'If `true`, disables file operation-related IAST detections (File Access & Application integrity violation)'
2781
+ },
2782
+ :'security.exclude_from_iast_scan.iast_detection_category.sql_injection' => {
2783
+ :default => false,
2784
+ :external => true,
2785
+ :public => true,
2786
+ :type => Boolean,
2787
+ :allowed_from_server => false,
2788
+ :description => 'If `true`, disables SQL injection detection in IAST scans.'
2789
+ },
2790
+ :'security.exclude_from_iast_scan.iast_detection_category.nosql_injection' => {
2791
+ :default => false,
2792
+ :external => true,
2793
+ :public => true,
2794
+ :type => Boolean,
2795
+ :allowed_from_server => false,
2796
+ :description => 'If `true`, disables NOSQL injection detection in IAST scans.'
2797
+ },
2798
+ :'security.exclude_from_iast_scan.iast_detection_category.ldap_injection' => {
2799
+ :default => false,
2800
+ :external => true,
2801
+ :public => true,
2802
+ :type => Boolean,
2803
+ :allowed_from_server => false,
2804
+ :description => 'If `true`, disables LDAP injection detection in IAST scans.'
2805
+ },
2806
+ :'security.exclude_from_iast_scan.iast_detection_category.javascript_injection' => {
2807
+ :default => false,
2808
+ :external => true,
2809
+ :public => true,
2810
+ :type => Boolean,
2811
+ :allowed_from_server => false,
2812
+ :description => 'If `true`, disables Javascript injection detection in IAST scans.'
2813
+ },
2814
+ :'security.exclude_from_iast_scan.iast_detection_category.command_injection' => {
2815
+ :default => false,
2816
+ :external => true,
2817
+ :public => true,
2818
+ :type => Boolean,
2819
+ :allowed_from_server => false,
2820
+ :description => 'If `true`, disables system command injection detection in IAST scans.'
2821
+ },
2822
+ :'security.exclude_from_iast_scan.iast_detection_category.xpath_injection' => {
2823
+ :default => false,
2824
+ :external => true,
2825
+ :public => true,
2826
+ :type => Boolean,
2827
+ :allowed_from_server => false,
2828
+ :description => 'If `true`, disables XPATH injection detection in IAST scans.'
2829
+ },
2830
+ :'security.exclude_from_iast_scan.iast_detection_category.ssrf' => {
2831
+ :default => false,
2832
+ :external => true,
2833
+ :public => true,
2834
+ :type => Boolean,
2835
+ :allowed_from_server => false,
2836
+ :description => 'If `true`, disables Sever-Side Request Forgery (SSRF) detection in IAST scans.'
2837
+ },
2838
+ :'security.exclude_from_iast_scan.iast_detection_category.rxss' => {
2839
+ :default => false,
2840
+ :external => true,
2841
+ :public => true,
2842
+ :type => Boolean,
2843
+ :allowed_from_server => false,
2844
+ :description => 'If `true`, disables Reflected Cross-Site Scripting (RXSS) detection in IAST scans.'
2845
+ },
2846
+ :'security.scan_schedule.delay' => {
2847
+ :default => 0,
2848
+ :public => true,
2849
+ :type => Integer,
2850
+ :external => true,
2851
+ :allowed_from_server => true,
2852
+ :description => 'Specifies the delay time (in minutes) before the IAST scan begins after the application starts.'
2853
+ },
2854
+ :'security.scan_schedule.duration' => {
2855
+ :default => 0,
2856
+ :public => true,
2857
+ :type => Integer,
2858
+ :external => true,
2859
+ :allowed_from_server => true,
2860
+ :description => 'Indicates the duration (in minutes) for which the IAST scan will be performed.'
2861
+ },
2862
+ :'security.scan_schedule.schedule' => {
2863
+ :default => '',
2864
+ :public => true,
2865
+ :type => String,
2866
+ :external => true,
2867
+ :allowed_from_server => true,
2868
+ :description => 'Specifies a cron expression that sets when the IAST scan should run.',
2869
+ :dynamic_name => true
2870
+ },
2871
+ :'security.scan_schedule.always_sample_traces' => {
2872
+ :default => false,
2873
+ :external => true,
2874
+ :public => true,
2875
+ :type => Boolean,
2876
+ :allowed_from_server => false,
2877
+ :description => 'If `true`, allows IAST to continuously gather trace data in the background. The security agent uses collected data to perform an IAST scan at the scheduled time.'
2878
+ },
2879
+ :'security.scan_controllers.iast_scan_request_rate_limit' => {
2880
+ :default => 3600,
2881
+ :public => true,
2882
+ :type => Integer,
2883
+ :external => true,
2884
+ :allowed_from_server => true,
2885
+ :description => 'Sets the maximum number of HTTP requests allowed for the IAST scan per minute. Any Integer between 12 and 3600 is valid. The default value is 3600.'
2886
+ },
2887
+ :'security.scan_controllers.scan_instance_count' => {
2888
+ :default => 0,
2889
+ :public => true,
2890
+ :type => Integer,
2891
+ :external => true,
2892
+ :allowed_from_server => true,
2893
+ :description => 'The number of application instances for a specific entity to perform IAST analysis on.'
2894
+ },
2895
+ :'security.scan_controllers.report_http_response_body' => {
2896
+ :default => true,
2897
+ :public => true,
2898
+ :type => Boolean,
2899
+ :external => true,
2900
+ :allowed_from_server => true,
2901
+ :description => 'If `true`, enables the sending of HTTP responses bodies. Disabling this also disables Reflected Cross-Site Scripting (RXSS) vulnerability detection.'
2902
+ },
2903
+ :'security.iast_test_identifier' => {
2904
+ :default => nil,
2905
+ :allow_nil => true,
2906
+ :public => true,
2907
+ :type => String,
2908
+ :external => true,
2909
+ :allowed_from_server => true,
2910
+ :description => 'A unique test identifier when runnning IAST in a CI/CD environment to differentiate between different test runs. For example, a build number.'
2415
2911
  }
2416
2912
  }.freeze
2417
2913
  # rubocop:enable Metrics/CollectionLiteralLength