newrelic_rpm 9.15.0 → 9.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.build_ignore +1 -0
- data/CHANGELOG.md +23 -3
- data/lib/new_relic/agent/configuration/default_source.rb +199 -26
- data/lib/new_relic/agent/database.rb +36 -0
- data/lib/new_relic/agent/instrumentation/active_record.rb +1 -8
- data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +1 -12
- data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/chain.rb +33 -0
- data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/instrumentation.rb +94 -0
- data/lib/new_relic/agent/instrumentation/aws_sdk_lambda/prepend.rb +23 -0
- data/lib/new_relic/agent/instrumentation/aws_sdk_lambda.rb +23 -0
- data/lib/new_relic/agent/instrumentation/view_component/instrumentation.rb +5 -1
- data/lib/new_relic/agent/log_event_aggregator.rb +28 -2
- data/lib/new_relic/version.rb +1 -1
- data/newrelic.yml +110 -38
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23ad23d616fbcea334710ab3d67003e1775aedbadaecd7d50932c22543419ef4
|
4
|
+
data.tar.gz: f26ff6b168dc8975354fa1bf7f73f02400d01e2feca735f71b510f92978b3edf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4519cf295a06513f04810805b8428d0cebdbd8aa4731c4e831de0d873c014978396dee436a966c726866246a26b6ced9dcea5fd1bba2c839b6d69b66b00f51d7
|
7
|
+
data.tar.gz: 5e32b59dea295c346c88de6c0cc317d7d2d8981fbe7fed6d2d0d72a6cfb2bd6b2eb5ae006871603757e957e85fe0404b618d4e4cee7afae0189ffebb1770945f
|
data/.build_ignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,32 @@
|
|
1
1
|
# New Relic Ruby Agent Release Notes
|
2
2
|
|
3
|
+
## v9.16.0
|
4
|
+
|
5
|
+
Version 9.16.0 introduces instrumentation for the aws-sdk-lambda gem, allows users to opt-in to adding labels to logs, updates View Component instrumentation, and fixes a bug with explain plans on Rails 7.2+.
|
6
|
+
|
7
|
+
- **Feature: Instrumentation for aws-sdk-lambda**
|
8
|
+
|
9
|
+
If the aws-sdk-lambda gem is present and used to invoke remote AWS Lambda functions, timing and error details for the invocations will be reported to New Relic. [PR#2926](https://github.com/newrelic/newrelic-ruby-agent/pull/2926).
|
10
|
+
|
11
|
+
- **Feature: Add new configuration options to attach custom tags (labels) to logs**
|
12
|
+
|
13
|
+
The Ruby agent now allows you to opt-in to adding your custom tags (labels) to agent-forwarded logs. With custom tags on logs, platform engineers can easily filter, search, and correlate log data for faster and more efficient troubleshooting, improved performance, and optimized resource utilization. [PR#2925](https://github.com/newrelic/newrelic-ruby-agent/pull/2925)
|
14
|
+
|
15
|
+
- **Feature: Update View Component instrumentation+**
|
16
|
+
|
17
|
+
The `.identifier` method will be formally exposed as part of the View Component public API. The agent will now use this method for building metric names when available, ensuring ongoing compatibility with all View Component versions. [PR#2956](https://github.com/newrelic/newrelic-ruby-agent/pull/2956)
|
18
|
+
|
19
|
+
- **Bugfix: Record explain plan traces on Rails 7.2+**
|
20
|
+
|
21
|
+
Rails 7.2 removed adapter-specific connection methods (ex. `ActiveRecord::Base.postgresql_connection`) and replaced them with `ActiveRecord::Base.with_connection`. Our explain plan feature relies on making a connection to the database to create an explain plan trace. Due to a bug in our tests, we missed this regression. Now, the agent uses the new method to fetch explain plans on Rails 7.2+. Thank you, [@gsar](https://github.com/gsar) and [@gstark](https://github.com/gstark) for bringing this to our attention! [Issue#2922](https://github.com/newrelic/newrelic-ruby-agent/issues/2922) [PR#2940](https://github.com/newrelic/newrelic-ruby-agent/pull/2940)
|
22
|
+
|
3
23
|
## v9.15.0
|
4
24
|
|
5
|
-
Version 9.15.0 updates View
|
6
|
-
|
25
|
+
Version 9.15.0 updates View Component instrumentation to use a default metric name when one is unavailable, adds a configuration option to associate the AWS account ID with the DynamoDB calls from the AWS SDK, resolves a bug in rdkafka instrumentation when using the karafka-rdkafka gem, resolves a bug in the ruby-kafka instrumentation, fixes a bug with Grape instrumentation, and addresses a bug preventing the agent from running in serverless mode in an AWS Lambda layer.
|
26
|
+
|
7
27
|
- **Feature: New configuration option cloud.aws.account_id**
|
8
28
|
|
9
|
-
A new configuration option has been added, `cloud.aws.account_id`, that will allow New Relic to provide more details about certain calls made using the AWS SDK.
|
29
|
+
A new configuration option has been added, `cloud.aws.account_id`, that will allow New Relic to provide more details about certain calls made using the AWS SDK. For example, relationships between AWS services instrumented with New Relic's CloudWatch Metric Streams will have relationships formed in the service map with APM applications. Currently, the DynamoDB instrumentation is the only instrumentation that will make use of this configuration option, but this will be used in future instrumentation as well. [PR#2904](https://github.com/newrelic/newrelic-ruby-agent/pull/2904)
|
10
30
|
|
11
31
|
- **Feature: Use default `View/component` metric name for unidentified View Components**
|
12
32
|
|
@@ -443,7 +443,7 @@ module NewRelic
|
|
443
443
|
:public => true,
|
444
444
|
:type => String,
|
445
445
|
:allowed_from_server => false,
|
446
|
-
:description => "Manual override for the path to your local CA bundle. This CA bundle
|
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."
|
447
447
|
},
|
448
448
|
:capture_memcache_keys => {
|
449
449
|
:default => false,
|
@@ -881,6 +881,21 @@ module NewRelic
|
|
881
881
|
:allowed_from_server => false,
|
882
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"'
|
883
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
|
+
},
|
884
899
|
:'application_logging.forwarding.max_samples_stored' => {
|
885
900
|
:default => 10000,
|
886
901
|
:public => true,
|
@@ -1174,7 +1189,7 @@ module NewRelic
|
|
1174
1189
|
|
1175
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:
|
1176
1191
|
|
1177
|
-
```
|
1192
|
+
```rb
|
1178
1193
|
module MyCompany
|
1179
1194
|
class Image
|
1180
1195
|
def render_png
|
@@ -1192,7 +1207,7 @@ module NewRelic
|
|
1192
1207
|
|
1193
1208
|
Given that source code, the `newrelic.yml` config file might request instrumentation for both of these methods like so:
|
1194
1209
|
|
1195
|
-
```
|
1210
|
+
```yaml
|
1196
1211
|
automatic_custom_instrumentation_method_list:
|
1197
1212
|
- MyCompany::Image#render_png
|
1198
1213
|
- MyCompany::User.notify
|
@@ -1200,13 +1215,13 @@ module NewRelic
|
|
1200
1215
|
|
1201
1216
|
That configuration example uses YAML array syntax to specify both methods. Alternatively, you can use a comma-delimited string:
|
1202
1217
|
|
1203
|
-
```
|
1218
|
+
```yaml
|
1204
1219
|
automatic_custom_instrumentation_method_list: 'MyCompany::Image#render_png, MyCompany::User.notify'
|
1205
1220
|
```
|
1206
1221
|
|
1207
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:
|
1208
1223
|
|
1209
|
-
```
|
1224
|
+
```sh
|
1210
1225
|
export NEW_RELIC_AUTOMATIC_CUSTOM_INSTRUMENTATION_METHOD_LIST='MyCompany::Image#render_png, MyCompany::User.notify'
|
1211
1226
|
```
|
1212
1227
|
DESCRIPTION
|
@@ -1537,6 +1552,15 @@ module NewRelic
|
|
1537
1552
|
:allowed_from_server => false,
|
1538
1553
|
:description => 'Controls auto-instrumentation of bunny at start-up. May be one of: `auto`, `prepend`, `chain`, `disabled`.'
|
1539
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
|
+
},
|
1540
1564
|
:'instrumentation.ruby_kafka' => {
|
1541
1565
|
:default => 'auto',
|
1542
1566
|
:public => true,
|
@@ -1901,8 +1925,8 @@ module NewRelic
|
|
1901
1925
|
An array of strings to specify which keys and/or values inside a Stripe event's `user_data` hash should
|
1902
1926
|
not be reported to New Relic. Each string in this array will be turned into a regular expression via
|
1903
1927
|
`Regexp.new` to permit advanced matching. For each hash pair, if either the key or value is matched the
|
1904
|
-
pair will not be reported. By default, no `user_data` is reported
|
1905
|
-
|
1928
|
+
pair will not be reported. By default, no `user_data` is reported. Use this option only if the
|
1929
|
+
`stripe.user_data.include` option is also used.
|
1906
1930
|
DESCRIPTION
|
1907
1931
|
},
|
1908
1932
|
:'instrumentation.thread' => {
|
@@ -2665,7 +2689,7 @@ module NewRelic
|
|
2665
2689
|
:public => true,
|
2666
2690
|
:type => Boolean,
|
2667
2691
|
:allowed_from_server => false,
|
2668
|
-
:description => "If `true`, the security agent is loaded (a Ruby 'require'
|
2692
|
+
:description => "If `true`, the security agent is loaded (the agent performs a Ruby 'require')"
|
2669
2693
|
},
|
2670
2694
|
:'security.enabled' => {
|
2671
2695
|
:default => false,
|
@@ -2694,47 +2718,196 @@ module NewRelic
|
|
2694
2718
|
:description => 'Defines the endpoint URL for posting security-related data',
|
2695
2719
|
:dynamic_name => true
|
2696
2720
|
},
|
2697
|
-
:'security.
|
2698
|
-
:default =>
|
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,
|
2699
2768
|
:external => true,
|
2700
2769
|
:public => true,
|
2701
2770
|
:type => Boolean,
|
2702
2771
|
:allowed_from_server => false,
|
2703
|
-
:description => 'If `true`,
|
2772
|
+
:description => 'If `true`, disables the detection of low-severity insecure settings. For example, hash, crypto, cookie, random generators, trust boundary).'
|
2704
2773
|
},
|
2705
|
-
:'security.
|
2706
|
-
:default =>
|
2774
|
+
:'security.exclude_from_iast_scan.iast_detection_category.invalid_file_access' => {
|
2775
|
+
:default => false,
|
2707
2776
|
:external => true,
|
2708
2777
|
:public => true,
|
2709
2778
|
:type => Boolean,
|
2710
2779
|
:allowed_from_server => false,
|
2711
|
-
:description => 'If `true`,
|
2780
|
+
:description => 'If `true`, disables file operation-related IAST detections (File Access & Application integrity violation)'
|
2712
2781
|
},
|
2713
|
-
:'security.
|
2714
|
-
:default =>
|
2782
|
+
:'security.exclude_from_iast_scan.iast_detection_category.sql_injection' => {
|
2783
|
+
:default => false,
|
2715
2784
|
:external => true,
|
2716
2785
|
:public => true,
|
2717
2786
|
:type => Boolean,
|
2718
2787
|
:allowed_from_server => false,
|
2719
|
-
:description => 'If `true`,
|
2788
|
+
:description => 'If `true`, disables SQL injection detection in IAST scans.'
|
2720
2789
|
},
|
2721
|
-
:'security.
|
2722
|
-
:default =>
|
2723
|
-
:
|
2790
|
+
:'security.exclude_from_iast_scan.iast_detection_category.nosql_injection' => {
|
2791
|
+
:default => false,
|
2792
|
+
:external => true,
|
2724
2793
|
:public => true,
|
2725
|
-
:type =>
|
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,
|
2726
2800
|
:external => true,
|
2801
|
+
:public => true,
|
2802
|
+
:type => Boolean,
|
2727
2803
|
:allowed_from_server => false,
|
2728
|
-
:description => '
|
2804
|
+
:description => 'If `true`, disables LDAP injection detection in IAST scans.'
|
2729
2805
|
},
|
2730
|
-
:'security.
|
2731
|
-
:default =>
|
2732
|
-
:
|
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,
|
2733
2856
|
:public => true,
|
2734
2857
|
:type => Integer,
|
2735
2858
|
:external => true,
|
2859
|
+
:allowed_from_server => true,
|
2860
|
+
:description => 'Specifies the length of time (in minutes) that the IAST scan will run.'
|
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,
|
2736
2876
|
:allowed_from_server => false,
|
2737
|
-
:description => '
|
2877
|
+
:description => 'If `true`, allows IAST to continuously gather trace data in the background. Collected data will be used by the security agent 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.'
|
2738
2911
|
}
|
2739
2912
|
}.freeze
|
2740
2913
|
# rubocop:enable Metrics/CollectionLiteralLength
|
@@ -90,6 +90,42 @@ module NewRelic
|
|
90
90
|
ConnectionManager.instance.get_connection(config, &connector)
|
91
91
|
end
|
92
92
|
|
93
|
+
def explain_this(statement, use_execute = false)
|
94
|
+
if supports_with_connection?
|
95
|
+
explain_this_using_with_connection(statement)
|
96
|
+
else
|
97
|
+
explain_this_using_adapter_connection(statement, use_execute)
|
98
|
+
end
|
99
|
+
rescue => e
|
100
|
+
NewRelic::Agent.logger.error("Couldn't fetch the explain plan for statement: #{e}")
|
101
|
+
end
|
102
|
+
|
103
|
+
def explain_this_using_with_connection(statement)
|
104
|
+
::ActiveRecord::Base.with_connection do |conn|
|
105
|
+
conn.exec_query("EXPLAIN #{statement.sql}", "Explain #{statement.name}", statement.binds)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def explain_this_using_adapter_connection(statement, use_execute)
|
110
|
+
connection = get_connection(statement.config) do
|
111
|
+
::ActiveRecord::Base.send(:"#{statement.config[:adapter]}_connection", statement.config)
|
112
|
+
end
|
113
|
+
|
114
|
+
if use_execute
|
115
|
+
connection.execute("EXPLAIN #{statement.sql}")
|
116
|
+
else
|
117
|
+
connection.exec_query("EXPLAIN #{statement.sql}", "Explain #{statement.name}", statement.binds)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# ActiveRecord v7.2.0 introduced with_connection
|
122
|
+
def supports_with_connection?
|
123
|
+
return @supports_with_connection if defined?(@supports_with_connection)
|
124
|
+
|
125
|
+
@supports_with_connection = defined?(::ActiveRecord::VERSION::STRING) &&
|
126
|
+
Gem::Version.new(ActiveRecord::VERSION::STRING) >= Gem::Version.new('7.2.0')
|
127
|
+
end
|
128
|
+
|
93
129
|
def close_connections
|
94
130
|
ConnectionManager.instance.close_connections
|
95
131
|
end
|
@@ -9,14 +9,7 @@ module NewRelic
|
|
9
9
|
module Instrumentation
|
10
10
|
module ActiveRecord
|
11
11
|
EXPLAINER = lambda do |statement|
|
12
|
-
|
13
|
-
::ActiveRecord::Base.send("#{statement.config[:adapter]}_connection",
|
14
|
-
statement.config)
|
15
|
-
end
|
16
|
-
# the following line needs else branch coverage
|
17
|
-
if connection && connection.respond_to?(:execute) # rubocop:disable Style/SafeNavigation
|
18
|
-
return connection.execute("EXPLAIN #{statement.sql}")
|
19
|
-
end
|
12
|
+
NewRelic::Agent::Database.explain_this(statement, true)
|
20
13
|
end
|
21
14
|
|
22
15
|
def self.insert_instrumentation
|
@@ -70,18 +70,7 @@ module NewRelic
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def get_explain_plan(statement)
|
73
|
-
|
74
|
-
::ActiveRecord::Base.send("#{statement.config[:adapter]}_connection",
|
75
|
-
statement.config)
|
76
|
-
end
|
77
|
-
# the following line needs else branch coverage
|
78
|
-
if connection && connection.respond_to?(:exec_query) # rubocop:disable Style/SafeNavigation
|
79
|
-
return connection.exec_query("EXPLAIN #{statement.sql}",
|
80
|
-
"Explain #{statement.name}",
|
81
|
-
statement.binds)
|
82
|
-
end
|
83
|
-
rescue => e
|
84
|
-
NewRelic::Agent.logger.debug("Couldn't fetch the explain plan for #{statement} due to #{e}")
|
73
|
+
NewRelic::Agent::Database.explain_this(statement)
|
85
74
|
end
|
86
75
|
|
87
76
|
def active_record_config(payload)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# This file is distributed under New Relic's license terms.
|
2
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require_relative 'instrumentation'
|
6
|
+
|
7
|
+
module NewRelic::Agent::Instrumentation
|
8
|
+
module AwsSdkLambda::Chain
|
9
|
+
def self.instrument!
|
10
|
+
::Aws::Lambda::Client.class_eval do
|
11
|
+
include NewRelic::Agent::Instrumentation::AwsSdkLambda
|
12
|
+
|
13
|
+
alias_method(:invoke_without_new_relic, :invoke)
|
14
|
+
|
15
|
+
def invoke(*args)
|
16
|
+
invoke_with_new_relic(*args) { invoke_without_new_relic(*args) }
|
17
|
+
end
|
18
|
+
|
19
|
+
alias_method(:invoke_async_without_new_relic, :invoke_async)
|
20
|
+
|
21
|
+
def invoke_async(*args)
|
22
|
+
invoke_async_with_new_relic(*args) { invoke_async_without_new_relic(*args) }
|
23
|
+
end
|
24
|
+
|
25
|
+
alias_method(:invoke_with_response_stream_without_new_relic, :invoke_with_response_stream)
|
26
|
+
|
27
|
+
def invoke_with_response_stream(*args)
|
28
|
+
invoke_with_response_stream_with_new_relic(*args) { invoke_with_response_stream_without_new_relic(*args) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# This file is distributed under New Relic's license terms.
|
2
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module NewRelic::Agent::Instrumentation
|
8
|
+
module AwsSdkLambda
|
9
|
+
INSTRUMENTATION_NAME = 'aws_sdk_lambda'
|
10
|
+
AWS_SERVICE = 'lambda'
|
11
|
+
CLOUD_PLATFORM = 'aws_lambda'
|
12
|
+
WRAPPED_RESPONSE = Struct.new(:status_code, :has_status_code?)
|
13
|
+
|
14
|
+
def invoke_with_new_relic(*args)
|
15
|
+
with_tracing(:invoke, *args) { yield }
|
16
|
+
end
|
17
|
+
|
18
|
+
def invoke_async_with_new_relic(*args)
|
19
|
+
with_tracing(:invoke_async, *args) { yield }
|
20
|
+
end
|
21
|
+
|
22
|
+
def invoke_with_response_stream_with_new_relic(*args)
|
23
|
+
with_tracing(:invoke_with_response_stream, *args) { yield }
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def with_tracing(action, *args)
|
29
|
+
segment = generate_segment(action, *args)
|
30
|
+
|
31
|
+
# prevent additional instrumentation for things like Net::HTTP from
|
32
|
+
# creating any segments that may appear as redundant / confusing
|
33
|
+
NewRelic::Agent.disable_all_tracing do
|
34
|
+
response = NewRelic::Agent::Tracer.capture_segment_error(segment) { yield }
|
35
|
+
process_response(response, segment)
|
36
|
+
response
|
37
|
+
end
|
38
|
+
ensure
|
39
|
+
segment&.finish
|
40
|
+
end
|
41
|
+
|
42
|
+
def process_response(response, segment)
|
43
|
+
process_function_error(response) if response.respond_to?(:function_error)
|
44
|
+
rescue => e
|
45
|
+
NewRelic::Agent.logger.error("Error processing aws-sdk-lambda invocation response: #{e}")
|
46
|
+
end
|
47
|
+
|
48
|
+
# notice error that was raised / unhandled by the function
|
49
|
+
def process_function_error(response)
|
50
|
+
function_error = response.function_error
|
51
|
+
return unless function_error
|
52
|
+
|
53
|
+
msg = "[#{function_error}]"
|
54
|
+
payload = response.payload&.string if response.respond_to?(:payload)
|
55
|
+
payload_hash = JSON.parse(payload) if payload
|
56
|
+
msg = "#{msg} #{payload_hash['errorType']} - #{payload_hash['errorMessage']}" if payload_hash
|
57
|
+
e = StandardError.new(msg)
|
58
|
+
e.set_backtrace(payload_hash['stackTrace']) if payload_hash
|
59
|
+
|
60
|
+
NewRelic::Agent.notice_error(e)
|
61
|
+
end
|
62
|
+
|
63
|
+
def generate_segment(action, options = {})
|
64
|
+
function = function_name(options)
|
65
|
+
region = aws_region
|
66
|
+
account_id = aws_account_id
|
67
|
+
arn = aws_arn(function, region)
|
68
|
+
segment = NewRelic::Agent::Tracer.start_segment(name: "Lambda/#{action}/#{function}")
|
69
|
+
segment.add_agent_attribute('cloud.account.id', account_id)
|
70
|
+
segment.add_agent_attribute('cloud.platform', CLOUD_PLATFORM)
|
71
|
+
segment.add_agent_attribute('cloud.region', region)
|
72
|
+
segment.add_agent_attribute('cloud.resource_id', arn) if arn
|
73
|
+
segment
|
74
|
+
end
|
75
|
+
|
76
|
+
def function_name(options = {})
|
77
|
+
(options.fetch(:function_name, nil) if options.respond_to?(:fetch)) || NewRelic::UNKNOWN
|
78
|
+
end
|
79
|
+
|
80
|
+
def aws_account_id
|
81
|
+
return unless self.respond_to?(:config)
|
82
|
+
|
83
|
+
config&.account_id || NewRelic::Agent.config[:'cloud.aws.account_id']
|
84
|
+
end
|
85
|
+
|
86
|
+
def aws_region
|
87
|
+
config&.region if self.respond_to?(:config)
|
88
|
+
end
|
89
|
+
|
90
|
+
def aws_arn(function, region)
|
91
|
+
NewRelic::Agent::Aws.create_arn(AWS_SERVICE, "function:#{function}", region)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# This file is distributed under New Relic's license terms.
|
2
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require_relative 'instrumentation'
|
6
|
+
|
7
|
+
module NewRelic::Agent::Instrumentation
|
8
|
+
module AwsSdkLambda::Prepend
|
9
|
+
include NewRelic::Agent::Instrumentation::AwsSdkLambda
|
10
|
+
|
11
|
+
def invoke(*args)
|
12
|
+
invoke_with_new_relic(*args) { super }
|
13
|
+
end
|
14
|
+
|
15
|
+
def invoke_async(*args)
|
16
|
+
invoke_async_with_new_relic(*args) { super }
|
17
|
+
end
|
18
|
+
|
19
|
+
def invoke_with_response_stream(*args)
|
20
|
+
invoke_with_response_stream_with_new_relic(*args) { super }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# This file is distributed under New Relic's license terms.
|
2
|
+
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
DependencyDetection.defer do
|
6
|
+
named :aws_sdk_lambda
|
7
|
+
|
8
|
+
depends_on do
|
9
|
+
defined?(Aws::Lambda::Client)
|
10
|
+
end
|
11
|
+
|
12
|
+
executes do
|
13
|
+
require_relative 'aws_sdk_lambda/instrumentation'
|
14
|
+
|
15
|
+
if use_prepend?
|
16
|
+
require_relative 'aws_sdk_lambda/prepend'
|
17
|
+
prepend_instrument Aws::Lambda::Client, NewRelic::Agent::Instrumentation::AwsSdkLambda::Prepend
|
18
|
+
else
|
19
|
+
require_relative 'aws_sdk_lambda/chain'
|
20
|
+
chain_instrument NewRelic::Agent::Instrumentation::AwsSdkLambda::Chain
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -21,7 +21,11 @@ module NewRelic::Agent::Instrumentation
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def metric_name
|
24
|
-
|
24
|
+
# ViewComponent determines a component's identifier differently depending on the version
|
25
|
+
# https://github.com/ViewComponent/view_component/pull/2153
|
26
|
+
component_identifier = defined?(self.class.source_location) ? self.class.source_location : self.class.identifier
|
27
|
+
|
28
|
+
"View/#{metric_path(component_identifier)}/#{self.class.name}"
|
25
29
|
rescue => e
|
26
30
|
NewRelic::Agent.logger.error('Error identifying View Component metric name', e)
|
27
31
|
|
@@ -25,6 +25,7 @@ module NewRelic
|
|
25
25
|
METRICS_SUPPORTABILITY_FORMAT = 'Supportability/Logging/Metrics/Ruby/%s'.freeze
|
26
26
|
FORWARDING_SUPPORTABILITY_FORMAT = 'Supportability/Logging/Forwarding/Ruby/%s'.freeze
|
27
27
|
DECORATING_SUPPORTABILITY_FORMAT = 'Supportability/Logging/LocalDecorating/Ruby/%s'.freeze
|
28
|
+
LABELS_SUPPORTABILITY_FORMAT = 'Supportability/Logging/Labels/Ruby/%s'.freeze
|
28
29
|
MAX_BYTES = 32768 # 32 * 1024 bytes (32 kibibytes)
|
29
30
|
|
30
31
|
named :LogEventAggregator
|
@@ -38,6 +39,7 @@ module NewRelic
|
|
38
39
|
METRICS_ENABLED_KEY = :'application_logging.metrics.enabled'
|
39
40
|
FORWARDING_ENABLED_KEY = :'application_logging.forwarding.enabled'
|
40
41
|
DECORATING_ENABLED_KEY = :'application_logging.local_decorating.enabled'
|
42
|
+
LABELS_ENABLED_KEY = :'application_logging.forwarding.labels.enabled'
|
41
43
|
LOG_LEVEL_KEY = :'application_logging.forwarding.log_level'
|
42
44
|
CUSTOM_ATTRIBUTES_KEY = :'application_logging.forwarding.custom_attributes'
|
43
45
|
|
@@ -51,6 +53,7 @@ module NewRelic
|
|
51
53
|
@high_security = NewRelic::Agent.config[:high_security]
|
52
54
|
@instrumentation_logger_enabled = NewRelic::Agent::Instrumentation::Logger.enabled?
|
53
55
|
@attributes = NewRelic::Agent::LogEventAttributes.new
|
56
|
+
|
54
57
|
register_for_done_configuring(events)
|
55
58
|
end
|
56
59
|
|
@@ -186,6 +189,10 @@ module NewRelic
|
|
186
189
|
attributes.add_custom_attributes(custom_attributes)
|
187
190
|
end
|
188
191
|
|
192
|
+
def labels
|
193
|
+
@labels ||= create_labels
|
194
|
+
end
|
195
|
+
|
189
196
|
# Because our transmission format (MELT) is different than historical
|
190
197
|
# agent payloads, extract the munging here to keep the service focused
|
191
198
|
# on the general harvest + transmit instead of the format.
|
@@ -201,8 +208,9 @@ module NewRelic
|
|
201
208
|
# To save on unnecessary data transmission, trim the entity.type
|
202
209
|
# sent by classic logs-in-context
|
203
210
|
common_attributes.delete(ENTITY_TYPE_KEY)
|
204
|
-
|
205
|
-
common_attributes.merge!(
|
211
|
+
aggregator = NewRelic::Agent.agent.log_event_aggregator
|
212
|
+
common_attributes.merge!(aggregator.attributes.custom_attributes)
|
213
|
+
common_attributes.merge!(aggregator.labels)
|
206
214
|
|
207
215
|
_, items = data
|
208
216
|
payload = [{
|
@@ -247,6 +255,7 @@ module NewRelic
|
|
247
255
|
record_configuration_metric(METRICS_SUPPORTABILITY_FORMAT, METRICS_ENABLED_KEY)
|
248
256
|
record_configuration_metric(FORWARDING_SUPPORTABILITY_FORMAT, FORWARDING_ENABLED_KEY)
|
249
257
|
record_configuration_metric(DECORATING_SUPPORTABILITY_FORMAT, DECORATING_ENABLED_KEY)
|
258
|
+
record_configuration_metric(LABELS_SUPPORTABILITY_FORMAT, LABELS_ENABLED_KEY)
|
250
259
|
|
251
260
|
add_custom_attributes(NewRelic::Agent.config[CUSTOM_ATTRIBUTES_KEY])
|
252
261
|
end
|
@@ -327,6 +336,23 @@ module NewRelic
|
|
327
336
|
|
328
337
|
Logger::Severity.const_get(severity_constant) < Logger::Severity.const_get(configured_log_level_constant)
|
329
338
|
end
|
339
|
+
|
340
|
+
def create_labels
|
341
|
+
return NewRelic::EMPTY_HASH unless NewRelic::Agent.config[LABELS_ENABLED_KEY]
|
342
|
+
|
343
|
+
downcased_exclusions = NewRelic::Agent.config[:'application_logging.forwarding.labels.exclude'].map(&:downcase)
|
344
|
+
log_labels = {}
|
345
|
+
|
346
|
+
NewRelic::Agent.config.parsed_labels.each do |parsed_label|
|
347
|
+
next if downcased_exclusions.include?(parsed_label['label_type'].downcase)
|
348
|
+
|
349
|
+
# labels are referred to as tags in the UI, so prefix the
|
350
|
+
# label-related attributes with 'tags.*'
|
351
|
+
log_labels["tags.#{parsed_label['label_type']}"] = parsed_label['label_value']
|
352
|
+
end
|
353
|
+
|
354
|
+
log_labels
|
355
|
+
end
|
330
356
|
end
|
331
357
|
end
|
332
358
|
end
|
data/lib/new_relic/version.rb
CHANGED
data/newrelic.yml
CHANGED
@@ -65,6 +65,13 @@ common: &default_settings
|
|
65
65
|
# If true, the agent captures log records emitted by your application.
|
66
66
|
# application_logging.forwarding.enabled: true
|
67
67
|
|
68
|
+
# If true, the agent attaches labels to log records.
|
69
|
+
# application_logging.forwarding.labels.enabled: false
|
70
|
+
|
71
|
+
# A case-insensitive array or comma-delimited string containing the labels to
|
72
|
+
# exclude from log records.
|
73
|
+
# application_logging.forwarding.labels.exclude: []
|
74
|
+
|
68
75
|
# Sets the minimum level a log event must have to be forwarded to New Relic.
|
69
76
|
# This is based on the integer values of Ruby's Logger::Severity constants:
|
70
77
|
# https://github.com/ruby/ruby/blob/master/lib/logger/severity.rb
|
@@ -114,17 +121,15 @@ common: &default_settings
|
|
114
121
|
# audit_log.path: log/newrelic_audit.log
|
115
122
|
|
116
123
|
# An array of CLASS#METHOD (for instance methods) and/or CLASS.METHOD (for class
|
117
|
-
# methods) strings representing Ruby methods
|
118
|
-
# add custom instrumentation to
|
124
|
+
# methods) strings representing Ruby methods that the agent can automatically
|
125
|
+
# add custom instrumentation to. This doesn't require any modifications of the
|
119
126
|
# source code that defines the methods.
|
120
|
-
#
|
121
127
|
# Use fully qualified class names (using the :: delimiter) that include any
|
122
128
|
# module or class namespacing.
|
123
|
-
#
|
124
129
|
# Here is some Ruby source code that defines a render_png instance method for an
|
125
130
|
# Image class and a notify class method for a User class, both within a
|
126
131
|
# MyCompany module namespace:
|
127
|
-
#
|
132
|
+
#
|
128
133
|
# module MyCompany
|
129
134
|
# class Image
|
130
135
|
# def render_png
|
@@ -147,17 +152,20 @@ common: &default_settings
|
|
147
152
|
# - MyCompany::User.notify
|
148
153
|
#
|
149
154
|
# That configuration example uses YAML array syntax to specify both methods.
|
150
|
-
# Alternatively, a comma-delimited string
|
151
|
-
#
|
152
|
-
# automatic_custom_instrumentation_method_list: 'MyCompany::Image#render_png,
|
153
|
-
#
|
155
|
+
# Alternatively, you can use a comma-delimited string:
|
156
|
+
#
|
157
|
+
# automatic_custom_instrumentation_method_list: 'MyCompany::Image#render_png,
|
158
|
+
# MyCompany::User.notify'
|
159
|
+
#
|
154
160
|
# Whitespace around the comma(s) in the list is optional. When configuring the
|
155
161
|
# agent with a list of methods via the
|
156
162
|
# NEW_RELIC_AUTOMATIC_CUSTOM_INSTRUMENTATION_METHOD_LIST environment variable,
|
157
|
-
# this comma-delimited string format
|
158
|
-
#
|
159
|
-
# export
|
160
|
-
#
|
163
|
+
# use this comma-delimited string format:
|
164
|
+
#
|
165
|
+
# export
|
166
|
+
# NEW_RELIC_AUTOMATIC_CUSTOM_INSTRUMENTATION_METHOD_LIST='MyCompany::Image#render_png,
|
167
|
+
# MyCompany::User.notify'
|
168
|
+
#
|
161
169
|
# automatic_custom_instrumentation_method_list: []
|
162
170
|
|
163
171
|
# Specify a list of constants that should prevent the agent from starting
|
@@ -315,18 +323,7 @@ common: &default_settings
|
|
315
323
|
# If true, disables agent middleware for Sinatra. This middleware is responsible
|
316
324
|
# for advanced feature support such as cross application tracing, page load
|
317
325
|
# timing, and error collection.
|
318
|
-
#
|
319
|
-
# Distributed tracing is on by default for Ruby agent versions 8.0.0 and above.
|
320
|
-
# Middlewares are not required to support distributed tracing.
|
321
|
-
# To continue using cross application tracing, update the following options in
|
322
|
-
# your newrelic.yml configuration file:
|
323
|
-
# ``yaml
|
324
|
-
# # newrelic.yml
|
325
|
-
# cross_application_tracer:
|
326
|
-
# enabled: true
|
327
|
-
# distributed_tracing:
|
328
|
-
# enabled: false
|
329
|
-
# ``
|
326
|
+
#
|
330
327
|
# disable_sinatra_auto_middleware: false
|
331
328
|
|
332
329
|
# If true, disables view instrumentation.
|
@@ -458,6 +455,10 @@ common: &default_settings
|
|
458
455
|
# prepend, chain, disabled.
|
459
456
|
# instrumentation.async_http: auto
|
460
457
|
|
458
|
+
# Controls auto-instrumentation of the aws_sdk_lambda library at start-up. May
|
459
|
+
# be one of auto, prepend, chain, disabled.
|
460
|
+
# instrumentation.aws_sdk_lambda: auto
|
461
|
+
|
461
462
|
# Controls auto-instrumentation of the aws-sdk-sqs library at start-up. May be
|
462
463
|
# one of: auto, prepend, chain, disabled.
|
463
464
|
# instrumentation.aws_sqs: auto
|
@@ -950,33 +951,104 @@ common: &default_settings
|
|
950
951
|
# NOTE: All "security.*" configuration parameters are related only to the
|
951
952
|
# security agent, and all other configuration parameters that may
|
952
953
|
# have "security" in the name somewhere are related to the APM agent.
|
953
|
-
|
954
|
+
|
954
955
|
# If true, the security agent is loaded (a Ruby 'require' is performed)
|
955
956
|
# security.agent.enabled: false
|
956
957
|
|
957
958
|
# The port the application is listening on. This setting is mandatory for
|
958
|
-
# Passenger servers. Other servers
|
959
|
+
# Passenger servers. Other servers are detected by default.
|
959
960
|
# security.application_info.port: nil
|
960
961
|
|
961
|
-
# If true,
|
962
|
-
# security.
|
962
|
+
# If true, the security agent is started (the agent runs in its event loop)
|
963
|
+
# security.enabled: false
|
963
964
|
|
964
|
-
#
|
965
|
-
#
|
965
|
+
# Defines API paths the security agent should ignore in IAST scans. Accepts an
|
966
|
+
# array of regex patterns matching the URI to ignore. The regex pattern should
|
967
|
+
# provide a complete match for the URL without the endpoint. For example,
|
968
|
+
# [".*account.*"], [".*/\api\/v1\/.*?\/login"]
|
969
|
+
# security.exclude_from_iast_scan.api: []
|
966
970
|
|
967
|
-
#
|
968
|
-
#
|
971
|
+
# An array of HTTP request body keys the security agent should ignore in IAST
|
972
|
+
# scans.
|
973
|
+
# security.exclude_from_iast_scan.http_request_parameters.body: []
|
969
974
|
|
970
|
-
#
|
971
|
-
#
|
975
|
+
# An array of HTTP request headers the security agent should ignore in IAST
|
976
|
+
# scans. The array should specify a list of patterns matching the headers to
|
977
|
+
# ignore.
|
978
|
+
# security.exclude_from_iast_scan.http_request_parameters.header: []
|
979
|
+
|
980
|
+
# An array of HTTP request query parameters the security agent should ignore in
|
981
|
+
# IAST scans. The array should specify a list of patterns matching the HTTP
|
982
|
+
# request query parameters to ignore.
|
983
|
+
# security.exclude_from_iast_scan.http_request_parameters.query: []
|
984
|
+
|
985
|
+
# If true, disables system command injection detection in IAST scans.
|
986
|
+
# security.exclude_from_iast_scan.iast_detection_category.command_injection: false
|
987
|
+
|
988
|
+
# If true, disables the detection of low-severity insecure settings (e.g., hash,
|
989
|
+
# crypto, cookie, random generators, trust boundary).
|
990
|
+
# security.exclude_from_iast_scan.iast_detection_category.insecure_settings: false
|
991
|
+
|
992
|
+
# If true, disables file operation-related IAST detections (File Access &
|
993
|
+
# Application integrity violation)
|
994
|
+
# security.exclude_from_iast_scan.iast_detection_category.invalid_file_access: false
|
995
|
+
|
996
|
+
# If true, disables Javascript injection detection in IAST scans.
|
997
|
+
# security.exclude_from_iast_scan.iast_detection_category.javascript_injection: false
|
998
|
+
|
999
|
+
# If true, disables LDAP injection detection in IAST scans.
|
1000
|
+
# security.exclude_from_iast_scan.iast_detection_category.ldap_injection: false
|
1001
|
+
|
1002
|
+
# If true, disables NOSQL injection detection in IAST scans.
|
1003
|
+
# security.exclude_from_iast_scan.iast_detection_category.nosql_injection: false
|
1004
|
+
|
1005
|
+
# If true, disables Reflected Cross-Site Scripting (RXSS) detection in IAST
|
1006
|
+
# scans.
|
1007
|
+
# security.exclude_from_iast_scan.iast_detection_category.rxss: false
|
1008
|
+
|
1009
|
+
# If true, disables SQL injection detection in IAST scans.
|
1010
|
+
# security.exclude_from_iast_scan.iast_detection_category.sql_injection: false
|
1011
|
+
|
1012
|
+
# If true, disables Sever-Side Request Forgery (SSRF) detection in IAST scans.
|
1013
|
+
# security.exclude_from_iast_scan.iast_detection_category.ssrf: false
|
1014
|
+
|
1015
|
+
# If true, disables XPATH injection detection in IAST scans.
|
1016
|
+
# security.exclude_from_iast_scan.iast_detection_category.xpath_injection: false
|
1017
|
+
|
1018
|
+
# Unique test identifier when runnning IAST in CI/CD environment to
|
1019
|
+
# differentiate between different test runs, e.g., a build number.
|
1020
|
+
# security.iast_test_identifier: nil
|
972
1021
|
|
973
1022
|
# Defines the mode for the security agent to operate in. Currently only IAST is
|
974
1023
|
# supported
|
975
1024
|
# security.mode: IAST
|
976
1025
|
|
977
|
-
#
|
978
|
-
# default value is
|
979
|
-
# security.
|
1026
|
+
# Sets the maximum number of HTTP requests allowed for the IAST scan per minute.
|
1027
|
+
# Any Integer between 12 and 3600 is valid. The default value is 3600.
|
1028
|
+
# security.scan_controllers.iast_scan_request_rate_limit: 3600
|
1029
|
+
|
1030
|
+
# If true, enables the sending of HTTP responses bodies. Disabling this also
|
1031
|
+
# disables Reflected Cross-Site Scripting (RXSS) vulnerability detection.
|
1032
|
+
# security.scan_controllers.report_http_response_body: true
|
1033
|
+
|
1034
|
+
# The number of application instances for a specific entity on which IAST
|
1035
|
+
# analysis is performed.
|
1036
|
+
# security.scan_controllers.scan_instance_count: 0
|
1037
|
+
|
1038
|
+
# If true, allows IAST to continuously gather trace data in the background.
|
1039
|
+
# Collected data will be used by the security agent to perform an IAST scan at
|
1040
|
+
# the scheduled time.
|
1041
|
+
# security.scan_schedule.always_sample_traces: false
|
1042
|
+
|
1043
|
+
# Specifies the delay time (in minutes) before the IAST scan begins after the
|
1044
|
+
# application starts.
|
1045
|
+
# security.scan_schedule.delay: 0
|
1046
|
+
|
1047
|
+
# Specifies the length of time (in minutes) that the IAST scan will run.
|
1048
|
+
# security.scan_schedule.duration: 0
|
1049
|
+
|
1050
|
+
# Specifies a cron expression that sets when the IAST scan should run.
|
1051
|
+
# security.scan_schedule.schedule: ""
|
980
1052
|
|
981
1053
|
# Defines the endpoint URL for posting security-related data
|
982
1054
|
# security.validator_service_url: wss://csec.nr-data.net
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: newrelic_rpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.
|
4
|
+
version: 9.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tanna McClure
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2024-
|
14
|
+
date: 2024-11-19 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -392,6 +392,10 @@ files:
|
|
392
392
|
- lib/new_relic/agent/instrumentation/async_http/chain.rb
|
393
393
|
- lib/new_relic/agent/instrumentation/async_http/instrumentation.rb
|
394
394
|
- lib/new_relic/agent/instrumentation/async_http/prepend.rb
|
395
|
+
- lib/new_relic/agent/instrumentation/aws_sdk_lambda.rb
|
396
|
+
- lib/new_relic/agent/instrumentation/aws_sdk_lambda/chain.rb
|
397
|
+
- lib/new_relic/agent/instrumentation/aws_sdk_lambda/instrumentation.rb
|
398
|
+
- lib/new_relic/agent/instrumentation/aws_sdk_lambda/prepend.rb
|
395
399
|
- lib/new_relic/agent/instrumentation/aws_sqs.rb
|
396
400
|
- lib/new_relic/agent/instrumentation/aws_sqs/chain.rb
|
397
401
|
- lib/new_relic/agent/instrumentation/aws_sqs/instrumentation.rb
|
@@ -778,7 +782,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
778
782
|
- !ruby/object:Gem::Version
|
779
783
|
version: 1.3.1
|
780
784
|
requirements: []
|
781
|
-
rubygems_version: 3.5.
|
785
|
+
rubygems_version: 3.5.22
|
782
786
|
signing_key:
|
783
787
|
specification_version: 4
|
784
788
|
summary: New Relic Ruby Agent
|