Sentry SDK for Ruby
sentry-delayed_job
#2233
hint:
support to Sentry::Rails::ErrorSubscriber
#2235
Add main APIs and Aggregator
thread #2247
Add Sentry::Metrics.timing
API for measuring block duration #2254
Add metric summaries on spans #2255
Add config.metrics.before_emit
callback #2258
Add code locations for metrics #2263
The SDK now supports recording and aggregating metrics. A new thread will be started for aggregation and will flush the pending data to Sentry every 5 seconds.
To enable this behavior, use:
Sentry.init do |config|
# ...
config.metrics.enabled = true
end
And then in your application code, collect metrics as follows:
# increment a simple counter
Sentry::Metrics.increment('button_click')
# set a value, unit and tags
Sentry::Metrics.increment('time', 5, unit: 'second', tags: { browser:' firefox' })
# distribution - get statistical aggregates from an array of observations
Sentry::Metrics.distribution('page_load', 15.0, unit: 'millisecond')
# gauge - record statistical aggregates directly on the SDK, more space efficient
Sentry::Metrics.gauge('page_load', 15.0, unit: 'millisecond')
# set - get unique counts of elements
Sentry::Metrics.set('user_view', 'jane')
# timing - measure duration of code block, defaults to seconds
# will also automatically create a `metric.timing` span
Sentry::Metrics.timing('how_long') { sleep(1) }
# timing - measure duration of code block in other duraton units
Sentry::Metrics.timing('how_long_ms', unit: 'millisecond') { sleep(0.5) }
You can filter some keys or update tags on the fly with the before_emit
callback, which will be triggered before a metric is aggregated.
Sentry.init do |config|
# ...
# the 'foo' metric will be filtered and the tags will be updated to add :bar and remove :baz
config.metrics.before_emit = lambda do |key, tags|
return nil if key == 'foo'
tags[:bar] = 42
tags.delete(:baz)
true
end
end
By default, the SDK will send code locations for unique metrics (defined by type, key and unit) once a day and with every startup/shutdown of your application. You can turn this off with the following:
Sentry.init do |config|
# ...
config.metrics.enable_code_locations = false
end
sentry-resque
(#2248)sending_allowed?
is respected irrespective of spotlight configuration (#2231)
Add backpressure handling for transactions #2185
The SDK can now dynamically downsample transactions to reduce backpressure in high
throughput systems. It starts a new BackpressureMonitor
thread to perform some health checks
which decide to downsample (halved each time) in 10 second intervals till the system
is healthy again.
To enable this behavior, use:
Sentry.init do |config|
# ...
config.traces_sample_rate = 1.0
config.enable_backpressure_handling = true
end
If your system serves heavy load, please let us know how this feature works for you!
Implement proper flushing logic on close
for Client Reports and Sessions #2206
Support cron with timezone for sidekiq-scheduler
patch #2209
Add Cron::Configuration
object that holds defaults for all MonitorConfig
objects #2211
Sentry.init do |config|
# ...
config.cron.default_checkin_margin = 1
config.cron.default_max_runtime = 30
config.cron.default_timezone = 'America/New_York'
end
Clean up logging #2216
Pick up config.cron.default_timezone from Rails config #2213
Don't add most scope data (tags/extra/breadcrumbs) to CheckInEvent
#2217
sentry-cli
and other Sentry SDKs #2174
Add support for sidekiq-cron
#2170
You can opt in to the sidekiq-cron
patch and we will automatically monitor check-ins for all jobs listed in your config/schedule.yml
file.
config.enabled_patches += [:sidekiq_cron]
Add support for sidekiq-scheduler
#2172
You can opt in to the sidekiq-scheduler
patch and we will automatically monitor check-ins for all repeating jobs (i.e. cron
, every
, and interval
) specified in the config.
config.enabled_patches += [:sidekiq_scheduler]
sidekiq-ruby
error handler #2160
Delayed::Job.max_attempts
if it's defined #2176
Net::HTTP
instrumentation won't work for some IPv6 addresses #2180