# Uptrace

Observability backend for traces, metrics and logs that accepts OpenTelemetry data.

- Replaces: [Datadog](https://openlogs.fyi/alternatives/datadog)
- Summary: Paid application monitoring services, such as Datadog.
- Stack: Go (language), ClickHouse (database), PostgreSQL (database), Redis (database)
- Deployment: docker_compose
- License: AGPL-3.0 (osi) [source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/README.md), read 2026-10-22)
- Difficulty: hard. 10 services (3 database or broker: clickhouse-server, postgres, redis), 13 volume mounts, no env values to set, host access: host_network, host_pid. Heuristic score 9 of 11: hard. A source checkout is needed, so the rating is at least medium.
- Requirements: not stated
- Repository: [uptrace/uptrace](https://github.com/uptrace/uptrace)

## Install

1. Docker with the Compose plugin and git ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md))

   ```text
   A host with Docker, the Docker Compose plugin and git. This entry needs a checkout of the project repository.
   ```

2. Get the source at commit 1e622ff ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md))

   ```bash
   git init uptrace
   cd uptrace
   git remote add origin https://github.com/uptrace/uptrace.git
   git sparse-checkout init --cone
   git sparse-checkout set example/docker
   git fetch --depth 1 --filter=blob:none origin 1e622fff165391a26bbebc135e4c4f8a843ef1bd
   git checkout FETCH_HEAD
   ```

3. Go to the folder the docs use ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md))

   ```bash
   cd example/docker
   ```

4. The compose file in the checkout: example/docker/docker-compose.yml (shown here for reading) ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml))

   ```yaml
   services:
     clickhouse:
       image: clickhouse/clickhouse-server:26.3
       restart: on-failure
       environment:
         CLICKHOUSE_USER: uptrace
         CLICKHOUSE_PASSWORD: uptrace
         CLICKHOUSE_DB: uptrace
       healthcheck:
         test: ['CMD', 'wget', '--spider', '-q', 'localhost:8123/ping']
         interval: 1s
         timeout: 1s
         retries: 30
         start_period: 120s
       volumes:
         - ch_data:/var/lib/clickhouse
       ports:
         - '8123:8123'
         - '9000:9000'
   
     postgres:
       image: postgres:17-alpine
       restart: on-failure
       environment:
         PGDATA: /var/lib/postgresql/data/pgdata
         POSTGRES_USER: uptrace
         POSTGRES_PASSWORD: uptrace
         POSTGRES_DB: uptrace
       healthcheck:
         test: ['CMD-SHELL', 'pg_isready -U uptrace -d uptrace']
         interval: 1s
         timeout: 1s
         retries: 30
       volumes:
         - 'pg_data3:/var/lib/postgresql/data/pgdata'
       ports:
         - '5432:5432'
   
     redis:
       image: redis:6.2.2-alpine
       restart: on-failure
       healthcheck:
         test: ['CMD', 'redis-cli', 'ping']
         interval: 1s
         timeout: 1s
         retries: 30
   
     uptrace:
       image: 'uptrace/uptrace:2.1.0-rc.1'
       restart: on-failure
       volumes:
         - ./uptrace.yml:/etc/uptrace/config.yml
         - ./certs/server.crt:/etc/uptrace/server.crt
         - ./certs/server.key:/etc/uptrace/server.key
       #environment:
       #  - DEBUG=2
       ports:
         - '14317:4317'
         - '14318:80'
       depends_on:
         clickhouse:
           condition: service_healthy
         postgres:
           condition: service_healthy
         redis:
           condition: service_healthy
   
     otelcol:
       image: otel/opentelemetry-collector-contrib:0.123.0
       restart: on-failure
       volumes:
         - ./otel-collector.yaml:/etc/otelcol-contrib/config.yaml
       ports:
         - '4317:4317'
         - '4318:4318'
       extra_hosts:
         - 'host.docker.internal:host-gateway'
       depends_on:
         - uptrace
   
     mailpit:
       image: axllent/mailpit
       restart: always
       ports:
         - 1025:1025
         - 8025:8025
       environment:
         MP_MAX_MESSAGES: 5000
         MP_DATA_FILE: /data/mailpit.db
         MP_SMTP_AUTH_ACCEPT_ANY: 1
         MP_SMTP_AUTH_ALLOW_INSECURE: 1
       volumes:
         - mailpit_data:/data
   
     vector:
       image: timberio/vector:0.28.X-alpine
       volumes:
         - ./vector.toml:/etc/vector/vector.toml:ro
   
     grafana:
       image: grafana/grafana:12.0.0
       restart: on-failure
       volumes:
         - ./grafana/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml
         - ./grafana/custom.ini:/etc/grafana/grafana.ini
       ports:
         - '3000:3000'
       extra_hosts:
         - 'host.docker.internal:host-gateway'
   
     prometheus:
       image: prom/prometheus:v2.36.2
       restart: always
       volumes:
         - ./prometheus.yml:/etc/prometheus/prometheus.yml
         - prometheus_data:/prometheus
       command:
         - '--config.file=/etc/prometheus/prometheus.yml'
         - '--storage.tsdb.path=/prometheus'
         - '--web.console.libraries=/usr/share/prometheus/console_libraries'
         - '--web.console.templates=/usr/share/prometheus/consoles'
       extra_hosts:
         - 'host.docker.internal:host-gateway'
   
     node_exporter:
       image: quay.io/prometheus/node-exporter:latest
       container_name: node_exporter
       command:
         - '--path.rootfs=/host'
       network_mode: host
       pid: host
       restart: unless-stopped
       volumes:
         - '/:/host:ro,rslave'
   
   volumes:
     ch_data:
     pg_data3:
     prometheus_data:
     mailpit_data:
   ```

5. What the compose file check ran with ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md))

   ```text
   The compose file check ran in a checkout of uptrace/uptrace at 1e622fff165391a26bbebc135e4c4f8a843ef1bd (a sparse checkout: the top-level files and the folder example/docker), in the folder example/docker. The Docker demo guide tells the reader to clone the repository, go into example/docker and run docker compose pull and docker compose up -d.
   ```

6. Start it ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md))

   ```bash
   docker compose up -d
   ```

7. Open the app ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml))

   ```text
   Open http://localhost:14318. The compose file publishes host port 14318 for the uptrace service. The demo guide says to open the Uptrace UI at this address.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- Some images use the latest tag or no tag: Images without a pinned version: mailpit: axllent/mailpit (no tag), node_exporter: quay.io/prometheus/node-exporter:latest. A later pull can get a different version. ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 8123 (clickhouse), 9000 (clickhouse), 5432 (postgres), 14317 (uptrace), 14318 (uptrace), 4317 (otelcol), 4318 (otelcol), 1025 (mailpit) and 2 more. A port without a host address listens on all host network interfaces. ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./uptrace.yml at /etc/uptrace/config.yml (uptrace), ./certs/server.crt at /etc/uptrace/server.crt (uptrace), ./certs/server.key at /etc/uptrace/server.key (uptrace), ./otel-collector.yaml at /etc/otelcol-contrib/config.yaml (otelcol), ./vector.toml at /etc/vector/vector.toml (vector), ./grafana/datasource.yml at /etc/grafana/provisioning/datasources/datasource.yml (grafana), ./grafana/custom.ini at /etc/grafana/grafana.ini (grafana), ./prometheus.yml at /etc/prometheus/prometheus.yml (prometheus) and 1 more. ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml), checked 2026-10-22)
- Some services get elevated host access: node_exporter uses the host network, node_exporter shares the host process list. ([source](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 53
- Stars: 4306, forks: 223
- Last push: 2026-10-22 (0 days ago)
- Latest release: v2.1.0-rc.2 on 2026-10-22 (0 days ago)

## Sources

- [Repository: https://github.com/uptrace/uptrace](https://github.com/uptrace/uptrace)
- [License: https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/LICENSE](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/LICENSE)
- [Business model: https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/README.md](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/README.md)
- [Compose file: https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml)
- [Install step: https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md](https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md)

---
Canonical: https://openlogs.fyi/tools/uptrace  
Last updated: 2026-10-22
