Exact percentiles, without choosing buckets first.
AirMonitor takes the OpenTelemetry stream you already export and answers the Prometheus queries you already run, with exact percentiles instead of bucket estimates.
0.01 % error
Worst p99 against the true value. Classic buckets: 38 %.
11× fewer series than classic buckets
7,306 against 78,567 for the same stream. A series is one tracked line, a metric plus its labels. A classic histogram keeps a line per bucket edge, plus a sum and a count: fourteen lines for each one here. AirMonitor keeps that distribution in one object. Native histograms already use one series; there the difference is accuracy, not the count.
6.6× faster
A p99-by-route panel: 77 ms against 507 ms.
One exporter
Added to your Collector, where you already export OpenTelemetry. No change to those services. A different instrumentation path, we can add.
A histogram makes you choose the buckets before you know the question.
A histogram's buckets are chosen when the code is written, and every answer after that is an estimate between two of them. AirMonitor keeps the measurements whole.
Buckets first. An estimate later.
Store the measurement. Ask when you know.
Latency, size, and status — kept on the same request.
- 2DLatency by response size: do bigger responses take longer?
- 3DAdd the status: do failed requests take longer?
- 4DAdd a fourth, such as database time.
Every request, by response size and latency
The dashboards you have, with answers you can stand behind.
Your queries, unchanged
Grafana adds a datasource and nothing else.
Your rules, unchanged
Evaluated inside, pushed to your Alertmanager.
Sliced after the fact
Latency by size by status, from the object already stored. No new metric.
See it on your telemetry.
We run AirMonitor beside your Prometheus and show you the same panels, side by side.
A drop-in beside the Collector and Grafana you have.
One daemon between the Collector you have and the Grafana you have. It files every value into an AirTree, a compact structure that holds a whole distribution exactly, and answers your queries from it.
Store the measurement. Choose the question later.
The span you already emit is the measurement
It carries the latency, so your application records nothing more.
Any quantile, any window
A p99.9 nobody planned for is answered from what is already stored.
Long retention, same answers
Minutes roll up into hours and days and still answer the same questions.
From the stream to an answer.
The Prometheus queries you have, answered from the stored measurement.
Dashboards and alerting rules written for Prometheus run as they are.
Exact percentiles
The real quantile of the stored distribution, not an estimate between bucket edges.
Rates that add up
No extrapolation: 0.7 % off at worst, against 26 % for Prometheus.
Statistics over time
Averages, minimums, maximums, deltas and predictions.
Alerting and recording rules
Your Prometheus rule files, pushed to your Alertmanager.
Questions you did not plan
One measurement sliced by another, with no new metric.
Checked before you switch
One command confirms a dashboard or a rule file will run.
The stable PromQL language is covered in full, subqueries and the @ modifier included.
Latency, size, and status — kept on the same request.
A histogram holds one measurement. An AirTree holds up to four of the same request in one object, so any of them can be asked against any other, later.
- 2DLatency by response size: do bigger responses take longer?
- 3DAdd the status: do failed requests take longer?
- 4DAdd a fourth: any number your spans carry, such as database time.
Every request, by response size and latency
The same object, by outcome
Ask in plain English. Read-only. The number comes from the store.
A built-in MCP server lets your AI assistant question what AirMonitor holds and get the exact number back.
Works with Claude Code, Cursor, Copilot and any other MCP-capable assistant.
Your AI tool, your daemon, your data.
- Local or remoteLaunched by your AI tool beside the daemon, or reached over HTTPS.
- Read-onlyAn assistant can look, but cannot change anything.
- Sized for a chatAnswers come back short enough for a conversation.
More than forty tools, built for the questions an incident asks.
What is here, and how busy
Exact numbers
What moved, and when
Is the rollout safe
Check before you save
The Monday numbers
One line in your AI tool.
Built-in investigations, from what went wrong to a capacity check, show up as commands.
# Claude Code, beside the daemon
claude mcp add airmonitor -- \
airmonitord mcp --url http://localhost:4320
Same requests. Same stream. Both systems.
AirMonitor and Prometheus received identical telemetry from the same OpenTelemetry Collector. Every figure here is read from those runs.
The reported percentile against the true one, minute by minute.
The same requests, read three ways: AirMonitor, classic buckets and native histograms.
Error of the reported percentile
p99 per minute, one route
At a thousand requests a second.
A service with 1,000 routes, both systems on the same stream.
What one observation costs your application, nanoseconds
Hosted, or in your account
AirMonitor is onboarding early customers.
See these panels on your telemetry
We run it beside your Prometheus and show you both, side by side.
Your account, your datacenter, or ours.
The same AirMonitor runs in all three.
Any cloud, any Kubernetes
A Helm chart, a .deb or a container image. Your telemetry never leaves your account.
One address for your Collector
Point your Collector at the endpoint and add a Grafana datasource.
A pair for availability
Two daemons hold the same data, and queries fail over.
One binary, one directory, one port.
Nothing beside it
No database to run alongside.
Health built in
It reports its own health and diagnoses itself.
Checked before the switch
Dashboards and rules are verified before you point anything at it.
Hosted, or in your account
AirMonitor is onboarding early customers.
See it on your telemetry
We run it beside your Prometheus and show you both, side by side.
In your account, nothing leaves. Hosted, no shared store.
Authenticated access
Only callers you authorise can send or query, and credentials rotate without a restart.
Encrypted in transit
HTTPS throughout, with your own certificate when you run it.
Tenant isolation
No shared store and no cross-tenant queries.
Read-only for assistants
An AI assistant can look, but cannot change anything.
Questions, answered.
Is this a Prometheus replacement?
On the query side, yes. It serves the Prometheus API and the stable PromQL language in full, so Grafana, alert rules and Alertmanager work unchanged. It can also run beside Prometheus while you compare. Where you need a different exporter or query path, we can work on that with you.
Do I have to change my instrumentation?
Not if you already export OpenTelemetry to a Collector. Spans give it latency distributions; counters and gauges come from the metrics you already export. If the result is what you want and your stack is different, we can add that integration.
Can an AI assistant use it?
Yes. A built-in MCP server lets Claude Code, Cursor, Copilot or any MCP-capable assistant ask in plain English. It is read-only.
What does it cost on disk?
About half of what Prometheus needs for the same stream on a compressing volume: 23.6 MB against 45.4 MB in our thousand-route run.
What does fewer series mean?
A series is one line Prometheus stores and queries: the metric name plus labels such as route. Classic histograms store a separate line for each bucket edge, plus a sum and a count, so the same traffic fanned out to 78,567 lines against 7,306 here. Fewer lines means a smaller index and fewer lines for a query to touch. It does not mean the percentile is stored as less data — disk is a separate comparison. Native histograms already avoid that fan-out; compare those on accuracy.
Which clouds does it run on?
Any. A Helm chart for Kubernetes, a .deb or a container image for any host, or hosted by AirMettle.
How is availability handled?
Two daemons receive the same stream and hold the same data. Queries fail over, and a daemon that was down catches up from its peer.
How exact is exact?
Percentiles stayed within 0.01 % of the true value in the worst minute of our runs.
Is it open source?
The AirTree engine is source-available on GitHub. The daemon and the hosted service are in early access.