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.
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.
Cap the amount of metric states stored for cumulative-to-delta conversion, preventing high-cardinality tag combinations from causing excessive memory usage.
Evict and block traces that accumulate large amounts of orphaned spans, preventing them from growing unboundedly in memory.
AppSignal MCP graduates from beta to preview with this release.
The AppSignal MCP server now exposes 24 tools across seven areas — up from 18 — with two new capability areas and expanded write access throughout.
What's new:
Performance: Ask your agent which actions are slowest, pull traces for a specific action, inspect full span trees, and drill into individual spans. Works with both sample-based performance data and OpenTelemetry traces.
Logging: Search log lines using AppSignal's expression syntax, and set up log processing rules directly from your editor: create filters, trigger alerts, extract metrics from log lines, and control execution order.
Anomaly triggers: In addition to listing triggers and alerts, you can now create, update, and archive anomaly detection triggers without leaving your editor.
OAuth support: The MCP server now supports OAuth authentication, which unlocks GitHub Copilot CLI support.
Token permissions now include the performance and logging toolsets alongside app, exceptions, metrics, anomalies, and dashboards.
For setup instructions and the full tool reference, see the MCP documentation. Read the full blog post for the complete breakdown.
Fix an issue where the child process was not terminated on macOS when the parent process was killed by an uncatchable signal, such as SIGSTOP or SIGKILL.
Update OpenTelemetry dependencies to v2. All bundled OpenTelemetry packages have been updated to their OpenTelemetry v2-compatible versions. This resolves compatibility issues when third-party span processors or instrumentations are used alongside AppSignal, which could cause spans to silently drop due to v1/v2 incompatibilities. The @opentelemetry/instrumentation-redis-4 package has been removed. Redis v4 instrumentation is now handled by @opentelemetry/instrumentation-redis, which supports both Redis v3 and v4.
Update Prisma instrumentation to v7. The @prisma/instrumentation package has been updated from v6 to v7. The middleware config option has been removed, as Prisma dropped its middleware API in Prisma v5. Prisma's native tracing is now the only supported instrumentation method.
Bundled certificates have been updated.
Update BullMQ OpenTelemetry extractor to support new messaging semantic conventions.
Use system-specific operation name in messaging span names.