Skip to content

Support improvements unified#639

Draft
manototh wants to merge 31 commits intomainfrom
mano/support-improvements
Draft

Support improvements unified#639
manototh wants to merge 31 commits intomainfrom
mano/support-improvements

Conversation

@manototh
Copy link
Copy Markdown
Collaborator

No description provided.

manototh and others added 30 commits April 27, 2026 15:12
Users asking "how to delete logs?" landed on the datasets reference page
and found no guidance on query-based event deletion. The page covered
trimming (bulk deletion by date) and deleting whole datasets, but had
no mention of the /v2/datasets/_apl/delete endpoint for targeted removal.

Added a new "Delete events by query" section that explains the block-level
deletion model, warns about the operation cost, and links to the detailed
delete-blocks page. Also fixed a typo ("wantto") in delete-blocks.mdx.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KPC7YF848P4JPW3FX0JJZB7D/

Made-with: Cursor
A user noticed that trigger_from_n_runs is available in the API and
Terraform Provider but absent from the dashboard UI, and opened a
support ticket asking whether it was available. The threshold monitors
page gave no indication that this option existed or that it was limited
to programmatic configuration only.

Added a step noting that trigger_from_n_runs requires consecutive
threshold crossings before firing an alert, and that it is only
configurable via the API and Terraform Provider.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KPXPMM3S36SE6WDHKD2YN1YR/

Made-with: Cursor
A user wanted to convert min(_time) to a date string for display in a
dashboard and couldn't find any documentation on how to format datetime
values. The datetime-functions page listed available functions but gave
no guidance on converting a datetime result to a readable string.

Added a "Format datetime values as strings" section explaining how to use
tostring() on datetime results, how to combine it with startofday() to
get a date-only string, and how to extract individual components using
datetime_part and related functions.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KQ00XCMRZB57QPZ3NE01PGWE/

Made-with: Cursor
The datasets page had no section explaining that Axiom doesn't support
deleting individual events. Users who tried to find a way to delete
specific log entries got a support response explaining the limitation,
but the docs had no equivalent explanation.

Added a "Delete individual events" section before the Trim section that:
- Clearly states individual event deletion isn't supported
- Explains why (block-based storage)
- Points to the three available alternatives: trim by date, block delete
  API for exceptional cases, and full dataset deletion

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KPC7YF848P4JPW3FX0JJZB7D/

Made-with: Cursor
Users migrating from Datadog asked whether they can set org-wide default
column configurations in the Stream and Query tabs for their entire
organization. Support explained that these settings are per-user only.
The docs described what could be configured but said nothing about who
the settings apply to, leaving users to assume org-wide defaults might
exist.

Added a brief note in both the Stream tab view settings section and the
Query tab "Select displayed fields" section stating that these preferences
are saved per user, with no org-wide defaults for column layout.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KP5B3KQKFK9BTX4YC2RYB5G6/

Made-with: Cursor
…y to transform data

Users frequently ask how to modify or edit events after ingestion. The virtual
fields page did not explain that events are immutable, leaving users without a
clear answer. Added an explicit note at the top of the page explaining event
immutability and positioning virtual fields as the primary mechanism for
reshaping and transforming data at query time.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KNPV6R8CZXVBX13ESY5Q8Y8T/

Made-with: Cursor
Users asked how to apply probabilistic sampling to traces before they reach
Axiom. Axiom does not sample data at ingest, so users must configure this in
the OTel Collector. Added a new "Sampling" section explaining both
probabilistic_sampler (uniform random sampling) and tail_sampling (policy-based
sampling after full trace collection), with YAML configuration examples for
each. Also noted the load-balancing requirement for tail sampling in
multi-Collector setups.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KNMH3JY5J2CXYV8E5TEPQGBC/

Made-with: Cursor
Users sending logs from Render often want to drop health-check and other
low-value log lines. Axiom does not filter at the ingest endpoint, so the
docs only showed a direct syslog setup and left users without a solution.
Added a new section explaining how to route Render's log stream through an
OTel Collector with a filter processor to drop unwanted records before they
reach Axiom, including a working YAML configuration example.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KNVC1F9998HKAVTF09H952E7/

Made-with: Cursor
Users logging with the @axiomhq/nextjs or next-axiom libraries sometimes
spread dynamic or user-supplied objects directly into the `fields` parameter.
When these objects contain unpredictable keys (e.g. per-request identifiers,
user input), the dataset can quickly approach or exceed the field limit,
causing ingest to fail silently for those events.

Added a Warning callout to both the @axiomhq/nextjs and next-axiom Logs
sections linking to the Limits reference and the map-fields guide, so users
understand why they should stick to a fixed set of field keys.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KMJRD80PH5MJ8C59AASWP0DD/

Made-with: Cursor
…section

A customer asked about three MPL capabilities: querying the same timeseries
multiple times in one query, naming individual subqueries, and using an
'auto' alignment period.

Two gaps were identified:
1. The align section did not state that an explicit duration is required.
   Users familiar with Grafana or PromQL expect automatic step/resolution
   derived from the query time range; MPL does not support this.
2. The compute section did not make it clear that both subqueries can target
   the same metric/timeseries. The example already does this, but there was
   no prose explaining the pattern.

Changes:
- Added a sentence to the align section stating that an explicit duration
  is required and that automatic window sizing is not supported.
- Rewrote the compute section introduction and added explanatory prose
  before the example to make the same-timeseries pattern discoverable.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KMN66MG8MCZZ0Y81GS1PFGB2/

Made-with: Cursor
The triggerFromNRuns field lets users require N consecutive check runs
to meet the threshold condition before the monitor triggers. This is
not exposed in the Axiom UI and previously required undiscovered API
knowledge, causing users to open support tickets. The new section in
configure-monitors.mdx explains the field, shows a JSON example, and
links to the relevant REST API endpoints.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KN2VTAZP0RAG7VJZ09P2FSJ4/

Made-with: Cursor
The RBAC docs explained roles and dataset-level capabilities in general
terms but lacked a concrete workflow showing how to restrict a user to
only certain datasets. Users had to figure out the combination of custom
roles, individual dataset permissions, and the None base role on their
own.

Added a new "Restrict users to specific datasets" section under the
dataset-level capabilities section that walks through a complete
three-step example: create a role with per-dataset query permissions,
create a group with that role, assign the None base role to users.
Added a tip showing the same pattern applies to ingest access.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KM3MXX59KN0VZX3T1KMVBX6A/

Made-with: Cursor
Users who built dashboard elements using MPL (Metrics Query Language)
found that parameterized filter bars had no effect on those elements.
The docs did not mention this limitation, leaving users confused about
why their filters weren't working.

Added a note under the filter bar description to clarify that dashboard
filters apply to APL chart queries only. MPL-based elements are not
affected by filter bars, and users who need filters across all charts
should write their queries in APL.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KM6N2R9HDR25K9FHC79GTH7M/

Made-with: Cursor
…nections

Users expected to be able to query live operational data from relational
databases (such as Postgres on AWS RDS) using the externaldata operator
to complement their historical data in Axiom. The docs described the
operator in terms of cloud storage and HTTP endpoints but did not
explicitly state that live database connections are unsupported, causing
confusion.

Added an info callout to the externaldata operator page making it clear
that the operator only works with static files in cloud storage or HTTP
endpoints, not live DB connections. The note also suggests the workaround
of exporting data from the database to a file in cloud storage.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KKHBC7FFWZBST2AY2EYJHZB8/

Made-with: Cursor
The monitor examples page lacked guidance on how to create an alert that
fires only when a metric stays above a threshold for a sustained period,
rather than triggering on a brief spike. Support received a question from
a user who wanted to alert when a metric remained above a threshold for
30 minutes continuously.

The solution is to use min() as the aggregation in the threshold monitor
query and set the range to the desired sustained duration. Because min()
returns the lowest value in the window, the result only exceeds the
threshold if every data point in the window was above the threshold.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KKCMZH3WXQEN91GSG24ZG89E/

Made-with: Cursor
Users receiving a "No activity detected by monitor" notification were
confused about what it meant and whether there was a bug in their setup.
The previous description of the Alert on no data setting did not explain
what the notification message would say, nor did it mention a common use
case for this feature.

Updated the description to include the exact notification message text
and a concrete example of when to use this option (detecting when a
data source stops sending events, e.g. an agent going offline).

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KJGD96179A445SH8TTE8CM3S/

Made-with: Cursor
New users iterating quickly on their event schema during prototyping
were confused when they hit the once-per-day vacuum limit and had no
documented path forward. The vacuum fields section mentioned the limit
but gave no practical guidance on what to do when it blocks progress.

Added a list of alternatives: using a dedicated development dataset,
deleting and recreating the dataset, and trimming before vacuuming.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KKBV0YBPA8KB1REX75Y9SZ4M/

Made-with: Cursor
The docs described has as matching when "RHS is a whole term in LHS"
but did not explain what constitutes a term boundary. Users were
confused about why has_cs matched in some cases but not others with
similar strings — for example, "parentSpanId" has "parent" returns
False because the entire camelCase value is a single term (no
non-alphanumeric separators), while "North America" has "North" returns
True because the space is a term boundary.

Added a "What is a term?" section explaining term boundaries with
concrete counter-examples, and clarified when to use has vs contains
vs startswith to guide users to the right operator for their use case.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KJZX8B71WHSG4F6W3MYH1JY0/

Made-with: Cursor
…essages

Users asked how to include the app name (or other custom attributes)
in Slack alerts sent by monitors. The existing docs mentioned that
enabling Notify by group includes the group value in the message, but
there was no practical guidance showing how to use this to include
fields like app_name, service_name, or other identifiers.

Added a new section "Include custom fields in alert messages" with
examples for both threshold monitors (group by the field + Notify by
group) and match monitors (use project to select specific fields).

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KK16M61S319S5P7XH4N1MQDV/

Made-with: Cursor
…board element

Users expected to resize columns in the table dashboard element but
could not find a way to do it. Column resizing is only available in
the Query tab (Explore) when the column-per-field view is active, not
in dashboard table elements. Added a note pointing users to the Query
tab and linking to the relevant section.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KJPVFBGJ667NYR3Y13RH9CXN/

Made-with: Cursor
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Islam Shehata <thesollyz@users.noreply.github.com>
The metrics query page mentioned rate and prom::rate functions but did
not explain how they handle counter resets, or what cumulative counters
are. Users querying cumulative counters that reset due to device restarts
or deployments had no guidance on which functions to use or how to
reconstruct totals across resets.

Added a new section explaining cumulative counter resets, how map rate
and align using prom::rate handle them, and how to combine rate with
sum to display totals over time windows despite resets.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KJ37SHHYDNDW56DFJP40T1BG/

Made-with: Cursor
The Loki endpoint page only showed JavaScript and Python client library
examples, which did not help users migrating from an existing Loki
deployment. Users with Promtail, Grafana Alloy, or Grafana Agent had no
guidance on how to redirect their log streams to Axiom.

Added a migration section with configuration examples for Promtail,
Grafana Alloy, and Vector. Clarified the Loki HTTP push API path
accepted by the endpoint. Added a comparison explaining when to use the
Loki endpoint vs the Loki Multiplexer. Updated keywords for
discoverability.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KHXNCZJJ71XWZAGRCAK9J4EJ/

Made-with: Cursor
The _index field in the Elasticsearch Bulk API request body is ignored
by Axiom. The target dataset must be specified in the URL path. This was
unclear to users migrating from Elasticsearch who expected to set the
index in the request body.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KJ23MAYNBZEWQK96MT51F76Y/

Co-authored-by: Cursor <cursoragent@cursor.com>
Users were surprised that downloading query results as CSV only produced
50 entries. Added documentation explaining the default limit and how to
increase it up to 50,000 using the limit operator in APL.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KHQ68XM9T5H3B1W4E0HF7V84/

Co-authored-by: Cursor <cursoragent@cursor.com>
Multiple users reported unauthorized errors when connecting to Axiom MCP
Server despite having valid API keys. Common issues include using the
wrong token type, incorrect organization ID, cached credentials, and
network restrictions in CI/CD environments. Added troubleshooting section
covering these scenarios.

Related support tickets:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KJ0RCTNRDG98J54JS8HJVRFH/
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KH15E24W0Q7AH18XZFKGV3KH/
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KHJCW6DZ3JF40BFCW2WSV8YJ/

Co-authored-by: Cursor <cursoragent@cursor.com>
A user asked whether sending OTEL traces and logs to the same dataset
would automatically correlate them. Added a section explaining the
recommended approach: use separate datasets, span events for contextual
logs, trace_id filtering for cross-dataset correlation, and span links
for asynchronous scenarios.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KHTXQAWASZFTE5VPPD9A7TVN/

Co-authored-by: Cursor <cursoragent@cursor.com>
A user asked whether data is automatically deleted after the retention
period expires or whether manual action is required. Added explicit
statement that Axiom automatically deletes expired data and that no
manual trimming is needed.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KHJ5JSC53HG4TF1JETPRNTS8/

Co-authored-by: Cursor <cursoragent@cursor.com>
A user was blocked on all queries and dashboards due to query limit
exceeded errors with no guidance on what to do. Added troubleshooting
section explaining what these errors mean, how to check current usage,
and how to resolve or prevent them.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KHJK0391TTKF72Q7S56Q3GXT/

Co-authored-by: Cursor <cursoragent@cursor.com>
Users were confused about how to display data from multiple queries in a single table element. The documentation now explains that each table element uses a single query, and to combine multiple queries, users should use the union operator in their APL query.

This addresses the limitation where users cannot add multiple separate queries to a single table element, and provides clear guidance on the recommended approach using union.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KBYZE14TFYVCD1SAM39ACDB3/
Users working with Convex DB Actions encountered issues with AI SDK telemetry not being exported because each action runs in an isolated environment. The documentation now includes a dedicated section explaining how to configure Axiom AI SDK for Convex Actions, specifically recommending the use of SimpleSpanProcessor instead of BatchSpanProcessor to ensure traces are exported immediately before the action completes.

Related support ticket:
- https://app.plain.com/workspace/w_01HA1Z15QQY1X6QR29KFMBMYTH/thread/th_01KBYQ38SW5BBYF8ZXGMM8TNRK/
@mintlify
Copy link
Copy Markdown

mintlify Bot commented Apr 27, 2026

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
axiom 🟢 Ready View Preview Apr 27, 2026, 1:19 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants