ThreadError
from being raised on process exit when Appsignal.stop
is called from a Signal.trap
block, like when Puma shuts down in clustered mode.View the Ruby gem v4.0.8 changelog for more information.
ErrorEvent
instances to be reported to AppSignal.View the @appsignal/javascript v1.3.31 changelog for more information.
#<Date>
and #<Time>
. Now they will show as #<Date: 2024-09-11>
and #<Time: 2024-09-12T13:14:15+02:00>
(UTC offset may be different for your time objects depending on the server setting).View the Ruby gem v4.0.7 changelog for more information.
arguments
key for positional arguments and keyword_arguments
for Ruby keyword arguments.View the Ruby gem v4.0.6 changelog for more information.
View the Elixir for Phoenix package v2.5.0 changelog for more information.
lowlevel_error
reporter. This will report errors previously not caught by our instrumentation middleware.Log a warning when loader defaults are added after AppSignal has already been configured.
# Bad Appsignal.configure # or Appsignal.start Appsignal.load(:sinatra) # Good Appsignal.load(:sinatra) Appsignal.configure # or Appsignal.start
Rename the path
and method
transaction metadata to request_path
and request_method
to make it more clear what context this metadata is from. The path
and method
metadata will continue to be reported until the next major/minor version.
Internal change to how OpenTelemetry metrics are sent.
at_exit
hook reporting no error on process exit when the process exits without an error.View the Ruby gem v4.0.5 changelog for more information.
Send check-ins concurrently. When calling Appsignal::CheckIn.cron
, instead of blocking the current thread while the check-in events are sent, schedule them to be sent in a separate thread.
When shutting down your application manually, call Appsignal.stop
to block until all scheduled check-ins have been sent.
SignalException
errors from our at_exit
error reporter.View the Ruby gem v4.0.4 changelog for more information.
Make Appsignal.Ecto.Repo
's default_options/1
function overridable. If your Ecto repo uses Appsignal.Ecto.Repo
and implements its own default_options/1
, it must call super
to merge its default options with those of Appsignal.Ecto.Repo
:
defmodule MyEctoRepo use Appsignal.Ecto.Repo def default_options(operation) do super(operation) ++ [ # ... your default options here ... ] end end
Fix an issue where Ecto transactions in parallel preloads would not be instrumented correctly when using Appsignal.Ecto.Repo
, causing the query in the Ecto transaction to not be instrumented and the sample to be incorrectly closed as an earlier time.
View the Elixir package v2.12.3 changelog for more information.
Sidekiq::JobRetry::Handled
and Sidekiq::JobRetry::Skip
errors. These errors would be reported by our Rails error subscriber. These are an internal Sidekiq errors we do not need to report.Remove the app_path
writer in the Appsignal.configure
helper. This was deprecated in version 3.x. It is removed now in the next major version.
Use the root_path
keyword argument in the Appsignal.configure
helper (Appsignal.configure(:root_path => "...")
) to change the AppSignal root path if necessary.
View the Ruby gem v4.0.3 changelog for more information.
Fixed the name column sorting bug in the performance time detective modal.
set_gauge
in favor of the newer OpenTelemetry's sync implementation.View the Python package v1.3.10 changelog for more information.
Errno::EPIPE
errors when instrumenting response bodies. We've noticed this error gets reported when the connection is broken between server and client. This happens in normal scenarios so we'll ignore this error in this scenario to avoid error reports from errors that cannot be resolved.View the Ruby gem v3.13.1 changelog for more information.
We've released version 4.0 of the AppSignal gem! Read all about it in the Ruby gem 4.0 blog post.
When upgrading, follow our guide for upgrading from Ruby gem 3 to 4.
Add an at_exit
callback error reporter. By default, AppSignal will now report any unhandled errors that crash the process as long as Appsignal started beforehand.
require "appsignal" Appsignal.start raise "oh no!" # Will report the error StandardError "oh no!"
To disable this behavior, set the enable_at_exit_reporter
config option to false
.
Report errors from Rails runners. When a Rails runner reports an unhandled error, it will now report the error in the "runner" namespace.
Support adding multiple errors to a transaction.
Using the Appsignal.report_error
helper, you can now report more than one error within the same transaction context, up to a maximum of ten errors per transaction. Each error will be reported as a separate sample in the AppSignal UI.
Before this change, using Appsignal.report_error
or Appsignal.set_error
helpers, adding a new error within the same transaction would overwrite the previous one.
Add a helper for parameters sample data to be unset. This is a private method until we stabilize it.
Change the default Rake task namespace to "rake". Previously, Rake tasks were reported in the "background" namespace.
Do not start AppSignal when the config file raises an error. Previously, the file source would be ignored.
Freeze the config after AppSignal has started. Prevent the config from being modified after AppSignal has started to avoid the expectation that modifying the config after starting AppSignal has any effect.
Do not start Appsignal multiple times if Appsignal.start
is called more than once. The configuration can no longer be modified after AppSignal has started.
The transaction sample data is now merged by default. Previously, the sample data (except for tags) would be overwritten when a sample data helper was called.
# Old behavior Appsignal.set_params("param1" => "value") Appsignal.set_params("param2" => "value") # The parameters are: # { "param2" => "value" } # New behavior Appsignal.add_params("param1" => "value") Appsignal.add_params("param2" => "value") # The parameters are: # { "param1" => "value", "param2" => "value" }
New helpers have been added:
Appsignal.add_tags
Appsignal.add_params
Appsignal.add_session_data
Appsignal.add_headers
Appsignal.add_custom_data
The old named helpers that start with set_
will still work. They will also use the new merging behavior.
Set the Rails config defaults for Appsignal.configure
when used in a Rails initializer. Now when using Appsignal.configure
in a Rails initializer, the Rails env and root path are set on the AppSignal config as default values and do not need to be manually set.
Global transaction metadata helpers now work inside the Appsignal.report_error
and Appsignal.send_error
callbacks. The transaction yield parameter will continue to work, but we recommend using the global Appsignal.set_*
and Appsignal.add_*
helpers.
# Before Appsignal.report_error(error) do |transaction| transaction.set_namespace("my namespace") transaction.set_action("my action") transaction.add_tags(:tag_a => "value", :tag_b => "value") # etc. end Appsignal.send_error(error) do |transaction| transaction.set_namespace("my namespace") transaction.set_action("my action") transaction.add_tags(:tag_a => "value", :tag_b => "value") # etc. end # After Appsignal.report_error(error) do Appsignal.set_namespace("my namespace") Appsignal.set_action("my action") Appsignal.add_tags(:tag_a => "value", :tag_b => "value") # etc. end Appsignal.send_error(error) do Appsignal.set_namespace("my namespace") Appsignal.set_action("my action") Appsignal.add_tags(:tag_a => "value", :tag_b => "value") # etc. end
Include the Rails app config in diagnose report. If AppSignal is configured in a Rails initializer, this config is now included in the diagnose report.
Include the config options from the loaders config defaults and the Appsignal.configure
helper in diagnose report. The sources for config option values will include the loaders and Appsignal.configure
helper in the output and the JSON report sent to our severs, when opted-in.
Calculate error rate by transactions with an error, not the number of errors on a transaction. This limits the error rate to a maximum of 100%.
Appsignal.listen_for_error
helper. Use manual exception handling using rescue => error
with the Appsignal.report_error
helper instead.Appsignal::Transaction::FRONTEND
constant. This was previously used for the built-in front-end integration, but this has been absent since version 3 of the Ruby gem.Appsignal.config=
writer. Use the Appsignal.configure
helper to configure AppSignal.Transaction.new
method Transaction ID argument. The Transaction ID will always be automatically generated.View the Ruby gem v4.0.0 changelog for more information.
Sidekiq::JobRetry::Skip
errors. These errors would be reported by our Rails error subscriber. This is an internal Sidekiq error we do not need to report.SystemExit
errors from our at_exit
error reporter.View the Ruby gem v4.0.1 changelog for more information.
nil
data being added as sample data, but silently ignore it because we don't support it.View the Ruby gem v4.0.2 changelog for more information.
View the Elixir for Phoenix package v2.4.1 changelog for more information.
Add helper to manually stop the agent process for this AppSignal instance.
Some contexts, like serverless functions, exit before AppSignal can ensure all data is sent to our servers. To ensure the data is sent, the new appsignal.stop()
method can be called to gracefully stop the AppSignal agent process.
View the Python package v1.3.9 changelog for more information.
We’ve added new installation instructions for Go to provide better step-by-step instructions for the installation process.
Rename heartbeats to cron check-ins. Calls to Appsignal.heartbeat
and Appsignal.Heartbeat
should be replaced with calls to Appsignal.CheckIn.cron
and Appsignal.CheckIn.Cron
, for example:
# Before Appsignal.heartbeat("do_something", fn -> do_something() end) # After Appsignal.CheckIn.cron("do_something", fn -> do_something end)
Appsignal.heartbeat
and to methods in Appsignal.Heartbeat
will emit a deprecation warning at compile-time.View the Elixir package v2.12.2 changelog for more information.
AppSignal offers a 30-day free trial, no credit card is required. All features are available in all plans. Start monitoring your application in just a few clicks!