Forever free OpenTelemetry APM

Uptrace is a free, open source OpenTelemetry APM — an application performance monitoring backend that ingests traces, metrics, and logs collected by OpenTelemetry, stores them in ClickHouse, and correlates them in a single UI.

That last part is what makes an OpenTelemetry APM worth having. A latency spike on a chart leads to the trace behind it, and that trace leads to the log records emitted while it ran — one query path across all three signals, because they share the same resource and attribute model instead of living in three products.

And because the collection layer is an open standard rather than a proprietary agent, the backend stays a decision you can revisit. Uptrace is free in the way that matters: self-host it and there is no per-host, per-seat, or per-data-volume fee, and no feature gate on the number of services you monitor.

Get started in 5 minutes

Try it without installing anything — the live demo runs on real data and needs no login.

Or run it locally:

shell
git clone https://github.com/uptrace/uptrace.git
cd uptrace/example/docker
docker compose up -d

Open http://localhost:14318 and log in with admin@uptrace.local / admin. The compose file brings up Uptrace, ClickHouse, PostgreSQL, Redis, and an OpenTelemetry Collector. Full walkthrough: Docker deployment.

Then point your application at it. Uptrace accepts OTLP directly, so any OpenTelemetry SDK works with two environment variables:

shell
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
export OTEL_SERVICE_NAME=my-service

For production deployments see Kubernetes, Ansible, and scaling.

What you get

One UI for traces, metrics, and logs

All three signals land in one store under one attribute model, so correlation is a click rather than a copy-pasted trace ID. From a slow span you reach the logs it emitted; from a dashboard anomaly you reach the traces underneath it.

Alerting that lives in version control

Monitors are defined in YAML alongside the rest of your infrastructure config:

  • Metric monitors evaluate a UQL expression over a rolling window — error rates, latency percentiles, CPU, disk
  • Error monitors fire the first time a new error pattern appears in your logs

Notifications route to Slack, PagerDuty, Teams, Telegram, email, and webhooks. See alerting and observability as code.

Cost that does not scale with your headcount

OpenTelemetry itself is free: the SDKs, instrumentation libraries, and the Collector are all Apache 2.0, with no paid tier and no commercial edition. What normally costs money is the backend that stores and queries the data — and with Uptrace self-hosted, that part is free too.

  • Self-hosted and free — no license, no per-host or per-seat pricing, no data cap
  • ClickHouse storage — ZSTD compression brings a 1KB span under 40 bytes
  • ~10,000 spans/sec per CPU core on ingest
  • S3 tiering — archive cold data to object storage while recent data stays on fast disks
  • Per-signal retention — logs and traces do not have to be kept for the same period

A real OpenTelemetry APM, not an OTel-compatible add-on

Plenty of tools accept OTLP through a translation layer bolted onto a proprietary data model, and attributes get flattened or dropped on the way in. Uptrace was built around OTLP and semantic conventions from the start — spans, metrics, and log records are stored in the shape OpenTelemetry defines, which is why correlation and out-of-the-box dashboards work without attribute mapping.

  • OTLP/gRPC on 4317 and OTLP/HTTP on 4318
  • Prometheus, Jaeger, and Zipkin formats for systems not yet on OTLP
  • Grafana data source if you want to keep existing dashboards
  • MCP server for querying your telemetry from AI agents
  • Sentry SDK support for error reporting, including source maps

Uptrace allows to monitor your whole application stack on a compact and informative dashboard. You get a quick overview for all your services, hosts, and systems.

Overview dashboard

You can also analyze application performance with a fast and intuitive query language. You have the full power of SQL at your disposal to get deep insights from your data.

Faceted filters

Fill the gaps left by tracing with modern metrics. Uptrace comes with pre-built dashboards for popular instrumentations and the ability to use Promql-like expressions to visualize metrics.

Metrics

Uptrace vs traditional APM

Every APM answers the same three questions: is the application working, is it fast, and why is it slow. The difference is what you give up to get the answers. A traditional APM collects them through an agent it owns, so the data arrives in a shape only that vendor reads. An OpenTelemetry APM answers them from telemetry you collected yourself, in a format any backend understands.

UptraceDatadog, New Relic, Dynatrace
InstrumentationPlain OpenTelemetry — works with any backendProprietary agents
Switching costChange one endpointRe-instrument every service
Self-hostingSupported, and freeRarely available
PricingFree self-hosted; usage-based cloudPer-host, per-seat, or per-GB
Source codeOn GitHub, Apache 2.0Closed
Data exportRaw telemetry, re-exportableVendor API only

For a wider survey of OpenTelemetry APM options, see top OpenTelemetry backends and APM tools compared.

How Uptrace works

SDKs can export to Uptrace directly, or through an OpenTelemetry Collector if you want processing, redaction, or routing to be configuration rather than a redeploy. ClickHouse stores traces, metrics, and logs; PostgreSQL holds metadata, users, projects, and monitor definitions. See installation and configuration.

OpenTelemetry documentation

Setting up the pipeline that feeds an OpenTelemetry APM:

What you needPage
Instrument an application in your languageGet started
Instrument a specific framework or libraryIntegration guides
Collect from infrastructure or existing agentsData ingestion
Understand how SDK, Collector, and OTLP fit togetherArchitecture
Run a Collector in front of the backendOpenTelemetry Collector
Route data to one or more backendsCollector exporters
Configure the SDKEnvironment variables
Keep traces connected across servicesContext propagation
Control telemetry volume and costSampling
Deploy in KubernetesOpenTelemetry Operator
Fix "no data is arriving"Troubleshooting

Background on the signals themselves: distributed tracing, metrics, logs, and profiles.

Need help? Join the community on Telegram, Slack, or start a discussion on GitHub.

What's next?