Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
151 commits
Select commit Hold shift + click to select a range
61d8a55
Add `collector_endpoint` config option
unflxw May 19, 2026
b7b9dfa
Add OpenTelemetry resource attribute options
unflxw May 19, 2026
1a7931f
Emit custom metrics via OTel in collector mode
unflxw May 20, 2026
675542c
Route Logger via OTel under collector mode
unflxw May 20, 2026
e209959
Suppress the OTel SDK's auto-configured exporters
unflxw Jun 3, 2026
7686f02
Generalize integration runner working directory
unflxw May 21, 2026
41253d3
Shut down OpenTelemetry SDK on Appsignal.stop
unflxw May 21, 2026
315f005
Use Appsignal.stop to flush runners
unflxw Jun 3, 2026
260c72d
Lock down Appsignal.forked behavior under OTel
unflxw May 21, 2026
077b89c
Gate collector mode on Ruby 3.1 or newer
unflxw May 22, 2026
32f35be
Add Transaction backend abstraction
unflxw May 28, 2026
3f90fe2
Open the OTel root span on transaction create
unflxw May 28, 2026
6893477
Emit OTel child spans for transaction events
unflxw May 29, 2026
de7c371
Cover hooks and helpers in collector mode
unflxw May 29, 2026
3bcab30
Add :agent_mode / :collector_mode test contexts
unflxw Jun 1, 2026
66568e6
Restructure tests around mode metadata
unflxw Jun 1, 2026
86808ef
Cover Appsignal::Logger in collector mode
unflxw Jun 1, 2026
0cdc16e
Add collector-mode trace integration spec
unflxw Jun 1, 2026
e7f4cc1
Share the action between paired mode tests
unflxw Jun 2, 2026
fb10008
Test log/trace correlation in collector mode
unflxw Jun 2, 2026
ced142e
Start monitor's root span as a new trace root
unflxw Jun 2, 2026
5b4f8ce
Make OpenTelemetry gems optional
unflxw Jun 3, 2026
885d80d
Set action and namespace on OTel transaction span
unflxw Jun 2, 2026
1117105
Cover event-only integrations in collector mode
unflxw Jun 2, 2026
4664648
Capture metrics and logs in collector-mode specs
unflxw Jun 3, 2026
7099dba
Emit MongoDB event body as a JSON string
unflxw Jun 3, 2026
1abbc38
Cover more integrations in collector mode
unflxw Jun 3, 2026
54db8aa
Cover Active Job metrics in collector mode
unflxw Jun 3, 2026
675c4de
Add collector coverage for two more metrics
unflxw Jun 3, 2026
deb6904
Emit OpenTelemetry errors in collector mode
unflxw Jun 4, 2026
cb004f4
Match collector-mode assertion depth to agent mode
unflxw Jun 4, 2026
6793866
Cover the full Sidekiq probe metrics in collector
unflxw Jun 4, 2026
a15ac38
Port more probe/hook metrics to collector mode
unflxw Jun 4, 2026
b34af67
Cover transaction errors in collector mode
unflxw Jun 4, 2026
2de60d9
Tidy dead collector context and a logger invariant
unflxw Jun 4, 2026
96fdf52
Cover error-reporting helpers in collector mode
unflxw Jun 4, 2026
f68e366
Add dual-mode test infra for the unblocked specs
unflxw Jun 4, 2026
e5800eb
Dual-mode the Sinatra instrumentation spec
unflxw Jun 4, 2026
74e68f7
Dual-mode the Rake hook spec
unflxw Jun 4, 2026
8e95bb7
Dual-mode the at_exit hook spec
unflxw Jun 4, 2026
99b5189
Dual-mode the Webmachine integration spec
unflxw Jun 4, 2026
a6025bb
Dual-mode the Rack BodyWrapper spec
unflxw Jun 4, 2026
ece81e3
Let examples start the agent in the body
unflxw Jun 5, 2026
d0c0213
Co-locate error-reporting modes per describe
unflxw Jun 5, 2026
fa22843
Make it_in_both_modes start the agent in the body
unflxw Jun 5, 2026
6f4fc95
Start the agent in the body across dual-mode specs
unflxw Jun 5, 2026
729a904
Restore the notifier after AS notifications specs
unflxw Jun 5, 2026
02618e5
Drop the auto-start default and :manual_start
unflxw Jun 8, 2026
c03e613
Remove the unused webmachine 1 gemfiles
unflxw Jun 8, 2026
aa950b1
Dual-mode the Object and HTTP integration specs
unflxw Jun 8, 2026
2994098
Test the Mongo integration with the real driver
unflxw Jun 8, 2026
e42bbef
Pass raw sample data to the transaction backend
unflxw Jun 8, 2026
25079e2
Record params, session, custom data and tags
unflxw Jun 8, 2026
56b5fb1
Record request headers in collector mode
unflxw Jun 8, 2026
adcba50
Record metadata as tags; queue start is a no-op
unflxw Jun 8, 2026
c7e6479
Emit breadcrumbs as span events in collector mode
unflxw Jun 8, 2026
a72e9b8
Update set_sample_data spec for the raw-data seam
unflxw Jun 8, 2026
65ea45e
Update finish spec and stop a context leak
unflxw Jun 8, 2026
4507b39
Test metadata/tag key collision in collector mode
unflxw Jun 8, 2026
837dc27
Dual-mode the Ownership integration specs
unflxw Jun 8, 2026
c1a316b
Dual-mode the Puma integration specs
unflxw Jun 8, 2026
2d09600
Dual-mode the Resque integration specs
unflxw Jun 8, 2026
15b794c
Dual-mode the Active Job hook specs
unflxw Jun 8, 2026
6792054
Dual-mode the Sidekiq integration specs
unflxw Jun 8, 2026
dd43542
Dual-mode the Que integration specs
unflxw Jun 8, 2026
f731182
Dual-mode the code ownership integration specs
unflxw Jun 8, 2026
fbf53b4
Dual-mode the Delayed Job integration specs
unflxw Jun 8, 2026
f1f3632
Dual-mode the Action Cable hook specs
unflxw Jun 8, 2026
f56733e
Dual-mode the Shoryuken integration specs
unflxw Jun 8, 2026
1417ecf
Dual-mode the Railtie integration specs
unflxw Jun 8, 2026
06b3de1
Dual-mode the abstract Rack middleware specs
unflxw Jun 10, 2026
a8fddc1
Dual-mode the instrumentation middleware specs
unflxw Jun 10, 2026
ffa82b9
Dual-mode the Rack EventHandler specs
unflxw Jun 10, 2026
0aece91
Dual-mode the Rails instrumentation specs
unflxw Jun 10, 2026
9d61854
Dual-mode the Grape middleware specs
unflxw Jun 10, 2026
b37e7dc
Dual-mode the Hanami middleware specs
unflxw Jun 10, 2026
14f8bcd
Dual-mode the Padrino loader specs
unflxw Jun 10, 2026
ba8ad64
Dual-mode the Hanami loader specs
unflxw Jun 10, 2026
b0e7753
Dual-mode Appsignal.monitor and metadata setters
unflxw Jun 11, 2026
8b0b3df
Drop discarded subtraces via ignore_subtrace
unflxw Jun 11, 2026
7202019
Map event title to the OTel span name
unflxw Jun 12, 2026
4266964
Emit breadcrumbs on the current span
unflxw Jun 15, 2026
327e398
Drop gc_duration from the transaction backend seam
unflxw Jun 16, 2026
315e2f5
Emit queue timing in collector mode
unflxw Jun 16, 2026
bd4bf77
Move breadcrumb buffering into the agent backend
unflxw Jun 16, 2026
350936f
Compute error causes once, project per backend
unflxw Jun 16, 2026
6f739c2
Rename the multi-error backend capability flag
unflxw Jun 16, 2026
126f108
Add Transaction::BaseBackend base class
unflxw Jun 16, 2026
74fb114
Keep error and breadcrumb data on AppSignal spans
unflxw Jun 16, 2026
1bd50f7
Use web/background namespaces in collector mode
unflxw Jun 23, 2026
390e25d
Update collector namespace assertions in specs
unflxw Jun 23, 2026
cc42c54
Propagate trace context on Net::HTTP requests
unflxw Jun 23, 2026
835f993
Read incoming trace context in web requests
unflxw Jun 23, 2026
e88f60d
Bind the OTLP mock server to a random port
unflxw Jun 23, 2026
51f6df4
Link background jobs back to the enqueuing trace
unflxw Jun 23, 2026
1e27466
Link Sidekiq jobs back to the enqueuing trace
unflxw Jun 23, 2026
29854ab
Record Sidekiq enqueues as an AppSignal event
unflxw Jun 25, 2026
681a070
Build remote parent context in the backend spec
unflxw Jun 25, 2026
3fe676d
Reset the OTel propagator after collector specs
unflxw Jun 25, 2026
0f51a9d
Read serialized __otel_headers job context
unflxw Jun 25, 2026
346aeed
Record DataMapper queries as client spans
unflxw Jun 25, 2026
32af878
Record Redis queries as client spans
unflxw Jun 25, 2026
c76b0f4
Record redis-client queries as client spans
unflxw Jun 25, 2026
7ec9b8f
Record Sequel queries as client spans
unflxw Jun 25, 2026
d38b7a7
Record MongoDB queries as client spans
unflxw Jun 25, 2026
da2fd50
Propagate trace context on HTTP.rb requests
unflxw Jun 25, 2026
4cd64da
Propagate trace context on Resque jobs
unflxw Jun 25, 2026
b5b398b
Propagate trace context on Excon requests
unflxw Jun 25, 2026
9e7ef27
Fix and test Excon trace context injection
unflxw Jun 25, 2026
fd22795
Tag database event spans as OTel client spans
unflxw Jun 25, 2026
01450f0
Propagate trace context across ActiveJob jobs
unflxw Jun 25, 2026
4c41014
Rename Sidekiq enqueue event to enqueue.sidekiq
unflxw Jun 25, 2026
cc7b0a6
Read incoming trace context in Webmachine requests
unflxw Jun 25, 2026
78f60d8
Link Que jobs back to the enqueuing trace
unflxw Jun 25, 2026
01af8d6
Propagate trace context on Que enqueues
unflxw Jun 25, 2026
e39c7ce
Unify enqueue event names and OTel start gating
unflxw Jun 25, 2026
901c699
Route OTel context helpers through if_started
unflxw Jun 25, 2026
e65eb60
Guard the Excon integration spec behind the gem
unflxw Jun 25, 2026
618260b
Pin rubocop-ast below 1.49 to keep RuboCop green
unflxw Jun 25, 2026
c73d09d
Silence ParameterLists on record_event defs
unflxw Jun 25, 2026
049a4c3
Fix Excon hook spec middleware instantiation
unflxw Jun 25, 2026
aacc6ae
Skip Que enqueue specs on Que 1
unflxw Jun 25, 2026
2788f24
Keep the Gemfile gems alphabetically sorted
unflxw Jun 25, 2026
09df621
Remove the rubocop-ast version pin
unflxw Jun 26, 2026
c0eda28
Address review on Active Job enqueue refactor
unflxw Jul 3, 2026
c01619b
Add a Faraday integration
unflxw Jun 25, 2026
01a6d47
Test the Faraday integration on Faraday 1 and 2
unflxw Jun 25, 2026
b13bcdb
Suppress downstream HTTP under Faraday
unflxw Jun 25, 2026
14e7e75
Leave the path out of Faraday event titles
unflxw Jun 25, 2026
06e410d
Drop ActiveSupport from the Faraday integration
unflxw Jul 3, 2026
2a2ac91
Drop cop disables made redundant by the merge
unflxw Jul 3, 2026
ca1d06a
Harden Sidekiq enqueue instrumentation specs
unflxw Jul 3, 2026
f23561a
Instrument HTTP.rb via request and Session
unflxw Jul 3, 2026
0fc6b3b
Adopt main's integration refinements after rebase
unflxw Jul 3, 2026
8f0d133
Regenerate the CI workflow
unflxw Jul 3, 2026
a6b6ff1
Restore Que bulk enqueue instrumentation
unflxw Jul 3, 2026
b395267
Restore Shoryuken enqueue instrumentation
unflxw Jul 3, 2026
99a9e71
Add aws-sdk-sqs to the Shoryuken gemfile
unflxw Jul 3, 2026
556c482
Suppress nested enqueue events under Active Job
unflxw Jul 3, 2026
4c1f01b
Skip the Sidekiq enqueue event when suppressed
unflxw Jul 3, 2026
9def8cb
Skip the Resque enqueue event when suppressed
unflxw Jul 3, 2026
444e041
Skip the Que enqueue event when suppressed
unflxw Jul 3, 2026
c4859de
Skip the Shoryuken enqueue event when suppressed
unflxw Jul 3, 2026
84af757
Title the Active Job enqueue event with the job
unflxw Jul 3, 2026
a8897d1
Title the Sidekiq enqueue event with the job
unflxw Jul 3, 2026
20ef66b
Title the Resque enqueue event with the job
unflxw Jul 3, 2026
5763ae9
Title the Que enqueue events with the job
unflxw Jul 3, 2026
c297b2b
Title the Shoryuken enqueue event with the job
unflxw Jul 3, 2026
7cfeb52
Track Que bulk enqueue with our own flag
unflxw Jul 6, 2026
aa57fbc
Drop enqueue specs duplicated by the rebase
unflxw Jul 7, 2026
f6eaff9
Test Shoryuken 6/7 in agent and collector modes
unflxw Jul 7, 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
10 changes: 10 additions & 0 deletions .changesets/add-collector-attribute-options.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
bump: minor
type: add
---

Add configuration options that map to OpenTelemetry resource attributes under collector mode: `service_name`, `filter_attributes`, `filter_function_parameters`, `filter_request_query_parameters`, `filter_request_payload`, `response_headers`, `send_function_parameters`, `send_request_query_parameters`, and `send_request_payload`. These tell the AppSignal Collector how to filter and forward telemetry data.

When collector mode is active, existing configuration options (`name`, environment, `hostname`, `revision`, `ignore_actions`, `ignore_errors`, `ignore_namespaces`, `request_headers`, `filter_session_data`, `send_session_data`) are now passed to the collector as OpenTelemetry resource attributes.

Setting any of these options without `collector_endpoint`, or `filter_parameters`/`filter_metadata`/`send_params` with `collector_endpoint`, now logs a warning at startup.
19 changes: 19 additions & 0 deletions .changesets/add-collector-mode.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
bump: minor
type: add
---

Add a new `collector_endpoint` configuration option (`APPSIGNAL_COLLECTOR_ENDPOINT` environment variable) that puts the integration in _collector mode_. When set, AppSignal additionally configures an OpenTelemetry SDK that exports OTLP/HTTP protobuf traces, metrics, and logs to the configured endpoint. The existing AppSignal agent continues to run unchanged; no AppSignal-collected data flows through the OpenTelemetry SDK yet.

Collector mode requires Ruby 3.1 or newer and the OpenTelemetry gems, which are optional and not installed by default. To use it, add them to your application's `Gemfile`:

```ruby
gem "opentelemetry-sdk", ">= 1.8.0"
gem "opentelemetry-metrics-sdk", ">= 0.7.1"
gem "opentelemetry-logs-sdk", ">= 0.2.0"
gem "opentelemetry-exporter-otlp", ">= 0.30.0"
gem "opentelemetry-exporter-otlp-metrics", ">= 0.4.0"
gem "opentelemetry-exporter-otlp-logs", ">= 0.2.0"
```

If these gems are missing or older than the minimum versions, AppSignal logs a warning and falls back to the bundled agent.
2 changes: 1 addition & 1 deletion .changesets/add-faraday-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ bump: minor
type: add
---

Improve Faraday support. AppSignal now instruments Faraday requests automatically, without double-instrumenting the underlying HTTP client. Turn it off with the `instrument_faraday` option.
Improve Faraday support. AppSignal now instruments Faraday requests automatically, without double-instrumenting the underlying HTTP client, and, in collector mode, propagates trace context to the called service so it joins the same distributed trace. Turn it off with the `instrument_faraday` option.
6 changes: 6 additions & 0 deletions .changesets/add-que-distributed-tracing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
bump: minor
type: add
---

Improve Que support. In collector mode, AppSignal now propagates trace context when enqueuing Que jobs, so each job links back to the trace that enqueued it. This covers single and bulk enqueues, on both Que 1 and Que 2.
Loading
Loading