OpenLogs

All tools

Uptrace

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

Replaces

Paid application monitoring services, such as Datadog.

All open-source alternatives to Datadog

Difficulty

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.

Stack

Go (language), ClickHouse (database), PostgreSQL (database), Redis (database)

Deployment

docker_compose

Requirements

Not stated.

License

AGPL-3.0 (OSI-approved open source)

Read from github.com/uptrace/uptrace/blob/1e622ff/LICENSE

Business model

Unknown

The README at the pinned commit does not state a business model, so it stays unknown.

Source: github.com/uptrace/uptrace/blob/1e622ff/README.md, read on .

Repository

uptrace/uptrace

GitHub stats

Stars
4,306
Forks
223
Open issues and pull requests
53
Last push
2026-10-22
Latest release
v2.1.0-rc.2
Released
2026-10-22

From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as AGPL-3.0.

Compose file

Config check passed docker compose config exited 0 on this exact file on 2026-10-22.
docker-compose.yml Version 1
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:

From the app's own repository: github.com/uptrace/uptrace/blob/1e622ff/example/docker/docker-compose.yml.

Compose file from uptrace/uptrace, used inside a checkout of that repository (documented setup B).

Install

  1. Docker with the Compose plugin and git (github.com/uptrace/uptrace/blob/1e622ff/example/docker/README.md)

    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 (github.com/uptrace/uptrace/blob/1e622ff/example/docker/README.md)
    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 (github.com/uptrace/uptrace/blob/1e622ff/example/docker/README.md)
    cd example/docker
  4. The compose file in the checkout: example/docker/docker-compose.yml (shown here for reading) (github.com/uptrace/uptrace/blob/1e622ff/example/docker/docker-compose.yml)

    Use the compose file shown above.

  5. What the compose file check ran with (github.com/uptrace/uptrace/blob/1e622ff/example/docker/README.md)

    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 (github.com/uptrace/uptrace/blob/1e622ff/example/docker/README.md)
    docker compose up -d
  7. Open the app (github.com/uptrace/uptrace/blob/1e622ff/example/docker/docker-compose.yml)

    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. (github.com/uptrace/uptrace/blob/1e622ff/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. (github.com/uptrace/uptrace/blob/1e622ff/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. (github.com/uptrace/uptrace/blob/1e622ff/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. (github.com/uptrace/uptrace/blob/1e622ff/example/docker/docker-compose.yml, checked 2026-10-22)

Signals

  • Open issues and pull requests: 53
  • Last push: 2026-10-22 (0 days before this page was built)
  • Latest release: v2.1.0-rc.2 on 2026-10-22 (0 days before this page was built)