Improving AppSignal, one deploy at a time.

May 14, 2024

Support Kamal deployments


Support Kamal-based deployments. Read the KAMAL_VERSION environment variable, which Kamal exposes within the deployed container, if present, and use it as the application revision if it is not set. This will automatically report deploy markers for applications using Kamal.

See the Elixir package 2.10.2 changelog for more information.

May 14, 2024

Handle live_view render messages

Elixirphoenix 2.3.8

Handle live_view :render messages received through :telemetry.

See the changelog for AppSignal for Phoenix package 2.3.8 for more information.

Apr 26, 2024

Fix unused variable warnings

Elixirphoenix 2.3.7

Fix unused variables warnings introduced in the previous release.

See the changelog for AppSignal for Phoenix package 2.3.7 for more information.

Apr 25, 2024

Support parial key matches in Phoenix's filter_parameters


Fix the Phoenix filter_parameters config option support for partial key matches. When configuring config :phoenix, filter_parameters with ["key"] or {:discard, ["key"]}, it now also matches partial keys like "my_key", just like Phoenix's logger does.

See the Elixir package 2.10.1 changelog for more information.

Apr 25, 2024

Improved Phoenix.ActionClauseError support

Elixirphoenix 2.3.6

Set an action name for Phoenix.ActionClauseError errors. It will now group these errors per controller-action combination for more convenient grouping.

See the changelog for AppSignal for Phoenix package 2.3.6 for more information.

Apr 22, 2024

Add heartbeats and `ignore_logs` config option



ignore_logs configuration option

Add the ignore_logs configuration option, which can also be configured as the APPSIGNAL_IGNORE_LOGS environment variable.

The value of ignore_logs is a list (comma-separated, when using the environment variable) of log line messages that should be ignored. For example, the value "start" will cause any message containing the word "start" to be ignored. Any log line message containing a value in ignore_logs will not be reported to AppSignal.

The values can use a small subset of regular expression syntax (specifically, ^, $ and .*) to narrow or expand the scope of lines that should be matched.

For example, the value "^start$" can be used to ignore any message that is exactly the word "start", but not messages that merely contain it, like "Process failed to start". The value "Task .* succeeded" can be used to ignore messages about task success regardless of the specific task name.


Heartbeats are currently only available to beta testers. If you are interested in trying it out, send an email to!

Add heartbeats support. You can send heartbeats directly from your code, to track the execution of certain processes:

def send_invoices do # ... your code here ... Appsignal.heartbeat("send_invoices") end

You can pass a function to Appsignal.heartbeat, to report to AppSignal both when the process starts, and when it finishes, allowing you to see the duration of the process:

def send_invoices do Appsignal.heartbeat("send_invoices", fn -> # ... your code here ... end) end

If an exception is thrown within the function, the finish event will not be reported to AppSignal, triggering a notification about the missing heartbeat. The exception will bubble outside of the heartbeat function.


Remove a broken link pointing to a 1.x upgrade page during the installation flow.

See the Elixir package 2.10.0 changelog for more information.

Mar 20, 2024

Add CPU count configuration option


Implement CPU count configuration option. Use it to override the auto-detected, cgroups-provided number of CPUs that is used to calculate CPU usage percentages.

To set it, use the the cpu_count configuration option or the APPSIGNAL_CPU_COUNT environment variable.

Mar 06, 2024

Improved container CPU metrics



  • Add histogram support to the OpenTelemetry HTTP server. This allows OpenTelemetry-based instrumentations to report histogram data to AppSignal as distribution metrics.


  • Breaking change: Normalize CPU metrics for cgroups v1 systems. When we can detect how many CPUs are configured in the container's limits, we will normalize the CPU percentages to a maximum of 100%. This is a breaking change. Triggers for CPU percentages that are configured for a CPU percentage higher than 100% will no longer trigger after this update. Please configure triggers to a percentage with a maximum of 100% CPU percentage.
  • 1566a4a8 patch - Update the Mix config import in the config/appsignal.exs file to use import Config, rather than the deprecated use Mix.Config.
  • Support fractional CPUs for cgroups v2 metrics. Previously a CPU count of 0.5 would be interpreted as 1 CPU. Now it will be correctly seen as half a CPU and calculate CPU percentages accordingly.
  • Update bundled trusted root certificates.


  • Fix (sub)traces not being reported in their entirety when the OpenTelemetry exporter sends one trace in multiple export requests. This would be an issue for long running traces, that are exported in several requests.

See the changelog for AppSignal for Elixir package 2.9.0 for more information.

Feb 01, 2024

Add custom_on_create_fun hook for span creation



  • Set data on spans with the custom_on_create_fun hook. This hook is called upon the creation of every span. This can be useful to add tags to internal traces and otherwise difficult to access traces.

    This won't be necessary for most scenarios. We recommend following our tagging guide instead.

    defmodule MyApp.Appsignal do def custom_on_create_fun(_span) do Appsignal.Span.set_sample_data(Appsignal.Tracer.root_span, "tags", %{"locale": "en"}) end end
    # config/config.exs config :appsignal, custom_on_create_fun: &MyApp.Appsignal.custom_on_create_fun/1


  • Make the debug log message for OpenTelemetry spans from libraries we don't automatically recognize more clear. Mention the span id and the instrumentation library.
  • Fix an issue where queries containing a MySQL leading type indicator would only be partially sanitised.

See the changelog for AppSignal for Elixir package 2.8.3 for more information.

Jan 25, 2024

Add support for Ecto parallel preloads


Replacing use Ecto.Repo with use Appsignal.Ecto.Repo allows the Ecto instrumentation to keep context across the Elixir processes spawned by Ecto preload queries, ensuring that these queries are correctly instrumented:

defmodule MyApp.Repo do # replace `use Ecto.Repo` with `use Appsignal.Ecto.Repo` use Appsignal.Ecto.Repo, otp_app: :my_app, adapter: Ecto.Adapters.Postgres end

See the changelog for AppSignal for Elixir package 2.8.2 for more information.

Jan 16, 2024

Fix Alpine Linux disk usage metrics and keywords list as sample data



  • Fix disk usage returning a Vec with no entries on Alpine Linux when the df --local command fails.

  • Add support for lists in the sample data as root values on spans, as shown below. Previously we only supported lists as nested objects in maps.

    Appsignal.Span.set_sample_data( Appsignal.Tracer.root_span, "custom_data", [ "value 1", "value 2" ] )


  • Remove the appsignal_set_host_gauge and appsignal_set_process_gauge extension functions. These functions were already deprecated and did not report any metrics.


  • Fix missing error metrics for the error rate and error count graphs in some scenarios, like with Node.js Koa apps.

  • Add support for keywords lists in sample data on spans. These would previously be shown an empty list.

    Appsignal.Span.set_sample_data( Appsignal.Tracer.root_span, "custom_data", %{"keyword_list": [foo: "some value", "bar": "other value"]} )

See the changelog for AppSignal for Elixir package 2.8.1 for more information.

Jan 08, 2024

Allow Phoenix.HTML version 4.0 and other improvements

Elixirphoenix 2.3.5
  • Allow the phoenix_html dependency to use version 4.0 or above.
  • Fix warning on Elixir 1.16 calling current_span() as a function

See the changelog for AppSignal for Phoenix package 2.3.5 for more information.

Dec 01, 2023

Add Jason as dependency and other improvements



  • Always use Jason to encode JSON. This removes the need to install either Jason or Poison alongside AppSignal, simplifying our installation instructions.
  • Filter more disk mountpoints for disk usage and disk IO stats. This helps reduce noise in the host metrics by focussing on more important mountpoints. Any mountpoint containing /etc/hostname, /etc/hosts, /etc/resolv.conf, /snap/ or /proc/ is ignored.


  • Support disk usage reporting (using df) on Alpine Linux. This host metric would report an error on Alpine Linux.
  • When a disk mountpoint has no inodes usage percentage, skip the mountpoint, and report the inodes information successfully for the inodes that do have an inodes usage percentage.

See the changelog for AppSignal for Elixir package 2.8.0 for more information.

Nov 21, 2023

CPU stats normalization for cgroups v2

Elixirappsignal 2.7.13


  • CPU usage is now normalized to the number of CPUs available to the container. This means that a container with 2 CPUs will have its CPU usage reported as 50% when using 1 CPU instead of 100%. This is a breaking change for anyone using the cpu probe.
    • If you have CPU triggers set up based on the old behaviour, you might need to update those to these new normalized values to get the same behaviour. Note that this is needed only if the AppSignal integration package you're using includes this change.

See the changelogs for AppSignal for Elixir package 2.7.13 for more information.

Nov 15, 2023

Improve Ecto transactions

Elixirappsignal 2.7.12

Improve instrumentation for Ecto transactions. Queries performed as part of an Ecto.Multi or an Ecto.Repo.transaction are now displayed in the event timeline as child events of a broader transaction event:

Ecto transaction event timeline

An additional event is added at the end of the transaction, to denote whether the transaction was committed or rolled back.

See the changelogs for AppSignal for Elixir package 2.7.12 for more information.

Nov 06, 2023

Long query sanitization, debug logging and other improvements

Elixirappsignal 2.7.11
  • Add an exponential backoff to the retry sleep time to bind to the StatsD, NGINX and OpenTelemetry HTTP ports. This gives the agent a longer time to connect to the ports if they become available within a 4 minute window.
  • Sanitize SQL queries before truncating them. This fixes an issue where long SQL queries would be truncated at arbitrary points.
  • Logs from the agent and extension now use a more consistent format for spans and transactions.
  • The "debug" log level should now be enough for debugging most support issues.

See the changelogs for AppSignal for Elixir package 2.7.11 for more information.

Oct 24, 2023

Implement Erlang logger backend and other changes

Elixirappsignal 2.7.10


  • Implement an Erlang logger handler for sending logs from the Elixir logger to AppSignal. Starting with Elixir 1.15, logging backends are no longer recommended.
@impl true def start(_type, _args) do Appsignal.Logger.Handler.add("phoenix")


  • Updated the agent to version e8207c1, with the following changes:
    • Add memory_in_percentages and swap_in_percentages host metrics that represents metrics in percentages.
    • Ignore /snap/ disk mountpoints.
    • Fix issue with the open span count in logs being logged as a negative number.
    • Fix agent's TCP server getting stuck when two requests are made within the same fraction of a second.


  • Fix configuration options set with atoms. It is now possible to set the log and log_level configuration options as atoms.
  • Fix support for the warning log level.

See the changelogs for AppSignal for Elixir package 2.7.10 for more information.

Aug 30, 2023

Fix inode usage host metric name format

Elixirappsignal 2.7.9


  • Bump agent to 6133900.
    • Fix disk_inode_usage metric name format to not be interpreted as a JSON object.

See the changelogs for AppSignal for Elixir package 2.7.9 for more information.

Aug 25, 2023

Add host_role config option and store more data in metadata

Elixirappsignal 2.7.8


  • Add the host_role config option. This config option can be set per host to generate some metrics automatically per host and possibly do things like grouping in the future.


  • Bump agent to 6bec691.
    • Upgrade sql_lexer to v0.9.5. It adds sanitization support for the THEN and ELSE logical operators.
  • Bump agent to version d789895.
    • Increase short data truncation from 2000 to 10000 characters.

See the changelogs for AppSignal for Elixir package 2.7.8 for more information.

Jul 05, 2023

Fix issue for Plug and Phoenix custom instrumentation

Elixirappsignal 2.7.6
  • Add Appsignal.Span.set_sample_data_if_nil function
  • Fix an issue in which custom instrumentation's sample data is overriden for appsignal_plug 2.0.15 and appsignal_phoenix 2.3.4

See the changelogs for appsignal 2.7.6, appsignal_plug 2.0.15 and appsignal_phoenix 2.3.4 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!