Changelog

Improving AppSignal, one deploy at a time.

Nov 19, 2024

title

Fix the logo image path for MS Teams workflows notifiers integration. We've added a way for you to verify webhooks that are being sent from our platform. In your Webhook notifier, you can find a token; this token can be used to verify the webhook by creating a sha256 hash:

Shell
sha256(token+message)

This token can be verified against the X-Appsignal-Signature header. Fix a bug in the date picker that caused unnecessary whitespace.

Nov 13, 2024

Add configuration via Ruby file and other improvements

Ruby4.2.0

Added

  • Add config/appsignal.rb config file support. When a config/appsignal.rb file is present in the app, the Ruby gem will automatically load it when Appsignal.start is called.

    The config/appsignal.rb config file is a replacement for the config/appsignal.yml config file. When both files are present, only the config/appsignal.rb config file is loaded when the configuration file is automatically loaded by AppSignal when the configuration file is automatically loaded by AppSignal.

    Example config/appsignal.rb config file:

    Ruby
    # config/appsignal.rb Appsignal.configure do |config| config.name = "My app name" end

    To configure different option values for environments in the config/appsignal.rb config file, use if-statements:

    Ruby
    # config/appsignal.rb Appsignal.configure do |config| config.name = "My app name" if config.env == "production" config.ignore_actions << "My production action" end if config.env == "staging" config.ignore_actions << "My staging action" end end
  • Add the config/appsignal.rb Ruby config file method to installer, appsignal install.

  • Add Appsignal.set_empty_params! helper method. This helper method can be used to unset parameters on a transaction and to prevent the Appsignal instrumentation from adding parameters to a transaction.

    Example usage:

    Ruby
    class PaymentsController < ApplicationController def create Appsignal.set_empty_params! # Do things with sensitive parameters end end

    When Appsignal.add_params is called afterward, the "empty parameters" state is cleared and any AppSignal instrumentation (if called afterward) will also add parameters again.

    Ruby
    # Example: Unset parameters when set Appsignal.add_params("abc" => "def") # Parameters: { "abc" => "def" } Appsignal.set_empty_params! # Parameters: {} # Example: When AppSignal instrumentation sets parameters: Appsignal.set_empty_params! # Parameters: {} # Pseudo example code: Appsignal::Instrumentation::SomeLibrary.new.add_params("xyz" => "...") # Parameters: {} # Example: Set parameters after them being unset previously Appsignal.set_empty_params! # Parameters: {} Appsignal.add_params("abc" => "def") # Parameters: { "abc" => "def" }
  • Add Appsignal.configure context env? helper method. Check if the loaded environment matches the given environment using the .env?(:env_name) helper.

    Example:

    Ruby
    Appsignal.configure do |config| # Symbols work as the argument if config.env?(:production) config.ignore_actions << "My production action" end # Strings also work as the argument if config.env?("staging") config.ignore_actions << "My staging action" end end
  • Allow for default attributes to be given when initialising a Logger instance:

    Ruby
    order_logger = Appsignal::Logger.new("app", attributes: { order_id: 123 })

    All log lines reported by this logger will contain the given attribute. Attributes given when reporting the log line will be merged with the default attributes for the logger, with those in the log line taking priority.

Changed

  • Read the Hanami Action name without metaprogramming in Hanami 2.2 and newer. This makes our instrumentation more stable whenever something changes in future Hanami releases.

  • Ignore these Hanami errors by default:

    • Hanami::Router::NotAllowedError (for example: sending a GET request to POST endpoint)
    • Hanami::Router::NotFoundError

    They are usually errors you don't want to be notified about, so we ignore them by default now.

    Customize the ignore_errors config option to continue receiving these errors.

Fixed

  • Fix request parameter reporting for Hanami 2.2.

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

Nov 07, 2024

Fix build on ARM64 Linux and other improvements

Node.js3.5.3

Added

  • Set the app revision config option for Scalingo deploys automatically. If the CONTAINER_VERSION system environment variable is present, it will use used to set the revision config option automatically. Overwrite it's value by configuring the revision config option for your application.

Fixed

  • Fix an issue where the extension fails to build on ARM64 Linux.

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

Nov 07, 2024

Fix build on ARM64 Linux and other improvements

Ruby4.1.3

Added

  • Add activate_if_environment helper for Appsignal.configure. Avoid having to add conditionals to your configuration file and use the activate_if_environment helper to specify for which environments AppSignal should become active. AppSignal will automatically detect the environment and activate itself it the environment matches one of the listed environments.

    Ruby
    # Before Appsignal.configure do |config| config.active = Rails.env.production? || Rails.env.staging? end # After Appsignal.configure do |config| # Activate for one environment config.activate_if_environment(:production) # Activate for multiple environments config.activate_if_environment(:production, :staging) end
  • Add a hostname AppSignal tag automatically, based on the OpenTelemetry host.name resource attribute. (Beta only)

  • Add incident error count metric for enriched OpenTelemetry traces. (Beta only)

  • Set the app revision config option for Scalingo deploys automatically. If the CONTAINER_VERSION system environment variable is present, it will use used to set the revision config option automatically. Overwrite it's value by configuring the revision config option for your application.

Changed

  • Ignore the Rails healthcheck endpoint (Rails::HealthController#show) by default for Rails apps.

    If the ignore_actions option is set in the config/appsignal.yml file, the default is overwritten. If the APPSIGNAL_IGNORE_ACTIONS environment variable is set, the default is overwritten. When using the Appsignal.configure helper, add more actions to the default like so:

    Ruby
    # config/appsignal.rb Appsignal.configure do |config| # Add more actions to ignore config.ignore_actions << "My action" end

    To overwrite the default using the Appsignal.configure helper, do either of the following:

    Ruby
    # config/appsignal.rb Appsignal.configure do |config| # Overwrite the default value, ignoring all actions ignored by default config.ignore_actions = ["My action"] # To only remove the healtcheck endpoint config.ignore_actions.delete("Rails::HealthController#show") end

Fixed

  • Fix an issue where the extension fails to build on ARM64 Linux.

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

Nov 06, 2024

Fix check-ins not being sent and other improvements

Elixir2.13.1

Added

  • Add reported_by tag to errors reported by the legacy error backend. This makes it easier to understand whether an error is being reported by the error backend.
  • Set the app revision config option for Scalingo deploys automatically. If the CONTAINER_VERSION system environment variable is present, it will use used to set the revision config option automatically. Overwrite it's value by configuring the revision config option for your application.

Changed

  • Change the primary download mirror for integrations.

Fixed

  • Fix parentheses warning for Tesla on Elixir 1.17.x.

  • Fix an issue where, after a certain amount of time, check-ins would no longer be sent.

    This issue also caused the default Hackney connection pool to be saturated, affecting other code that uses the default Hackney connection pool.

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

Oct 16, 2024

Node.js package v3.5.1

Node.js3.5.1

Added

  • A Pino transport is now available. If Pino is your main logger, you can now use the AppSignal pino transport to send those logs to AppSignal.

    JavaScript
    import pino from "pino"; import { Appsignal, AppsignalPinoTransport } from "@appsignal/nodejs"; const logger = pino( AppsignalPinoTransport({ client: Appsignal.client, group: "application", }), );

Changed

  • Change the primary download mirror for integrations.

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

Oct 11, 2024

Chart improvements

Improved

  • Improve ability to hide lines in the chart. Hidden lines are now grouped together at the bottom of the legend.
    Chart export options
Oct 10, 2024

CSV export of chart data

Added

  • Add Python heartbeat instructions

  • Add CSV and JSON export for chart data. Not only can you generate a PNG of the chart, you can now also export the underlying data to CSV or JSON.

    Chart export options

Fixed

  • Fix status page showing "missing data" when not all regions where selected.
Oct 09, 2024

Add support for heartbeat check-ins

Python1.4.0

Added

  • Add support for heartbeat check-ins.

    Use the appsignal.check_in.heartbeat function to send a single heartbeat check-in event from your application. This can be used, for example, in your application's main loop:

    Python
    from appsignal.check_in import heartbeat while True: heartbeat("job_processor") process_job()

    Heartbeats are deduplicated and sent asynchronously, without blocking the current thread. Regardless of how often the .heartbeat function is called, at most one heartbeat with the same identifier will be sent every ten seconds.

    Pass continuous=True as the second argument to send heartbeats continuously during the entire lifetime of the current process. This can be used, for example, after your application has finished its boot process:

    Python
    def main(): start_app() heartbeat("my_app", continuous=True)

Changed

  • Change the primary download mirror for integrations.
  • Send check-ins concurrently. When calling appsignal.check_in.cron, instead of blocking the current thread while the check-in events are sent, schedule them to be sent in a separate thread.

View the Python package v1.4.0 changelog for more information.

Sep 28, 2024

Ruby gem v4.1.1

Ruby4.1.1

Changed

  • Add the reported_by tag to errors reported by the Rails error reporter so the source of the error is easier to identify.

Fixed

  • Fix no AppSignal internal logs being logged from Capistrano tasks.
  • Report all the config options set via Appsignal.config in the DSL config source in the diagnose report. Previously, it would only report the options from the last time Appsignal.configure was called.
  • Fix 'no implicit conversion of Pathname into String' error when parsing backtrace lines of error causes in Rails apps.

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

Sep 26, 2024

Heartbeat check-ins and other improvements

Elixir2.13.0

Added

  • Add support for heartbeat check-ins.

    Use the Appsignal.CheckIn.heartbeat method to send a single heartbeat check-in event from your application. This can be used, for example, in a GenServer's callback:

    Elixir
    @impl true def handle_cast({:process_job, job}, jobs) do Appsignal.CheckIn.heartbeat("job_processor") {:noreply, [job | jobs], {:continue, :process_job}} end

    Heartbeats are deduplicated and sent asynchronously, without blocking the current thread. Regardless of how often the .heartbeat method is called, at most one heartbeat with the same identifier will be sent every ten seconds.

    Pass continuous: true as the second argument to send heartbeats continuously during the entire lifetime of the current process. This can be used, for example, during a GenServer's initialisation:

    Elixir
    @impl true def init(_arg) do Appsignal.CheckIn.heartbeat("my_genserver", continuous: true) {:ok, nil} end

    You can also use Appsignal.CheckIn.Heartbeat as a supervisor's child process, in order for heartbeats to be sent continuously during the lifetime of the supervisor. This can be used, for example, during an Application's start:

    Elixir
    @impl true def start(_type, _args) do Supervisor.start_link([ {Appsignal.CheckIn.Heartbeat, "my_application"} ], strategy: :one_for_one, name: MyApplication.Supervisor) end

Changed

  • Send check-ins concurrently. When calling Appsignal.CheckIn.cron, instead of blocking the current process while the check-in events are sent, schedule them to be sent in a separate process.

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

Sep 26, 2024

Heartbeat check-ins and other improvements

Node.js3.5.0

Added

  • Add support for heartbeat check-ins.

    Use the checkIn.heartbeat method to send a single heartbeat check-in event from your application. This can be used, for example, in your application's main loop:

    JavaScript
    import { checkIn } from "@appsignal/nodejs"; while (true) { checkIn.heartbeat("job_processor"); await processJob(); }

    Heartbeats are deduplicated and sent asynchronously, without blocking the current thread. Regardless of how often the .heartbeat method is called, at most one heartbeat with the same identifier will be sent every ten seconds.

    Pass {continuous: true} as the second argument to send heartbeats continuously during the entire lifetime of the current process. This can be used, for example, after your application has finished its boot process:

    JavaScript
    import { checkIn } from "@appsignal/nodejs"; function main() { checkIn.heartbeat("job_processor", { continuous: true }); startApp(); }

Changed

  • Send check-ins concurrently. When calling Appsignal.checkIn.cron, instead of blocking the current process while the check-in events are sent, schedule them to be sent in a separate process.
  • Do not block Node.js shutdown. It is no longer necessary to call Appsignal.stop for the Node.js engine to allow itself to shut down. It should still be called and awaited in production scenarios and at the end of scripts, as it ensures that scheduled check-ins are delivered.

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

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!