- Fix compatibility with
http >= 6.0.0(#613)
- Fix Redis 5 prepend interaction (#611)
- Ruby 4 support
- Update gem metadata
- Add
backtrace_additional_directoriesconfig option to allow additional directories to be included in the backtrace parser
- Fix
endpoint_sample_rateandjob_sample_rateto support float values
- Fix capturing of job params for non ActiveJob
Breaking Change
Sampling configuration options now take float arguments between 0.0 and 1.0. This means
you can now set sample rates lower than one. Backwards compatibility is maintained for
existing config > 1 by converting to a percentage internally. If your endpoint is
sampled at exactly 1%, you must now set 0.01 instead of 1.
- Add Prism AutoInstruments Support (#582) (#594)
- Add OpenSearch instrumentation (#563)
- Add HTTPX instrumentation (#588)
- Add ability to automatically capture Sidekiq job args as context
job_params_capture- Set to true to enable job argument capturingjob_params_filter- A list of arguments to filter (automatically includes Rails filtered_parameters)
- Fix user error context being incorrectly flattened (#581)
- Handle Delayed Job PerformableMethod jobs for error tracking (#584)
- Require 'httpclient' library on instrumentation install (#586)
- Add support for Puma 7.0 hook format (#589)
- Update sample rate to support floats (#564)
- Reintegrate Regex support for ignored URIs (#574)
- Add error monitoring to SolidQueue, faktory, goodjob, que, shoryuken, sneakers (#571)
- Treat exclusive time as total time for limited layers in background jobs (#576)
- Remove unused time util conflict with DeviseTokenAuth (#575)
- Add transaction ID to error records (#568)-
- Adds request method to captured error context (#577)
- Enable Delayed Job error tracking (#565)
- Update error capture API to use context (#560)
- Filter env in error records (#559)
- Fix native extension compilation with GCC 15 (#552)
- Handle non Rails/ActiveSupport applications w/ sampling (#557)
- Improve error capture API (#555)
- Add git sha and agent time tracking to error payloads (#554)
- Add support for named spaced jobs in sampling (#549)
- Use new ActiveJob class name and timestamp units for Sidekiq 8+ (#544)
- Fix deprecation warning for Sidekiq 7.1.5+ (#535)
- Add support for Mongoid 8 and 9. Remove support for old versions. (#538)
- Detect deployed SHA from Kamal (#528)
- Fix
job_sample_rateandendpoint_sample_ratedefault configuration values (#529)
- New options for sampling and ignore configuration (#521)
sample_rate- Set the rate at which requests are sampled globally (1-100, a percentage of requests to keep).ignore_endpoints- Ignore endpoints by regex matching prefix (Same as and replacesignore)sample_endpoints- Sample endpoints by regex matching prefix (i.e. ['/foo:70']).endpoint_sample_rate- Set the rate at which all non-matching web requests are sampled.ignore_jobs- Ignore Jobs by explicit name match.sample_jobs- Sample Jobs by explicit name match (i.e. ['MyJob:70']).job_sample_rate- Set the rate at which all non-matching background jobs are sampled.
- Fix undeclared logger in grape instruments (#510)
- Drop guaranteed support for Rubies <= 2.4
- Instrument Resque without relying on forking per job (#514)
- Add support for GoodJob (#506)
- Add support for Solid Queue (#508)
- Avoid inaccurate websocket queue time capturing (#494)
- Fix parser dependency issue
- Fix AutoInstruments when instrumenting hash with shorthand (#486)
- Fix Connection Handling deprecation in ActiveRecord for Rails 7.1 (#483)
- Update ActionView partial instrumentation for Rails 7 (#487)
- Fix adding instrumentation of ActiveRecord after configuration has initialized for Rails versions greater than 3. (#465)
- Fix typo with double use of PercentilePolicy, instead of PercentPolicy, for scoring. (#468)
- Fix span annotations/desc for external service requests with the use of prepend. (#471)
- Fix ActiveSupport methods and replace them with non ActiveSupport methods. (#474)
Unused.
- Fix double firing of Puma
on_worker_bootwhen preloading. (#463)
- Update redis instruments to support redis v5.0+ (#458)
- Fix typo in HTTPClient prepend instrumentation (#457)
- Add configuraiton option to use
Module#prependinstead ofModule#alias_method(default) for instrumentation (#448). The default method for instrumentation has not changed, but configuration options were added to allow switching toModule#prependfor most instrumentation. Refer to the documentation for more information: Library Instrumentation Method
- Use Sidekiq lifecycle hooks to start Scout agent on Sidekiq start. (#449)
- Improvements to SqlServer scrubbing in SqlSanitizer (#422)
- Specify correct (MIT) license in Gemspec (#430)
- Install HTTP::Client instruments (#420)
- Sanitize FROM jsonb_as_recordset AS correctly in Postgres (#332)
- Call to_h on
ActiveRecord::Base.configurations(#434) - Allow loading of trusted
config/scout_apm.ymlviaYAML.unsafe_loadif available (#435) - Better exception handling when loading config (#436)
- Check for nil other_metric_set in merge_external_service_metrics (#437)
- Log
warnin InstructionSequence only if SCOUT_LOG_LEVEL is debug (#438) - Check for Parser::TreeRewriter before loading AutoInstruments to avoid LoadError (#440)
- Fall back to STDERR upon exception in build_logger (#441)
- Add External Service metrics reporting (#403)
- Relicense to MIT (#429)
- Opt out of frozen string literals in select files (#427)
- Fall back when logger can't write to destination (#423)
- Avoid exception on race condition (#407)
- Add Mina deploy tracking support (#327)
- Add record_queue_time configuration (PR #422)
- Fix issue with Typheous Hydra instrument (#418)
- Preload Celluloid in Shoryuken instrumentation (#331)
- Fix deprecation warning in Rails 6.1+ (#365)
- Set Typheous's desc more directly (#392)
- Delegate to ActiveRecord #log more intelligently (#394)
- Don't delay starting agent when possible (#397)
- Fix template naming issue in Rails 6+ (#399)
- Avoid double-counting issue with AutoInstruments (#405)
- Renaming test files for Remote::{Server|Route|Message} to be included in test run (#409)
- More robust naming of Sidekiq jobs (#412)
- Allow render_template instruments to work with older Rails (#413)
- Fix function to manually capture exceptions (#415)
- Enhance SQL Sanitization (#417)
- Add Faktory Support (#385)
- Remove Regexp hack for 1.8.7 (no longer supported) (#384)
- More robust DelayedJob detection (#382)
- Fix kwargs handling in Tracing module (#381)
- Handle edge case with nil Typhoeus current-layer (#380)
- Fix args passing to render_partial (#379)
- Add Typhoeus instrumentation (#376)
- Add support for Ruby 3.0 (#374)
- Use Github Actions for CI (#370)
- Fix edge case in sanitization of Postgres SQL (#368)
- Require Ruby >= 2.1 (#270)
- ErrorService reporting. Enable with
errors_enabledconfig setting. (#347) - Modular SlowRequestPolicy (#364)
- Fix deprecation warnings (#354)
- Fix an edge case in JSON serialization (#360)
- Add
ssl_cert_fileconfig option (#352) - Improve sanitization of Postgres UPDATE SQL (#351)
- Allow custom URL sanitization (#341)
- Lock rake version for 1.8.7 to older version (#329)
- Delete unneeded .DS_Store file that snuck in (#334)
- Fix typo in "queue_time_ms"
- Fix Rails 6 deprecation warning at boot time (#337)
- Fix partial naming on Rails 6.0 (#339)
- Support Sidekiq 6.1 instrumentation (#340)
- Remove accidental call to
as_json
- Add basic support for parsing Microsoft SQLServer queries (#317)
- Refine Postgresql Sanitization with subqueries and JSON operations (#262)
- Add a tag to any requests that reach maximum number of spans (#316)
- Update testing library Mocha (#315)
- Fix case sensitivity mismatch in Job renaming (#314)
- Add support for Sneakers 2.5 (#313)
- Fix edge case with Resque instrumentation (#312)
- Fix missing source code when used with BugSnag (#308)
- Add defensive check against a nil @address in Net/HTTP instruments (#306)
- Standardize Metadata with other language agents (#302)
- Add Mongoid 7.x support (#295)
- Add HTTP::Client support (#260)
- Fix Autoinstruments logging when running without ActiveSupport (#290)
- Fix edge-case Autoinstruments syntax error (#287)
- Fix invalid syntax for running on Ruby 1.8.7
- Logging total autoinstrumented spans and the ratio of significant to total spans (#283).
- Added
autoinstruments_ignoreoption (also #283).
- Autoinstruments (#247). Disabled by default. Set
auto_instruments: trueto enable.
- Add Que support (#265)
- Add Memcached support (#279)
- Don't process limited layers in detailed traces (#268)
- Fix OctoShark (and other gems which patch ActiveRecord) interaction (#217)
- Legacy Rails 2.3 fix for as_json
- Decrease timeline trace span limit to 1,500 to address this bug.
- Added timeline traces and an associated
timeline_traces: trueconfig option. - Increased timeline traces span limit to 2,500 from 500.
- Fix for prepending view instruments in the case of templates that lack a
virtual_path(#257).
- Extend #251 to use prepend on all view instruments (#255)
- Support Rails 6.0 View Instruments (#251)
- Update documentation URLs (#236)
- App & Background Integrations only install when needed (#228)
- New Setting
collect_remote_ip, to optionally disable automated capture of end-user IP Address. No change to default behavior. - Allow setting
compress_payloadoption from ENV var (#234)
start_resque_server_instrumentoption to allow disabling the WEBrick server component in custom installation scenarios- Allow setting
revision_shasetting in YAML
- Fix disabled_instruments (#220)
- Add Shoryuken Support (#215)
- Add Sneakers Support (#216)
- Renames SQL
BEGINandCOMMITstatements fromSQL#othertoSQL#beginandSQL#commit, respectively. - Makes naming between transaction and database metrics consistent. Previously, database metrics lacking a provided ActiveRecord label were named
SQL#other.
- Fix synchronization bug in Store (#205, PR #210)
- Fix bug that causes no data to be reported to Scout when DataDog is installed (#211)
- Fix
NoMethodError for LayerChildrenSetwhenlog_level: debugin certain situations.
- Fix database connection issue when installed in an app also using the Textacular gem
- Incorporating total time consumed into transaction trace policy
- Calculates DelayedJob queue latency correctly when jobs are scheduled to run in the future
- Adds transaction + periodic reporting callback extension support
- Use Module#prepend if available for ActiveRecord
exec_queryinstrument
- Improve ActiveRecord instrumentation across Rails 3.2+, and adding support for the newly released Rails 5.2
- ScoutApm::Transaction#rename and #ignore API
- Explicit custom instrumentation with ScoutApm::Tracer#instrument blocks, without needing to include a module
- Quieter logging in normal startup cases
- Upgraded testing infrastructure
- Fix issue with detailed middleware instrumentation
- Fix issue recording backtraces
- Fix an edge case for Resque instrumentation
- More robust installation of instruments at startup
- Several (very) minor bug fixes
- Prevent agent from starting when monitor=false
- Fix double-counting of HTTP requests when multiple http libraries are present
- Fix an issue with Resque instrumentation
- Ensure a startup hook runs on forking webservers
- Fix shutdown hook for Passenger
- Fix logging on STDOUT only platforms (Heroku)
- Rework agent startup sequence
- Install all background job instrumentations if you're running more than one
- Capture longer individual SQL statements
- Capture multiple SQL statements if multiple are run during a single AR call.
- More robust recovery from stale layaway files
- Quiet logging when hitting unusual layaway file limits
- Better naming for Sidekiq delayed method jobs
- Webrick is only required if actually needed
- Capture 300 characters of a url from net/http and httpclient instruments (up from 100).
- Capture ActiveRecord calls that generate more complex queries
- More aggressively determine names of complex queries (to determine "User/find", "Account/create" and similar)
- Increases the maximum size of SQL queries that are sanitized to 16KB from 4 KB
- Captures all SQL individual queries generated in a given AR call (previous only a single query was captured)
- More robust startup sequence when using
rails servervs. directly launching an app server - Avoid incompatibility with 3rd party gems that aggressively obtain database connections
- Fix DevTrace bug
Note: ScoutApm Agent version 2.2.0 was the initial ScoutProf agent that was determined quickly to be a big enough change to warrant the move to 3.0. We are not reusing that version number to avoid confusion.
- Deeper database query instrumentation. The agent now collects app-wide database usage on every call. This will allow you to better identify persistently slow queries, and capacity bottlenecks.
- Optimize the approach used during recording each request to avoid unnecessary work, improving performance
- Better naming when using Resque + ActiveJob
- Better naming when using Sidekiq + DelayedExtension
- Better detection of Resque queue names
- Fix passing arguments through Active Record instrumentation. (Thanks to Nick Quaranto for providing the fix)
- Stricter checks to prevent agent from starting in Rails console
- Add Resque support.
- Add
scm_subdirectoryoption. Useful for when your app code does not live in your SCM root directory.
- Changes to app server load data
- Don't attempt to call
current_layer.typeon nil
- Bug fix 4b188d6
- Automatically instrument API and Metal controllers.
- Capture additional layers of application backtrace frames. (From 3 -> 8)
- Extend Mongoid instrumentation to 6.x
- Add DevTrace support for newest 4.2.x and 5.x versions of Rails
- Fix edge case, causing DevTrace to fail
- Add debug tooling, allowing custom functions to be inserted into the agent at key points.
- Add a
detailed_middlewareboolean configuration option to capture per-middleware data, as opposed to the default of aggregating all middleware together. This has a small amount of additional overhead, approximately 10-15ms per request.
- Log all configuration settings at start when log level is debug
- Tune DelayedJob class name detection
- Max layaway file threshold limit
- Additional logging around file system usage
- Extract the name correctly for DelayedJob workers run via ActiveJob
- Limit memory usage for very long running requests.
- Add TrackedRequest#ignore_request! to entirely ignore and stop capturing a certain request. Use in your code by calling: ScoutApm::RequestManager.lookup.ignore_request!
- Rework Delayed Job instrumentation to not interfere with other instruments.
- Revert 2.1.11's Delayed Job change - caused issues in a handful of environments
- Support alternate methods of launching Delayed Job
- Fix issue getting a default Application Name when it wasn't explicitly set
- Send raw histograms of response time, enabling more accurate 95th %iles
- Raw histograms are used in Apdex calculations
- Gzip payloads
- Fix Mongoid (5.0) + Mongo (2.1) support
- Initial Delayed Job support
- Limit max metric size of a trace to 500.
- Adds Git revision detection, which is reported on app load and associated with transaction traces
- Fix allocations extension compilation on Ruby 1.8.7
- Support older versions of Grape (0.10 onward)
- Vendor rusage library
- Fix double-exit that caused error messages when running under Passenger
- Be less strict loading Rails environments that don't have a matching scout_apm.yml section. Previously we raised, now we log and continue to load with the ENV settings
- Fix a memory leak in error recovery code
- Fix a minor race condition in data coordination between processes.
- There was a tiny sliver of a window where a lock wasn't held, and it caused an exception to be raised.
- Enhance regular expression that determines if a backtrace line is "inside"
the application
- Avoids labeling vendor/ as part of the monitored app
- Less noisy output on errors with Context
- Not logging errors w/nil keys or values
- Bumping log level down from WARN => INFO on errors
- Fix error with complicated AR queries
- Caused high log noise
- Sidekiq instrumentation changes to handle a variety of edge cases
- Applies
Rails.application.config.filter_parameterssettings to reported transaction trace uris - Fix incompatibility with ResqueWeb and middleware instrumentation
- Fix an issue with AR instrumentation and complex queries
- Fix use of configuration option
data_file - Update unit tests
- Added ignore key to configuration to entirely ignore an endpoint. No traces or metrics will be collected. Useful for health-check endpoints.
- Better logging for DevTrace
- Reporting object allocation & mem delta metrics and mem delta for requests and jobs.
- Collecting additional fields for transactions:
- hostname
- seconds_since_startup (larger memory increases and other other odd behavior more common when close to startup)
- Remove unused & old references to Stackprof
- Fixing exception on load if no config file is provided
- DevTrace BETA
- Don't wait on a sleeping thread during shutdown
- Mongoid bugfixes
- Bugfix related to DB detection
- Add Mongoid 5.x support
- Fix autodetection of mysql databases
- Add Grape instrumentation
- Handle DATABASE_URL configurations better
- Change default (undeteced) database to Postgres (was Mysql)
- Handle nil ignore_traces when ignoring trace patterns
- Use a more flexible approach to storing "Layaway Files" (the temporary data files the agent uses).
- Remove old & unused references to Stackprof. Prevent interaction with intentional usage of Stackprof
- Dynamic algorithm for selecting when to collect traces. Now, we will collect a more complete cross-section of your application's performance, dynamically tuned as your application runs.
- Record and report 95th percentiles for each action
- A variety of bug fixes
- Handle backslash escaped quotes inside mysql strings.
- Fix issue where error counts were being misreported
- Politely ignore cases when
request.remote_ipraises exceptions.
- Fix another minor bug related to iso8601 timestamps
- Force timestamps to be iso8601 format
- Add
ignore_tracesconfig option to ignore SlowTransactions from certain URIs.
- Background Job instrumentation for Sidekiq and Sidekiq-backed ActiveJob
- Collecting backtraces on n+1 calls
- Defend against a nil
- Instrument Elasticsearch
- Instrument InfluxDB
- Instrument Mongoid
- Instrument Redis
- Add a to_s call to have HTTPClient work with URI objects. Thanks to Nicolai for providing the change!
- Add HTTPClient instrumentation
- Fix JSON encoding of special characters
- Release JSON reporting
- Fix backtracking issue with on of the SQL sanitization regexes
- Handling nil scope in LayerSlowTransactionConverter
- Lazy metric naming for ActiveRecord calls
- SQL Sanitation-Related performance improvements:
- Lazy sanitation of SQL queries: only running when needed (a slow transaction is recorded)
- An SQL sanitation performance improvement (strip! vs. gsub!)
- Removing the TRAILING_SPACES regex - not used across all db engines and adds a bit more overhead
- Add uri_reporting option to report bare path (as opposed to fullpath). Default is 'fullpath'; set to 'path' to avoid exposing URL parameters.
- Summarizing middleware instrumentation into a single metric for lower overhead.
- If monitoring isn't enabled:
- In ScoutApm::Middleware, don't start the agent
- Don't start background worker
- Improve exit handler. It wasn't being run during shutdown in some cases.
- Uses ActiveRecord::Base.configurations to access database adapter across all versions of Rails 3.0+.
- Enhance shutdown code to be sure we save current-minute metrics and minimize the amount of work necessary.
- Clarifying that Rails3 instrumentation also supports Rails4
- Fix a bug when determining the name of metrics for ActiveRecord queries
- Instrument ActionController::Base instead of ::Metal. This allows us to track time spent in before and after filters, and requests that return early from before filters.
- Avoid parsing backtraces for requests that don't end up as Slow Transactions
- Reverting backtrace parser threshold back to 0.5 (same as < v1.2 agents)
- Removing layaway file validation in main thread
- Fixing :force so agent will start in tests
- Rate-limiting slow transactions to 10 per-reporting period
- Trimming metrics from slow requests if there are more than 10.
- Collapse middleware recordings to minimize payload size
- Limit slow transactions recorded in full detail each minute to prevent overloading payload.
- Fix a small issue where the middleware that attempts to start the agent could mistakenly detect that the agent was running when in fact it wasn't.
- Middleware tracing - Track time in the Rack middleware that Rails sets up
- Queue Time tracking - Track how much time is spent in the load balancer
- Solidify support for threaded app servers (such as Puma or Thin)
- Major refactor of internals to allow more flexibility for future features
- Several bug fixes
- General Availability
- More robust Application Server detection
- Added Cloud Foundry detection
- Added hostname config option
- Reporting PaaS in app server load (Heroku or Cloud Foundry).
- Fallback to a middleware to launch the agent if we can't detect the application server for any reason
- Added agent version to checkin data
- Fix more 1.8.7 syntax errors
- Fix 1.8.7 syntax error
- Detect database connection correctly on Rails 3.0.x
- Detect and warn if the old ScoutRails plugin is installed, since it causes an conflict.
- Parse SQL correctly when using PostGIS
- Quiet overly aggressive logging during startup. You can still turn up logging by setting the SCOUT_LOG_LEVEL environment variable to 'DEBUG'
- Various minor bug fixes and clarification of log messages
- Internal changes and bug fixes.
- Minor change in Stackprof processing code. Any exception that happens there should never propagate out to the application
Big set of features getting merged in for this release.
- StackProf support! Get visibility into your Ruby code. On Ruby 2.1+, just
add
gem 'stackprof'to your Gemfile. - Deploy tracking! Compare your application's response time, throughput and
error rate between different releases. At the bottom of your Capistrano
deploy.rb file, add
require 'scout_apm'and we do the rest. - Log message overhaul. Removed a lot of the noise, clarified messages.
- Come out of alpha, and release a beta version.
- Initial support for Sinatra monitoring.
- Add new
application_rootoption to override the autodetected location of the application.
- Add new
data_fileoption to configuration, to control the location of the temporary data file. Still defaults to log/scout_apm.db. The file location must be readable and writeable by the owner of the Ruby process
- Fix support for ActiveRecord and ActionController instruments on Rails 2.3
- Fix Puma integration. Now detects both branches of preload_app! setting.
- Enhance Cpu instrumentation
- Post on-load application details in a background thread to prevent potential pauses during app boot
- Prevent instrumentation in non-web contexts. Prevents agent running in rails console, sidekiq, and similar contexts.
- Send active Gems with App Load message
- Added environment (production, development, etc) to App Load message
- Bugfix in Reporter class
- Ping APM on Application Load
- Fix compatibility with Ruby 1.8 and 1.9
- Ability to ignore child calls in instrumentation.
- Fix issues with Ruby 1.8.7 regexes
- SQL sanitization now collapses IN (?,?,?) to a single (?)
- Tweaks to Postgres query parsing
- Fix for missing scout_apm.yml file causing rake commands to fail because of a missing log file.
- Adds Puma support
- Fix for returning true for unicorn? and rainbows? when they are included in the Gemfile but not actually serving the app.
- Adds capacity calculation via "Instance/Capacity" metric.
- Tweaks tracing to still count a transaction if it results in a 500 error and includes it in accumulated time.
- Adds per-transaction error tracking (ex: Errors/Controller/widgets/index)
- Adds Heroku support:
- Detects Heroku via the 'DYNO' environment variable
- Defaults logger to STDOUT
- uses the dyno name vs. the hostname as the hostname
- Environment vars with "SCOUT_" prefix override any settings specified in the config file.
- Store the start time of slow requests.
- Boom.