New: query your telemetry from Claude Code, Codex or Cursor

Observabilityfrom your serversto your models.

Infrastructure, Kubernetes, cloud services, application traces and GenAI spans in one OpenTelemetry-native store, with dashboards, drilldown and alerting included. Ask Claude Code, Codex or Cursor about it, and the agent runs the queries itself, signed in as itself, with every change in the audit trail.

Free tier: 20K active series, 50 GB of logs and 50 GB of traces a month, 90-day retention. No card.

One platform

Infrastructure · Kubernetes · Containers · Cloud services · Databases · APM · Logs · Traces · Metrics · LLM and agent telemetry · Dashboards · Explorer · Alerting · Snapshots · Live queries from your AI tools

The platform

From collection to alerting, one product.

Collection, transport, storage, query and notification sit behind one set of credentials. The agent is a standard OpenTelemetry Collector, the query APIs speak PromQL, LogQL and TraceQL, and we run everything in between.

remote_write · OTLP · TLS onlyOpAMP · config pushFleet Managementcontrol planeYour servicesKubernetes · VMs · model callsxScaler agentOTel Collector, OpAMP-managedeBPF sensorno code changesMetricsPromQL outLogsLogQL outTracesTraceQL out · GenAI spansone store, correlated by trace_idInsightsships with the tenantDashboards · ExplorerAlerting · SnapshotsMCP for coding agentsYour own Grafanaoptional, APIs stay openYOUR INFRASTRUCTURExSCALER, MANAGED
AI observability

Every model call is a span.

An application that calls a model has two costs your existing dashboards cannot see: tokens, and the latency of somebody else's inference. Your app emits OpenTelemetry GenAI spans through the OTLP exporter its SDK already has, and each one carries the model, the operation, the token counts and the finish reason.

The span sits inside the request that triggered it, so a slow endpoint shows the inference time in the waterfall rather than an unexplained gap. Token usage and call duration arrive as histograms split by model and operation.

Which model is burning the budget, whether p95 moved, how many calls failed.

Agent frameworks that emit OTel spans land the same way, one span per step.

No second collector to run and no separate AI product to switch on.

Whoever your SDK calls

The provider and the model come off the span itself, in gen_ai_request_model. Nothing here is a separate integration to switch on.

insight / metricsgen_ai
CALL DURATION BY MODELp50 · p95
gpt-4o420 ms · 1.68 s
claude-sonnet380 ms · 1.21 s
text-embedding-328 ms · 74 ms
INPUT TOKENS · 24 H8.42M
OUTPUT TOKENS · 24 H2.16M
FINISH_REASONstop 23.9klength 142content_filter 11

Your coding agent can run the queries.

Connect Claude Code, Codex, Cursor or any MCP client to your tenant. It writes the PromQL, LogQL and TraceQL itself, so you ask in English and it goes and looks rather than waiting to be handed a log paste.

There is no API key to leak. Whoever connects signs in through the browser and ticks the capabilities the connection may use, and it never exceeds that person's role.

Query metrics, logs and traces, and walk a metric to the trace behind it to the lines around a span.

Read your dashboards, alert rules and firing alerts, and see where a notification routes.

Build a dashboard or write an alert rule from what it found, inside the capabilities you granted.

Nothing it can do deletes anything, and every change it makes is attributed in the audit trail.

settings / AI clientsMCP

Every client is added by a person, through your own sign-in, and can never do more than that person's role allows. Revoking the person revokes the client with them.

Kept for every connection
Connected bythe person who added it, not a shared key
Can dothe capabilities granted at connection time
Last usedwhen it last touched your telemetry
Clients that speak MCP
and any other

Three signals, one store, one set of credentials.

01Metrics

Prometheus remote_write and OTLP in, PromQL out.

Keep the pod, region and trace_id labels you would otherwise strip to keep a bill down. Query them with the PromQL your dashboards already contain.

remote_write · OTLP/HTTP · OTLP/gRPC
02Logs

Native push and OTLP in, LogQL out.

Structured and unstructured lines from the agent, Fluentd, Vector or Logstash. There is no Elasticsearch cluster to size, shard or reindex.

native push · OTLP/HTTP · OTLP/gRPC
03Traces

OTLP in, TraceQL and Jaeger out.

Span waterfall, critical path, service graph and exceptions, with the log lines written while a span ran one click away.

OTLP/HTTP · OTLP/gRPC
checkout-api / Checkout Request
10 spans · 4 services · 293 mslive
16.39 ms27.43 ms203 ms23.59 ms179 mscheckout-apiauth-servicecart-servicepayment-servicepayments-dbpayment-gateway
healthyabove p95 budgetmove the cursor across the graph
Correlation

The link between a metric point, the trace that produced it and the logs written during that span is kept at write time. A log line carrying a trace_id opens that trace, and a span opens the lines around it. Nothing is joined at query time.

A dashboard section showing error and warning log lines whose JSON carries trace_id and span_id, next to two latency panels plotting exemplars, each point opening the trace it came from.
Logs · trace_id on every lineExemplars · click a point for its trace
Fleet Management

You edit one config block.

The agent is a standard OpenTelemetry Collector. You write the opamp extension on the host once. Every receiver, processor and exporter after that arrives from the portal, versioned, with secrets resolved on the agent rather than checked into a repo.

Enrol with a token. Push a pipeline change to one agent or to the whole fleet.

eBPF instrumentation reads CPU, memory, network and I/O with no code changes.

Trace auto-instrumentation attaches to Kubernetes workloads you cannot rebuild.

otel-collector-config.yamlHOST · agent-01
# the only file you edit by hand
extensions:
opamp:
server:
ws:
endpoint: wss://<your-opamp-endpoint>/v1/opamp
headers:
Authorization: "Bearer ${ENROLLMENT_TOKEN}"
Fleet / agents22 ENROLLED
AGENTSTATUSVERSIONPIPELINESSEEN
agent-01healthy0.112.032s
agent-02healthy0.112.033s
agent-03applying0.112.041s
agent-04upgrade due0.111.434s
k8s-daemonset (18)healthy0.112.021s
OpAMP over WebSocket, TLS onlyconfig revision 41
Tenants and regions

Each tenant lives in the region you pick.

A tenant is the isolation boundary: its own endpoints, its own token, its own data. You choose its region when you create it, and one account holds as many as you need, so an obligation to keep data in one place costs you a tenant rather than a second contract.

The region is set when the tenant is created, and everything written to that tenant stays in it.

An agent enrols into one tenant, so where a host reports decides where its telemetry lands.

Every read names its tenant, so a token for one is not a token for another.

All of them arrive on one bill, on the Scale plan and above.

acme / tenants3 ACTIVE
TENANTREGIONAGENTSSERIES
acme-prod-euEurope1841.4M
acme-prod-usUnited States96820K
acme-labEurope1238K
One login, one bill, separate dataown endpoint per tenant

Read it in Insights, or in the Grafana you already run.

The Prometheus-, Loki- and Tempo-compatible query APIs stay open, so the dashboards and alert rules your team already maintains keep working unchanged.

Bring your own Grafana

Add xScaler as three data sources. Existing dashboards, folders and alert rules keep working, and Grafana's alerting engine queries xScaler like any other Prometheus or Loki source.

Prometheusyour metrics endpoint
Lokiyour logs endpoint
Tempoyour traces endpoint
Set up the data sources

Or anything else that speaks them

The Jaeger UI, OpenSearch Dashboards, a notebook, a script in CI. Anything that can talk to a Prometheus, Loki or Tempo API can read your tenant, which is also what makes leaving cheap.

Authorization: Bearer <token>
X-Scope-OrgID: <tenant-id>
Both headers on every read and every write. TLS only, no plaintext option.
Query API reference
Ships from

Prometheus · OpenTelemetry SDKs · OTel Collector · Grafana Alloy · Fluentd · Vector · Logstash · Kubernetes · Docker · Linux · Windows · AWS · Azure · GCP · Postgres · MySQL · MongoDB · Redis · Nginx · Elasticsearch · Go · Python · Node.js · GenAI SDKs · agent frameworks

Pricing

Priced on what you send.

One plan, one bill. Metrics, logs and traces are meters inside it, not three products to buy, and Insights, the MCP server and the open query APIs are on every plan including the free tier.

Free

NO CARD
$0forever

Metrics, logs and traces together, one tenant, the whole of Insights.

Start free

Scale

MOST TEAMS START HERE
$19/ month + usage

One package for all three signals. No series or volume ceiling to plan around.

Get started

Enterprise

ANNUAL
Talk to us

Custom limits, retention up to a year, custom SSO and a dedicated engineer.

Book a call
Metrics · active series
20,000
Metered
Custom
Logs · ingestion
50 GB / month
Metered
Custom
Traces · ingestion
50 GB / month
Metered
Custom
Retention
90 days
90 days
Up to 1 year
Multi-tenancy
Included
Included
Included
Audit logging
Included
Included
Included
SSO
Google · Microsoft
Google · Microsoft
Custom provider
Bulk data extract
Not included
Not included
Included
Uptime SLA
Not included
99.9%
99.9%
Support
Community
Priority
Dedicated engineer
What usage costs

$19 a month for the platform, then $0.002175 per active series, $0.45 per GB of logs and $0.45 per GB of traces.
One base fee, one bill. You are not buying metrics, logs and traces separately.

Where the bill landsModel your own bill →
xScaler
Self-hosted
AWS AMP
Grafana Cloud
New Relic
Dynatrace
Datadog
lower monthly list pricehigher monthly list price
Questions

Questions we get on the first call.

Something not here? Book thirty minutes with an engineer who works on the platform. Book a call →

Do we have to replace our current stack?
No. Ingest is Prometheus remote_write and OTLP, so your collectors keep writing. The query APIs are Prometheus-, Loki- and Tempo-compatible, so your dashboards and alert rules keep reading.
What happens to our data if we leave?
The same open APIs that let your Grafana read the tenant let you read it out, and they stay open until the day you stop paying. On Enterprise we run the bulk extract for you and hand over the history, so you leave with what you put in.
Is the agent really just an OpenTelemetry Collector?
Yes. You write one opamp extension block on the host. Every receiver, processor and exporter after that arrives from the portal, versioned, with secrets resolved on the agent.
How much do we have to instrument before we see anything?
Nothing, to start. The eBPF sensor reads CPU, memory, network and disk with no code changes, and trace auto-instrumentation attaches to Kubernetes workloads you cannot rebuild. SDK instrumentation buys detail rather than basic coverage.
What actually makes the bill jump?
Cardinality. Labels carrying unbounded values (user IDs, request IDs and session tokens) grow series faster than traffic does. A query in the docs ranks your worst offenders, and the agent can drop those labels before they are ever billed.
Is it safe to let a coding agent near production data?
No API key is involved. Whoever connects signs in through the browser and ticks the capabilities the connection may use, and it acts as that person without ever exceeding their role. Nothing it can do deletes anything, and every change it makes is attributed in the audit trail.
Do the models we ship need a separate product?
No. GenAI spans leave through the OTLP exporter your SDK already has, into the same agent, with the same two headers. They read back in Insights next to the rest of your telemetry.
What are the hard limits?
Thirty labels per series, 1,024 characters for a label name and 2,048 for a value, 2,000 samples per remote_write request, and a two-minute query timeout. Series and volume ceilings are plan-dependent.

Start on the free tier.

20K active series, 50 GB of logs and 50 GB of traces a month, 90-day retention, and the whole of Insights. Drop the opamp block on one host, and Insights has data as soon as the agent reports.

The first five minutes
01Create a tenant in the portal
02Copy the enrolment token
03Drop the opamp block on one host
04Open Insights and query it