Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
d188c0c
WIP: Logging instrumentation
hannahramadan Jan 22, 2026
1dbd5f1
WIP: add attributes
hannahramadan Jan 27, 2026
f8cc1a1
WIP: Updates to add_logging_event_attributes
hannahramadan Jan 27, 2026
28f657f
Fix attribute adding
hannahramadan Jan 28, 2026
3ed8954
Update chain path and instrumentation
hannahramadan Jan 28, 2026
83d6e5c
Local decorating and tests
hannahramadan Jan 28, 2026
3b9a8d6
add envfile
hannahramadan Jan 28, 2026
c78dd88
Merge branch 'dev' into logging_gem_instrumentation
hannahramadan Jan 28, 2026
53fd84d
Add changelog
hannahramadan Jan 28, 2026
d9f5175
rubocop
hannahramadan Jan 28, 2026
b6ebf36
resolve merge conflict error
hannahramadan Jan 28, 2026
968dc45
testing test break
hannahramadan Jan 29, 2026
8baf351
refactor decorating logic
hannahramadan Jan 29, 2026
c64b02a
Small updates
hannahramadan Jan 29, 2026
f0d2144
Add mdc support
hannahramadan Jan 29, 2026
49db1ad
rubocop
hannahramadan Jan 29, 2026
720631b
Create an external request segment using OTel attributes
kaylareopelle Jan 20, 2026
41d6cf3
Use OTel's INVALID span constant
kaylareopelle Jan 28, 2026
6e7088e
Start a normal segment if there isn't a URI
kaylareopelle Jan 28, 2026
decffe0
add new config
tannalynn Jan 30, 2026
0435f88
update changelog
tannalynn Jan 30, 2026
02c81d3
Test updates
hannahramadan Jan 31, 2026
b78cef4
rubocop
hannahramadan Jan 31, 2026
c2e1841
Add logging metric
hannahramadan Jan 31, 2026
f16d0ac
Edit tests
hannahramadan Jan 31, 2026
6d87de5
test updates
hannahramadan Jan 31, 2026
b60e492
Updates to severity check
hannahramadan Feb 2, 2026
d4d41f6
Small changelog wording
hannahramadan Feb 2, 2026
55fec2b
Create datastore segments for db client spans
kaylareopelle Feb 2, 2026
1161caa
update eslint in package.json s
tannalynn Feb 2, 2026
330682d
Update CHANGELOG.md
tannalynn Feb 2, 2026
48587ef
defer recording the otel bridge metrics
tannalynn Feb 3, 2026
58fce8e
rubocop
hannahramadan Feb 3, 2026
7259be4
add comment
tannalynn Feb 3, 2026
6b78c63
space
tannalynn Feb 3, 2026
ef0f054
no space
tannalynn Feb 3, 2026
9e6ec3a
Merge pull request #3410 from newrelic/spike-otel-attribute-mapping
kaylareopelle Feb 3, 2026
0dce5c2
Add instrumentation registry to tracer provider
kaylareopelle Feb 3, 2026
57962af
Update default for opentelemetry.traces.enabled
kaylareopelle Feb 3, 2026
41a5448
Add instrumentation scope
kaylareopelle Feb 3, 2026
ae7642e
Exclude instrumentation before it's installed
kaylareopelle Feb 3, 2026
c1b1c32
Fix context bug
kaylareopelle Feb 4, 2026
88cf595
Remove old comment
hannahramadan Feb 4, 2026
00d7cd5
Merge pull request #3428 from newrelic/update_eslint
tannalynn Feb 4, 2026
03530da
Merge pull request #3424 from newrelic/truncate_max_backframes_location
tannalynn Feb 4, 2026
b184981
Merge pull request #3429 from newrelic/otel_bridge_metric_issue
tannalynn Feb 4, 2026
10579c6
Merge branch 'dev' into otel-registry
kaylareopelle Feb 4, 2026
6bcb15d
Update exclude list order precedence
kaylareopelle Feb 4, 2026
c879b02
Merge branch 'otel-registry' of https://github.com/newrelic/newrelic-…
kaylareopelle Feb 4, 2026
a91488f
Fix merge conflict mistake
kaylareopelle Feb 4, 2026
04284a2
Add regression test for error raised
kaylareopelle Feb 4, 2026
0ea4406
Merge pull request #3432 from newrelic/add-instrumentation-scope
kaylareopelle Feb 5, 2026
5bc1b21
Merge pull request #3427 from newrelic/otel-db-attribute-mapping
kaylareopelle Feb 5, 2026
8a7b1d3
Apply suggestion from @kaylareopelle
kaylareopelle Feb 5, 2026
37c77c5
Rubocop
kaylareopelle Feb 5, 2026
94f416a
detect vendor metadata parallel config
tannalynn Feb 5, 2026
fe06944
add test
tannalynn Feb 5, 2026
1dcef03
add changelog entry
tannalynn Feb 5, 2026
7579840
add more tests
tannalynn Feb 5, 2026
09b3c39
Merge pull request #3430 from newrelic/otel-registry
kaylareopelle Feb 5, 2026
29463e8
Prefix mdc attributes with `context.`
hannahramadan Feb 6, 2026
2128174
Merge branch 'dev' into logging_gem_instrumentation
hannahramadan Feb 6, 2026
29469de
Merge pull request #3434 from newrelic/fix-context-bug
kaylareopelle Feb 7, 2026
f498b0d
pin dalli test versions
tannalynn Feb 9, 2026
ed250cc
space
tannalynn Feb 9, 2026
30c60de
remove space
tannalynn Feb 9, 2026
7fb5572
Merge pull request #3445 from newrelic/remove_dalli_5
tannalynn Feb 9, 2026
dd4cc24
Translate server attributes for old conventions
kaylareopelle Feb 4, 2026
b3f3265
Update server transaction names
kaylareopelle Feb 7, 2026
985ec8c
Cleanup
kaylareopelle Feb 7, 2026
f173c56
Fix intermittent failures
kaylareopelle Feb 9, 2026
dec3e4d
feat: add agent metadata action - step 1
mvicknr Feb 9, 2026
25f7fff
Merge pull request #3439 from newrelic/vendor_detect_parallel_config
tannalynn Feb 10, 2026
88d4a77
Prepare config for launch
kaylareopelle Feb 7, 2026
56fae92
Update tests to use instrumentation not on exclude
kaylareopelle Feb 9, 2026
7d82bb8
Update excluded namespaces
hannahramadan Feb 9, 2026
e9cec11
Update default source example
hannahramadan Feb 10, 2026
a290df6
Merge pull request #3448 from newrelic/mvick/add-agent-metadata-actio…
tannalynn Feb 10, 2026
15ba99e
feat: add agent metadata action - step 2
mvicknr Feb 10, 2026
8143953
Merge pull request #3450 from newrelic/mvick/add-agent-metadata-actio…
tannalynn Feb 10, 2026
f9b48d4
Merge branch 'dev' into logging_gem_instrumentation
hannahramadan Feb 10, 2026
8444c60
Merge pull request #3420 from newrelic/logging_gem_instrumentation
hannahramadan Feb 10, 2026
adf6f0d
Merge pull request #3433 from newrelic/server-attr-translation
kaylareopelle Feb 10, 2026
28df1db
Merge pull request #3442 from newrelic/update-exclude-config
kaylareopelle Feb 10, 2026
94fd259
chore: Update metadata action version
mvicknr Feb 11, 2026
0c49161
Merge pull request #3451 from newrelic/mvick/add-agent-metadata-actio…
kaylareopelle Feb 11, 2026
d278d68
Refactor TransactionPatch
hannahramadan Feb 11, 2026
68e3795
Refactor TracePatch
hannahramadan Feb 12, 2026
d7316ca
Beep beep rubocop
hannahramadan Feb 12, 2026
e5d784b
Move TracePatch to own file
hannahramadan Feb 12, 2026
47b5b0b
Move TracePatch tests to own file
hannahramadan Feb 12, 2026
af78fa0
rubocop
hannahramadan Feb 12, 2026
a9b0e11
Merge branch 'dev' into update_transaction_patch_logic
hannahramadan Feb 12, 2026
be8ec90
Reorg prepend calls
hannahramadan Feb 12, 2026
a1e5a98
Merge pull request #3452 from newrelic/update_transaction_patch_logic
hannahramadan Feb 12, 2026
f6d64a6
Finish OTel span before forcing finish
hannahramadan Feb 13, 2026
f687185
stylistic space before return
hannahramadan Feb 13, 2026
9954488
Merge pull request #3454 from newrelic/otel_bridge_bugfix_unfinished_…
hannahramadan Feb 17, 2026
9694eaa
Add hybrid agent changelog entry
kaylareopelle Feb 17, 2026
dd5eb70
Small config description edits
kaylareopelle Feb 17, 2026
d9a4516
Remove extra newline
kaylareopelle Feb 17, 2026
1f6008a
Remove line about instrumentation
kaylareopelle Feb 17, 2026
bbbf58a
Merge pull request #3458 from newrelic/hybrid-agent-changelog
kaylareopelle Feb 17, 2026
78da9ea
bump version
newrelic-ruby-agent-bot Feb 17, 2026
f6b2570
Updates from PR#3458
kaylareopelle Feb 17, 2026
e6a6f4a
Merge pull request #3457 from newrelic/prerelease_updates_10.2.0-pre
kaylareopelle Feb 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions .fleetControl/agentControl/agent-schema-for-agent-control.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# original source: https://github.com/newrelic/newrelic-agent-control/blob/main/agent-control/agent-type-registry/newrelic/com.newrelic.apm_ruby-0.1.0.yaml
namespace: newrelic
name: com.newrelic.apm_ruby
version: 0.1.0
variables:
k8s:
podLabelSelector:
description: "Pod label selector"
type: yaml
default: { }
required: false
containerSelector:
description: "Container selector"
type: yaml
default: { }
required: false
namespaceLabelSelector:
description: "Namespace label selector"
type: yaml
default: { }
required: false
# All 'agent' side-car related variables are flattened.
version:
description: "Ruby Agent init container version"
type: string
default: "latest"
required: false
env:
description: "environment variables to pass to Ruby agent"
type: yaml
default: [ ]
required: false
imagePullPolicy:
description: "image pull policy for the Ruby agent init container"
type: string
default: "Always"
required: false
resourceRequirements:
description: "resource requirements for the Ruby agent init container"
type: yaml
default: { }
required: false
securityContext:
description: "security context for the Ruby agent init container"
type: yaml
default: { }
required: false
# All health sidecar related variables are flattened and prefixed with "health_"
health_env:
description: "environment variables to pass to health sidecar"
type: yaml
default: [ ]
required: false
health_version:
description: "health sidecar image version"
type: string
default: "latest"
required: false
health_imagePullPolicy:
description: "image pull policy for the health sidecar"
type: string
default: "Always"
required: false
health_resourceRequirements:
description: "resource requirements for the health sidecar"
type: yaml
default: { }
required: false
health_securityContext:
description: "security context for the health sidecar"
type: yaml
default: { }
required: false
deployment:
k8s:
health:
interval: 30s
initial_delay: 30s
objects:
instrumentation:
apiVersion: newrelic.com/v1beta3
kind: Instrumentation
metadata:
name: ${nr-sub:agent_id}
# APM CRs should be installed in "nr-ac:namespace"
# Due to a limitation in the k8s-agents-operator, Instrumentation CRs must be installed in the same namespace as the operator.
# Hence, the namespace is set to "nr-ac:namespace_agents".
# Reference: https://github.com/newrelic/k8s-agents-operator/blob/92c19208864f051f03f457ee04b772fca5042162/api/v1beta1/instrumentation_webhook.go#L110C27-L110C72
namespace: ${nr-ac:namespace_agents}
spec:
agent:
language: ruby
image: newrelic/newrelic-ruby-init:${nr-var:version}
env: ${nr-var:env}
imagePullPolicy: ${nr-var:imagePullPolicy}
resources: ${nr-var:resourceRequirements}
securityContext: ${nr-var:securityContext}
healthAgent:
image: newrelic/k8s-apm-agent-health-sidecar:${nr-var:health_version}
env: ${nr-var:health_env}
imagePullPolicy: ${nr-var:health_imagePullPolicy}
resources: ${nr-var:health_resourceRequirements}
securityContext: ${nr-var:health_securityContext}
podLabelSelector: ${nr-var:podLabelSelector}
namespaceLabelSelector: ${nr-var:namespaceLabelSelector}
containerSelector: ${nr-var:containerSelector}

5 changes: 5 additions & 0 deletions .fleetControl/agentControlDefinitions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
agentControlDefinitions:
- platform: KUBERNETESCLUSTER
supportFromAgent: 1.0.0
supportFromAgentControl: 1.0.0
content: ./agentControl/agent-schema-for-agent-control.yml
6 changes: 6 additions & 0 deletions .fleetControl/configurationDefinitions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
configurationDefinitions:
- platform: KUBERNETESCLUSTER
description: Ruby agent configuration
type: agent-config
version: 1.0.0
# will add schema information here later
2 changes: 1 addition & 1 deletion .github/actions/issue_closer/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@
"@eslint/create-config": "^0.4.5",
"@octokit/graphql": "^5.0.6",
"@vercel/ncc": "^0.36.1",
"eslint": "^8.43.0"
"eslint": "^9.26.0"
}
}
2 changes: 1 addition & 1 deletion .github/actions/simplecov-report/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"@types/node": "^12.12.38",
"@typescript-eslint/parser": "^5.16.0",
"@zeit/ncc": "^0.22.3",
"eslint": "^8.12.0",
"eslint": "^9.26.0",
"eslint-plugin-github": "^4.1.1",
"eslint-plugin-jest": "^26.1.3",
"eslint-plugin-prettier": "^4.0.0",
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/variable-mapper/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"@types/node": "^18.11.3",
"@typescript-eslint/parser": "^5.40.1",
"@vercel/ncc": "^0.34.0",
"eslint": "^8.26.0",
"eslint": "^9.26.0",
"eslint-plugin-github": "^4.4.0",
"eslint-plugin-jest": "^27.1.3",
"jest": "^29.2.1",
Expand Down
105 changes: 105 additions & 0 deletions .github/workflows/AgentMetadata.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Agent Metadata

permissions:
contents: read

on:
# Allows manual triggering with parameters
workflow_dispatch:
inputs:
version:
description: 'Version tag (e.g., v10.0.0)'
required: true
type: string
agent-type:
description: 'Agent type'
required: false
default: 'NRRubyAgent'
type: string
use-cache:
description: 'Use cache'
required: false
default: true
type: boolean
# commented items below pertain to future work
# oci-registry:
# description: 'OCI registry URL for binary uploads (e.g., ghcr.io/newrelic/agents). Leave empty to skip binary upload.'
# required: false
# default: ''
# type: string
# oci-username:
# description: 'OCI registry username (required if oci-registry is set)'
# required: false
# default: ''
# type: string
# oci-password:
# description: 'OCI registry password or token (required if oci-registry is set)'
# required: false
# default: ''
# type: string
# binaries:
# description: 'JSON array with artifact definitions'
# required: false
# default: ''
# type: string

# Allows calling from another workflow
workflow_call:
inputs:
version:
description: 'Version tag to test'
required: true
type: string
agent-type:
description: 'Agent type'
required: false
default: 'NRRubyAgent'
type: string
use-cache:
description: 'Use cache'
required: false
default: true
type: boolean
# commented items below pertain to future work
# oci-registry:
# description: 'OCI registry URL for binary uploads (e.g., ghcr.io/newrelic/agents). Leave empty to skip binary upload.'
# required: false
# default: ''
# type: string
# oci-username:
# description: 'OCI registry username (required if oci-registry is set)'
# required: false
# default: ''
# type: string
# oci-password:
# description: 'OCI registry password or token (required if oci-registry is set)'
# required: false
# default: ''
# type: string
# binaries:
# description: 'JSON array with artifact definitions'
# required: false
# default: ''
# type: string
secrets:
FC_SYS_ID_CLIENT_ID:
required: true
FC_SYS_ID_PR_KEY:
required: true
APM_CONTROL_NR_LICENSE_KEY_STAGING:
required: true

jobs:
test-agent-metadata-action:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Run action
uses: newrelic/agent-metadata-action@v1.0.2
with:
newrelic-client-id: ${{ secrets.FC_SYS_ID_CLIENT_ID }}
newrelic-private-key: ${{ secrets.FC_SYS_ID_PR_KEY }}
apm-control-nr-license-key: ${{ secrets.APM_CONTROL_NR_LICENSE_KEY_STAGING }} # action app is instrumented and supported by APM Control team
agent-type: ${{ inputs.agent-type }}
version: ${{ inputs.version }}
cache: ${{ inputs.use-cache }}
10 changes: 10 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,13 @@ jobs:

- name: Publish newrelic-infinite_tracing to rubygems.org
run: ruby ./.github/workflows/scripts/rubygems-publish.rb infinite_tracing/newrelic-infinite_tracing

update-agent-metadata:
needs: [release]
uses: ./.github/workflows/AgentMetadata.yml
with:
version: ${{ github.event.release.tag_name }}
secrets:
FC_SYS_ID_CLIENT_ID: ${{ secrets.FC_SYS_ID_CLIENT_ID }}
FC_SYS_ID_PR_KEY: ${{ secrets.FC_SYS_ID_PR_KEY }}
APM_CONTROL_NR_LICENSE_KEY_STAGING: ${{ secrets.APM_CONTROL_NR_LICENSE_KEY_STAGING }}
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,5 @@ typhoeus
unicorn
view_component
yajl-ruby
logging
parallel
33 changes: 30 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
# New Relic Ruby Agent Release Notes

## v10.2.0

- **Feature: Introduce Hybrid Agent for OpenTelemetry Tracing Support**

OpenTelemetry Tracing APIs can now be translated into New Relic telemetry with the New Relic Ruby agent's new Hybrid Agent features. This allows the `newrelic_rpm` gem to behave similarly to an OpenTelemetry SDK, accepting OpenTelemetry API calls and turning them into New Relic Transactions and Segments with familiar attributes and names.

The following configuration options relate to Hybrid Agent features:

| Configuration name | Default | Behavior |
| ------------------ | ------- |----------|
| opentelemetry.enabled | `false` | A global configuration option for disabling all OpenTelemetry signals sent through New Relic. |
| opentelemetry.traces.enabled | `true` | Enables the creation of Transaction Trace segments and timeslice metrics from OpenTelemetry Spans |
| opentelemetry.traces.include | `''` | A comma-delimited list of OpenTelemetry Tracers, represented as a string (e.g. "AppTracer1,OpenTelemetry::Instrumentation::Bunny::Instrumentation"), that **will** have their trace signals sent to New Relic.|
| opentelemetry.traces.exclude | `''` | A comma-delimited list of OpenTelemetry Tracers, represented as a string (e.g. "AppTracer1,OpenTelemetry::Instrumentation::Bunny::Instrumentation"), that will **not** have their trace signals sent to New Relic. All known tracers for instrumentation that conflicts with New Relic instrumentation are excluded by default. |

- **Feature: Add configuration option error_collector.backtrace_truncate_location**

A new configuration option has been added, `error_collector.backtrace_truncate_location`, which allows the user to specify where in the backtrace to truncate when the number of frames exceeds `error_collector.max_backtrace_frames`. Options are `'top'` (removes frames from the beginning), `'middle'` (removes frames from the middle, preserving the beginning and end), or `'end'` (removes frames from the end). The default is `'middle'`. [PR#3424](https://github.com/newrelic/newrelic-ruby-agent/pull/3424)

- **Feature: Add Logging gem instrumentation**

The agent will now record logs generated by the [Logging gem](https://rubygems.org/gems/logging). [PR#3420](https://github.com/newrelic/newrelic-ruby-agent/pull/3420)

- **Feature: Add configuration option utilization.detect_in_parallel**

A new configuration option has been added, `utilization.detect_in_parallel`, which controls whether the agent uses threads when detecting cloud vendor information to speed up agent startup. When set to `false`, vendor detection runs sequentially without creating threads. The default is `true`. [PR#3439](https://github.com/newrelic/newrelic-ruby-agent/pull/3439)

## v10.1.0

- **Feature: Add support for forking processes in Parallel gem instrumentation**
Expand All @@ -14,10 +41,10 @@

The agent now properly initializes health check loops after forking, ensuring each process generates its own health check file. This fix also has the effect of correctly including `entity.guid` values in the health check files. [PR#3409](https://github.com/newrelic/newrelic-ruby-agent/pull/3409) [Issue#3408](https://github.com/newrelic/newrelic-ruby-agent/issues/3408)

- **Bugfix: Fix `sidekiq.ignore_retry_errors`**
- **Bugfix: Fix `sidekiq.ignore_retry_errors`**

The configuration option `sidekiq.ignore_retry_errors: true` was continuing to report retry errors. The agent now correctly ignores retry errors and only reports when jobs permanently fail. [PR#3399](https://github.com/newrelic/newrelic-ruby-agent/pull/3399)

The configuration option `sidekiq.ignore_retry_errors: true` was continuing to report retry errors. The agent now correctly ignores retry errors and only reports when jobs permanently fail. [PR#3399](https://github.com/newrelic/newrelic-ruby-agent/pull/3399)

## v10.0.0

- **Breaking Change: Remove support for Ruby 2.4 and 2.5**
Expand Down
2 changes: 1 addition & 1 deletion lib/new_relic/agent/agent.rb
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def init_components
@adaptive_sampler_remote_parent_not_sampled = AdaptiveSampler.new(Agent.config[:sampling_target],
Agent.config[:sampling_target_period_in_seconds])
@serverless_handler = ServerlessHandler.new
@opentelemetry_bridge = OpenTelemetryBridge.new
@opentelemetry_bridge = OpenTelemetryBridge.new(@events)
end

def init_event_handlers
Expand Down
Loading
Loading