Added appsignal-cli feedback so users and LLM workflows can send missing endpoint, feature, or broken behavior reports directly from the CLI, with optional contact email reuse for follow-up.
Changed
Exception incident details now show error causes when sample data is available, making wrapped root causes visible directly from incidents show.
Track Collector's memory usage as internal metrics. The Collector will now self-report memory usage and uptime every minute.
Changed
Handle HTTP HEAD requests on the /up and / endpoints. These now respond with 200 OK so health checks and uptime monitors that use HEAD requests no longer receive a 404 response.
Improve Faraday support. AppSignal now instruments Faraday requests automatically, without double-instrumenting the underlying HTTP client. Turn it off with the instrument_faraday option. Read more in our Faraday integration docs.
Add config options to turn individual integrations off. Set
instrument_sidekiq, instrument_shoryuken, instrument_que,
instrument_resque, instrument_delayed_job, instrument_active_job,
instrument_excon or instrument_mongo to false to disable that
integration entirely. This turns off both the instrumentation of the jobs or
requests and the enqueue instrumentation for that integration. They all
default to true. Each can also be set through its environment variable, such
as APPSIGNAL_INSTRUMENT_SIDEKIQ.
Instrument background job enqueues. Enqueuing a job now records an enqueue
event on the active transaction, so enqueues made from within a web request or
another job show up in the event timeline. This is recorded for Sidekiq
(enqueue.sidekiq), Que (enqueue.que, plus bulk_enqueue.que for bulk
enqueues on Que 2), Resque (enqueue.resque), Shoryuken (enqueue.shoryuken)
and Delayed Job (enqueue.delayed_job). Each event is titled after the job
being enqueued.
For Active Job, the enqueue.active_job event is now recorded by AppSignal's
own instrumentation rather than by Rails' native enqueue.active_job
notification. The native notification is suppressed so the enqueue is recorded
once, and the event is now titled after the job being enqueued.
These enqueue events can be turned off with the
enable_job_enqueue_instrumentation config option. Set it to false to stop
recording enqueue events across all integrations, without affecting the
instrumentation of the jobs themselves. It defaults to true and can also be
set through the APPSIGNAL_ENABLE_JOB_ENQUEUE_INSTRUMENTATION environment
variable.
Instrument HTTP.rb chained requests on http 6. Requests made through a chained
client -- HTTP.follow.get(...), HTTP.headers(...).get(...), and so on -- go
through HTTP::Session rather than HTTP::Client, and were not being recorded.
They now produce a request.http_rb event like any other request.
Allow HTTPoison 3.0 to be used as an optional dependency. Applications
on HTTPoison 3.0 can now use AppSignal's HTTPoison instrumentation
without a version conflict.
Exception and performance sample detail pages now export as Markdown, alongside the existing JSON download. Open the sample's actions menu and select Download Markdown, or use the copy icon to copy it to your clipboard.
The Markdown is document in sections covering the backtrace, timeline, parameters, attributes, environment, deploy marker, and a context block. Paste it into an AI assistant like Claude or Codex to ask questions about the sample.
The Download JSON row now has the same copy icon, so you can copy either format the same way.
Improve collector status visibility. The collector now repeats its version and configuration details while it is running, making it easier to confirm which setup is active when reviewing logs.
Added traces commands, also available as samples, for listing performance samples/traces and error traces, then inspecting their span trees through the AppSignal REST tracing API. Traces can also be fetched and inspected directly from performance and exception incident numbers, and --page-all can fetch beyond the first page of trace results.
Changed
Incident list commands now render with the same table formatting as other list commands, making human-readable output easier to scan.
Use system-specific operation name in messaging span names.
When messaging.operation.name is present (e.g. Queue.add), it is used directly as the span name prefix: Queue.add (myQueue). When only the generic messaging.operation.type is available (e.g. send), the word "message" is added for clarity: send message (myQueue).
Fixed
Continue reporting non-disk host metrics when a mount is frozen.
Emit the appsignal.action_name attribute instead of appsignal.root_name
when set_root_name is used in collector mode. The collector only reads the
action name from appsignal.action_name, so root names set this way were
previously ignored, falling back to the OpenTelemetry span name.
Update the OpenTelemetry span name directly when set_name is used in
collector mode, instead of setting the appsignal.name attribute. The
collector uses the span name as-is, so names set this way were previously
ignored.
Emit the db.system.name and db.query.text semantic-convention attributes
instead of appsignal.sql_body when set_sql_body is used in collector
mode. This fixes SQL query sanitization when using the experimental collector
mode.
Fix host-metrics leaking zombie [timeout] processes in Alpine linux containers.
Before this release AppSignal agent relied on a proper init process that reaps child processes killed by system timeout. Now the agent terminates and reaps unresponsive child processes in host-metrics collection and a subreaper is no longer required.
Emit request parameters and headers using the attribute names the collector
recognizes when in collector mode. set_params now emits
appsignal.request.payload instead of appsignal.request.parameters, and
set_header uses the http.request.header prefix instead of
appsignal.request.headers. The collector and server do not recognize the
previous names, so this sample data was previously dropped in collector mode.
Fix host-metrics leaking zombie [timeout] processes in Alpine linux containers.
Before this release AppSignal agent relied on a proper init process that reaps child processes killed by system timeout. Now the agent terminates and reaps unresponsive child processes in host-metrics collection and a subreaper is no longer required.
Our new AppSignal CLI brings your monitoring data into the terminal. Tail logs, triage incidents, manage dashboards and anomaly detection triggers, and turn logs into metrics, all without leaving the shell where you run your tests and deploys.
It's built for people and AI agents. Every command returns human-readable output or JSON (--output json), so the same tool you reach for during an incident can also feed structured data to a coding agent. The CLI also bundles an agent skill for Claude, Codex, and OpenCode.
Sign in with OAuth and you're ready to go:
Shell
appsignal-cli auth login
Install it with Homebrew (brew install appsignal/appsignal-cli/appsignal-cli) or the install script, then read the documentation to get started.
Changed
apps list now uses the current OAuth account to determine the organization automatically and saves that org to the active config. You no longer need to pass --org when listing apps for the signed-in account.
incidents update now accepts multiple incident numbers for bulk state changes, so you can close or reopen an explicit set of incidents in one command. It also adds --assign-me to assign the incident to the authenticated CLI user without needing to look up your user ID first.
OAuth login now requests the user:read scope needed for browser-based AppSignal account access, and older tokens now produce a clearer re-authentication message when that scope is missing. The unsupported apps orgs command has been removed.
Added dashboard management commands to list, create, and update AppSignal dashboards from the CLI.
appsignal-cli now sends a minimal best-effort telemetry event for each command run to help measure CLI usage and reliability. The event includes only the command path, success or failure, duration, CLI version, and output format, and you can disable it entirely with APPSIGNAL_CLI_TELEMETRY=0.
OAuth is now the default auth login flow, so running appsignal-cli auth login opens the browser-based sign-in flow without requiring --oauth. Personal token login remains available by passing --token explicitly.
Removed
OAuth is now the default authentication method. appsignal-cli auth login opens the browser flow directly, while personal API token login remains available with --token.
Continue reporting non-disk host metrics when a mount is frozen.
Fix host-metrics leaking zombie [timeout] processes in Alpine linux containers.
Before this release AppSignal agent relied on a proper init process that reaps child processes killed by system timeout. Now the agent terminates and reaps unresponsive child processes in host-metrics collection and a subreaper is no longer required.
Ensure sendError ends its span even when the callback throws.
Allow appsignal.group and appsignal.format attributes in OpenTelemetry logs to override the log line's group and format.
When present, appsignal.group overrides the resource-level service name as the log group, and appsignal.format (one of plaintext, logfmt, json, autodetect) overrides the log source's parsing format.
Fixed
Fix crashes when truncating attribute keys and values whose length limit
fell in the middle of a multi-byte UTF-8 character. Truncation now rounds
the cut point down to the nearest character boundary instead of panicking.
Continue reporting non-disk host metrics when a mount is frozen.
Fix host-metrics leaking zombie [timeout] processes in Alpine linux containers.
Before this release AppSignal agent relied on a proper init process that reaps child processes killed by system timeout. Now the agent terminates and reaps unresponsive child processes in host-metrics collection and a subreaper is no longer required.
Exclude more Sidekiq internal job attributes (cattr, tags, retry_for and unique_for) from the tags reported for Sidekiq jobs.
Fixed
Continue reporting non-disk host metrics when a mount is frozen.
Prevent a NoMethodError in the Active Job, Rake, Sidekiq, Delayed Job, and WebMachine instrumentations when the creation of an AppSignal transaction is interrupted by process shutdown signals.
Emit distribution metrics from the Ecto integration.
Each Ecto query telemetry event now also reports its timing values as ecto_query_time, ecto_queue_time, ecto_decode_time, ecto_idle_time and ecto_total_time distribution metrics.
All five metrics are tagged by repo and hostname. The ecto_query_time, ecto_decode_time and ecto_total_time metrics are additionally tagged by repo and source (the Ecto table).
This surfaces pool waits, decode time, idle connection time and per-table latency as standalone metrics in addition to the existing query span.
Fixed
Preserve sub-millisecond precision when reporting timing distribution metrics.
The Ecto (ecto_query_time, ecto_queue_time, ecto_decode_time, ecto_idle_time, ecto_total_time) and Oban (oban_job_duration, oban_job_queue_time) distribution metrics now report fractional milliseconds, instead of being truncated to whole milliseconds. Sub-millisecond measurements were previously rounded down to zero.
Continue reporting non-disk host metrics when a mount is frozen.
Fix compatibility with Finch 0.22+. This change moves SSL and proxy options to pool-level conn_opts in Finch.start_link.
Security
CVE-2026-32686 describes an unauthenticated remote Denial of Service vulnerability in decimal before 3.0.0. Loosen decimal requirement to allow ~> 3.0 and fix compatibility with ecto.
Turn any log source into a stream of metrics — without writing application code or paying to index every line.
Log-based metrics is now in beta, and joins the existing beta and preview features in AppSignal Labs. Define a query against any log source, choose a metric type, and AppSignal extracts the value during ingestion.
Gauge — record the value of an attribute at ingestion (queue depth, connection count).
Measurement — build a histogram of a numeric attribute over time (request duration, payload size, job runtime).
Extraction runs as a log line action, in an order you control. Place it before any filter actions on the same source and you can keep the metric while discarding the underlying log line — handy for high-volume sources you don't need to search line-by-line.
To create one, open the Logs Explorer and select Create a metric — either from the view's ⋮ menu (using the current query) or from a numeric attribute on any log line (using that attribute as the field). Manage your metrics on the new Metrics page under Logging. Any metrics created through the AppSignal MCPmanage_log_line_action tool are visible there too.
A dark theme for the AppSignal UI is now available as part of AppSignal Labs.
Light mode remains the default. To opt in, click your profile picture in the top-right corner and switch the Theme toggle to:
Light — the default
Dark — always-on dark mode
System — follows your OS preference
We're rolling this out gradually as we polish the rough edges, so expect a few screens that aren't quite there yet. Found one that doesn't look right? Tell us — that's the whole point of Labs.