Releases: getsentry/sentry-ruby
5.13.0
Features
-
Make additional job context available to traces_sampler for determining sample rate (sentry-delayed_job) #2148
-
Add new
config.rails.active_support_logger_subscription_itemsto allow customization breadcrumb data of active support logger #2139config.rails.active_support_logger_subscription_items["sql.active_record"] << :type_casted_binds config.rails.active_support_logger_subscription_items.delete("sql.active_record") config.rails.active_support_logger_subscription_items["foo"] = :bar
-
Enable opting out of patches #2151
Bug Fixes
5.12.0
Features
- Record client reports for profiles #2107
- Adopt Rails 7.1's new BroadcastLogger #2120
- Support sending events after all retries were performed (sentry-resque) #2087
- Add Cron Monitoring support
-
Add
Sentry.capture_check_inAPI for Cron Monitoring #2117You can now track progress of long running scheduled jobs.
check_in_id = Sentry.capture_check_in('job_name', :in_progress) # do job stuff Sentry.capture_check_in('job_name', :ok, check_in_id: check_in_id)
-
Add
Sentry::Cron::MonitorCheckInsmodule for automatic monitoring of jobs #2130Standard job frameworks such as
ActiveJobandSidekiqcan now use this module to automatically capture check ins.class ExampleJob < ApplicationJob include Sentry::Cron::MonitorCheckIns sentry_monitor_check_ins def perform(*args) # do stuff end end
class SidekiqJob include Sidekiq::Job include Sentry::Cron::MonitorCheckIns sentry_monitor_check_ins def perform(*args) # do stuff end end
You can pass in optional attributes to
sentry_monitor_check_insas follows.# slug defaults to the job class name sentry_monitor_check_ins slug: 'custom_slug' # define the monitor config with an interval sentry_monitor_check_ins monitor_config: Sentry::Cron::MonitorConfig.from_interval(1, :minute) # define the monitor config with a crontab sentry_monitor_check_ins monitor_config: Sentry::Cron::MonitorConfig.from_crontab('5 * * * *')
-
Bug Fixes
- Rename
http.methodtohttp.request.methodinSpan::DataConventions#2106 - Increase
Envelope::Item::MAX_SERIALIZED_PAYLOAD_SIZEto 1MB #2108 - Fix
db_configbeginnilinActiveRecordSubscriber#2111- Fixes #2109
- Always send envelope trace header from dynamic sampling context #2113
- Improve
TestHelper's setup/teardown helpers (#2116)- Fixes #2103
- Fix Sidekiq tracing headers not being overwritten in case of schedules and retries #2118
- Fix exception event sending failed due to source sequence is illegal/malformed utf-8 #2083
- Fixes #2082
5.11.0
Features
-
Make
:valueinSingleExceptionInterfacewritable, so that it can be modified inbefore_sendunderevent.exception.values[n].value#2072 -
Add
sampledfield todynamic_sampling_context#2092 -
Consolidate HTTP span data conventions with OpenTelemetry with
Sentry::Span::DataConventions#2093 -
Consolidate database span data conventions with OpenTelemetry for ActiveRecord and Redis #2100
-
Add new
config.trace_propagation_targetsoption to set targets for which headers are propagated in outgoing HTTP requests #2079# takes an array of strings or regexps config.trace_propagation_targets = [/.*/] # default is to all targets config.trace_propagation_targets = [/example.com/, 'foobar.org/api/v2']
-
Tracing without Performance
- Implement
PropagationContextonScopeand addSentry.get_trace_propagation_headersAPI #2084 - Implement
Sentry.continue_traceAPI #2089
The SDK now supports connecting arbitrary events (Errors / Transactions / Replays) across distributed services and not just Transactions.
To continue an incoming trace starting with this version of the SDK, useSentry.continue_traceas follows.# rack application def call(env) transaction = Sentry.continue_trace(env, name: 'transaction', op: 'op') Sentry.start_transaction(transaction: transaction) end
To inject headers into outgoing requests, use
Sentry.get_trace_propagation_headersto get a hash of headers to add to your request. - Implement
Bug Fixes
- Duplicate
Rails.loggerbefore assigning it to the SDK (#2086)
5.10.0
5.9.0
Features
-
Add new boolean option
config.enable_tracingto simplify enabling performance tracing #2005config.enable_tracing = truewill settraces_sample_rateto1.0if not set alreadyconfig.enable_tracing = falsewill turn off tracing even iftraces_sample_rate/traces_sampleris setconfig.enable_tracing = nil(default) will keep the current behaviour
-
Allow ignoring
excluded_exceptionswhen manually capturing exceptions #2007Users can now ignore the SDK's
excluded_exceptionsby passingignore_exclusionshint when usingSentry.capture_exception.# assume ignored_exception.class is included in config.excluded_exception Sentry.capture_exception(ignored_exception) # won't be sent to Sentry Sentry.capture_exception(ignored_exception, hint: { ignore_exclusions: true }) # will be sent to Sentry
-
Support capturing low-level errors propagated to Puma #2026
-
Add
spectoBacktrace::APP_DIRS_PATTERN#2029 -
Forward all
baggageheader items that are prefixed withsentry-#2025 -
Add
stackprofbased profiler #2024The SDK now supports sending profiles taken by the
stackprofgem and viewing them in the Profiling section.To use it, first add
stackprofto yourGemfileand make sure it is loaded beforesentry-ruby.# Gemfile gem 'stackprof' gem 'sentry-ruby'
Then, make sure both
traces_sample_rateandprofiles_sample_rateare set and non-zero in your sentry initializer.# config/initializers/sentry.rb Sentry.init do |config| config.dsn = "<dsn>" config.traces_sample_rate = 1.0 config.profiles_sample_rate = 1.0 end
Some implementation caveats:
- Profiles are sampled relative to traces, so if both rates are 0.5, we will capture 0.25 of all requests.
- Profiles are only captured for code running within a transaction.
- Profiles for multi-threaded servers like
pumamight not capture frames correctly when async I/O is happening. This is astackproflimitation.
Warning
Profiling is currently in beta. Beta features are still in-progress and may have bugs. We recognize the irony.
If you have any questions or feedback, please email us at profiling@sentry.io, reach out via Discord (#profiling), or open an issue.
Bug Fixes
5.8.0
Features
-
Allow tags to be passed via the context hash when reporting errors using ActiveSupport::ErrorReporter and Sentry::Rails::ErrorSubscriber in
sentry-rails#1932 -
Pass a
cached: truetag for SQL query spans that utilized the ActiveRecord QueryCache when using ActiveRecordSubscriber insentry-rails#1968 -
Add
Sentry.add_global_event_processorAPI #1976Users can now configure global event processors without configuring scope as well.
Sentry.add_global_event_processor do |event, hint| event.tags = { foo: 42 } event end
-
Add global event processor in OpenTelemetry
SpanProcessorto link errors with transactions #1983 -
Fix some inconsistencies in setting name/op/status in OpenTelemetry
SpanProcessor#1987 -
Add
config.before_send_transactionhook #1989Users can now configure a
before_send_transactioncallback that runs similar tobefore_sendbut for transaction events.config.before_send_transaction = lambda do |event, hint| # skip unimportant transactions or strip sensitive data if event.transaction == "/healthcheck/route" nil else event end end
-
Support
Sentry::Transaction#set_measurement#1838Usage:
transaction = Sentry.get_current_scope.get_transaction transaction.set_measurement("metrics.foo", 0.5, "millisecond")
Bug Fixes
- Support redis-rb 5.0+ #1963
- Fixes #1932
- Skip private _config context in Sidekiq 7+ #1967
- Fixes #1956
- Return value from
perform_actionin ActionCable::Channel instances when initialized #1966 Span#with_child_spanshould finish the span even with exception raised #1982- Fix sentry-rails' controller span nesting #1973
- Fixes #1899
- Do not report exceptions when a Rails runner exits with
exit 0#1988 - Ignore redis key if not UTF8 #1997
- Fixes #1992
Miscellaneous
- Deprecate
capture_exception_frame_localsin favor ofinclude_local_variables#1993
5.7.0
Features
- Expose
span_idinSpanconstructor #1945 - Expose
end_timestampinSpan#finishandTransaction#finish#1946 - Add
Transaction#set_contextapi #1947 - Add OpenTelemetry support with new
sentry-opentelemetrygem-
Add
config.instrumenterto switch between:sentryand:otelinstrumentation #1944The new
sentry-opentelemetrygem adds support to automatically integrate OpenTelemetry performance tracing with Sentry. Give it a try and let us know if you have any feedback or problems with using it.
-
5.6.0
Features
-
Allow users to configure their asset-skipping pattern #1915
Users can now configure their own pattern to skip asset requests' transactions
Sentry.init do |config| config.rails.assets_regexp = /my_regexp/ end
-
Use
Sentry.with_child_spanin redis and net/http instead ofspan.start_child#1920- This might change the nesting of some spans and make it more accurate
- Followup fix to set the sentry-trace header in the correct place #1922
-
Use
Exception#detailed_messagewhen generating exception message if applicable #1924 -
Make
sentry-sidekiqcompatible with Sidekiq 7 #1930
Bug Fixes
-
Sentry::BackgroundWorkerwill releaseActiveRecordconnection pool only when theActiveRecordconnection is established -
Remove bad encoding arguments in redis span descriptions #1914
- Fixes #1911
-
Add missing
initialized?checks tosentry-rails#1919- Fixes #1885
-
Update Tracing Span's op names #1923
Currently, Ruby integrations' Span op names aren't aligned with the core specification's convention, so we decided to update them altogether in this PR.
If you rely on Span op names for fine-grained event filtering, this may affect the data your app sends to Sentry.
Also make sure to update yourtraces_samplerif you rely on theopfor filtering some requests.
Refactoring
- Make transaction a required argument of Span #1921
5.5.0
Features
-
Support rack 3 #1884
- We no longer need the
HTTP_VERSIONcheck for ignoring the header
- We no longer need the
-
Add Dynamic Sampling support
The SDK now supports Sentry's Dynamic Sampling product.Note that this is not supported for users still using the
config.asyncoption.- Parse incoming W3C Baggage Headers and propagate them to continue traces #1869
- in all outgoing requests in our net/http patch
- in Sentry transactions as Dynamic Sampling Context
- Create new Baggage entries as Head SDK (originator of trace) #1898
- Add Transaction source annotations to classify low quality (high cardinality) transaction names #1902
- Parse incoming W3C Baggage Headers and propagate them to continue traces #1869