Changelog

Improving AppSignal, one deploy at a time.

Apr 04, 2025

Improvements for AppSignal shutdown behavior

Ruby4.5.8

Added

  • Add the enable_at_exit_hook option to configure if Appsignal.stop is called when the Ruby application exits. Calling Appsignal.stop will stop the application for a moment to flush all the data to our agent before shutting down.

    This option has three possible values:

    • always: Always call Appsignal.stop when the program exits. On (Docker) containers it's automatically set to this value.
    • never: Never call Appsignal.stop when the program exits. The default value when the program doesn't run on a (Docker) container.
    • on_error: Call Appsignal.stop when the program exits with an error.

Deprecated

  • Deprecate the Appsignal.monitor_and_stop helper.

    We instead recommend using the Appsignal.monitor helper and configuring the enable_at_exit_hook config option to always.

View the Ruby gem v4.5.8 changelog for more information.

Mar 20, 2025

Add mix task to check if the extension install succeeded

Elixir2.15.3

Added

  • Add a mix task to check the extension install.

    Run mix appsignal.check_install to see if the NIF and agent were successfully installed. If not, it will return with exit code 1. Use this in your CI or build step to check if AppSignal was installed correctly before deploying or starting your application.

Fixed

  • Fix an issue where the check-in scheduler would crash when failing to send a check-in due to a network error.

View the Elixir package v2.15.3 changelog for more information.

Mar 20, 2025

Support more logger methods and small changes

Ruby4.5.6

Added

  • Add the Logger << method. This improves our compatibility with Ruby's Logger class implementation, making it usable in more scenarios.

Changed

  • Explicitly return nil from public methods with no usable return value. We want to avoid the situation where Appsignal.start happens to return true and it is thought to mean that the gem started successfully.

    Methods updated:

    • Appsignal.start
    • Appsignal.stop
    • Appsignal.configure
    • Appsignal.forked
    • Appsignal.load
  • Differentiate between process_request.rack events. Add the callback that triggered the event in the event title for debugging purposes.

  • Improve the log message for the uneven timestack error. This will help the AppSignal team debug issues where events get closed when all events are already closed.

View the Ruby gem v4.5.6 changelog for more information.

Mar 20, 2025

Add method to raise error if AppSignal is not started

Ruby4.5.7

Added

  • Add the Appsignal.config_error and Appsignal.config_error? methods. This method contains any error that may have occurred while loading the config/appsignal.rb file. If it is nil no error occurred or Appsignal.start hasn't been called yet. The Appsignal.config_error? method is an alias for syntax sugar.

  • Add the check_if_started! method. This method will raise an error if the AppSignal Ruby gem failed to start.

    Call this method in your CI or on app boot if you wish to verify that AppSignal has started when your application does, and want the application to fail to start if AppSignal hasn't started.

    For example, in this Rails initializer:

    Ruby
    # config/initializers/appsignal.rb Appsignal.check_if_started!

View the Ruby gem v4.5.7 changelog for more information.

Mar 13, 2025

Update error incident generation

Added

  • Update our support OpenTelemetry Semantic Conventions for code attributes used in unique span detection.

Changed

  • The shutdown behavior on internal errors is improved, and now logs what crashed and why.

  • Limit appsignal.tag.<key> tag values to 256 characters.

  • Rename an internal span event attribute for metadata distributions. Older collectors will no longer report metadata distributions for error incidents.

    This will create new incidents for existing errors. This is intentional.

Fixed

  • Fix a crash on truncating Unicode values.

This release can be installed through our collector packages and Docker image.

Mar 11, 2025

Configuration via request headers

Added

  • Configure AppSignal via HTTP request headers on export requests. If it's not possible to configure resource attributes in OpenTelemetry export data, configure AppSignal via request headers set on the export requests made to the collector's HTTP endpoints.

    Supported headers are:

    AppSignal-Config-Name: app name (required) AppSignal-Config-Environment: app environment (required) AppSignal-Config-PushApiKey: push API key (required) AppSignal-Config-Revision: app revision (required) AppSignal-Config-LanguageIntegration: language integration like ruby, elixir, php, etc. (required) OpenTelemetry-ServiceName: service name of the app OpenTelemetry-HostName: name of the app's host (required)

    For more information, see our configuration documentation.

Changed

  • Close HTTP connections from OpenTelemetry exports when we have successfully received the request. This fixes an issue with the server not shutting down when the connection is kept open.

This release can be installed through our collector packages and Docker image.

Mar 11, 2025

Delay agent reboots

Elixir2.14.1

Changed

  • Delay and eventually halt agent reboots by the extension.

    The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.

    In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.

    This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.

View the Elixir package v2.14.1 changelog for more information.

Mar 11, 2025

Delay agent reboots

Node.js3.6.2

Changed

  • Delay and eventually halt agent reboots by the extension.

    The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.

    In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.

    This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.

View the Node.js package v3.6.2 changelog for more information.

Mar 11, 2025

Delay agent reboots

Ruby4.5.4

Changed

  • Delay and eventually halt agent reboots by the extension.

    The AppSignal extension is responsible for booting the AppSignal agent. If communication with the agent is lost, the extension is responsible for rebooting it.

    In certain scenarios, such as when several processes with different AppSignal configurations are misconfigured to share the same working directory, the processes' extensions can enter a loop of rebooting and killing each others' agents. These short-lived agents may then attempt to repeatedly send pending payloads to AppSignal in quick succession.

    This change causes the extension to delay each reboot of its agent by one additional second, and to no longer attempt to reboot the agent after the tenth reboot, slowing down and eventually breaking this loop.

View the Ruby gem v4.5.4 changelog for more information.

Mar 06, 2025

Ignore empty environment variables for config options

Added

  • Add the appsignal.config.otp_app resource attribute config option. When set for Elixir applications, we will use the OTP app name to detect which stacktrace lines originate from the app, and which lines are from dependencies.

Changed

  • Consider empty environment variables as unset. From now on, an environment variable that's set to an empty string is considered unset when reading the collector configuration from system environment variables.

    In the example below, the environment variable will be considered unset. It will not fail on parsing an empty string as a number and set the default HTTP port instead.

    Shell
    APPSIGNAL_HTTP_PORT=""

    This behavior is changed for the following config options:

    • APPSIGNAL_CPU_COUNT
    • APPSIGNAL_ENABLE_HOST_METRICS
    • APPSIGNAL_FILES_WORLD_ACCESSIBLE
    • APPSIGNAL_HOSTNAME
    • APPSIGNAL_HTTP_PORT
    • APPSIGNAL_LOG_LEVEL
    • APPSIGNAL_PUSH_API_ENDPOINT
    • APPSIGNAL_PUSH_API_KEY
    • APPSIGNAL_RUNNING_IN_CONTAINER
  • In the appsignal/collector Docker image we will now listen to the PORT environment variable if it's set, and use it to configure the HTTP server's port.

    If the APPSIGNAL_HTTP_PORT environment variable is also set in addition to the PORT environment variable, it will read from the APPSIGNAL_HTTP_PORT environment variable.

This release can be installed through our collector packages and Docker image.

Start your free trial

Don’t let the bad bugs bite. Try AppSignal for free.

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!