{
  "schema_version": 1,
  "generated_at": "2026-10-23T00:00:00.000Z",
  "canonical_url": "https://openlogs.fyi/tools/uptrace",
  "slug": "uptrace",
  "name": "Uptrace",
  "tagline": "Observability backend for traces, metrics and logs that accepts OpenTelemetry data.",
  "replaces": {
    "summary": "Paid application monitoring services, such as Datadog.",
    "products": [
      {
        "slug": "datadog",
        "name": "Datadog",
        "vendor": "Datadog",
        "url": "https://openlogs.fyi/alternatives/datadog"
      }
    ]
  },
  "stack": [
    {
      "kind": "language",
      "name": "Go"
    },
    {
      "kind": "database",
      "name": "ClickHouse"
    },
    {
      "kind": "database",
      "name": "PostgreSQL"
    },
    {
      "kind": "database",
      "name": "Redis"
    }
  ],
  "deployment_methods": [
    "docker_compose"
  ],
  "requirements": {
    "min_ram_mb": null,
    "min_cpu_cores": null,
    "source_url": null
  },
  "license": {
    "spdx": "AGPL-3.0",
    "class": "osi",
    "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/LICENSE"
  },
  "business_model": {
    "value": "unknown",
    "notes": "The README at the pinned commit does not state a business model, so it stays unknown.",
    "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/README.md",
    "checked_at": "2026-10-22"
  },
  "difficulty": {
    "value": "hard",
    "reason": "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."
  },
  "repository": {
    "owner": "uptrace",
    "name": "uptrace",
    "url": "https://github.com/uptrace/uptrace"
  },
  "compose_check": {
    "status": "config_ok",
    "validated_at": "2026-10-22",
    "summary": "config_ok on 2026-10-22"
  },
  "recipe": {
    "version": 1,
    "source_path": "example/docker/docker-compose.yml",
    "source_repo": "uptrace/uptrace",
    "source_commit_sha": "1e622fff165391a26bbebc135e4c4f8a843ef1bd",
    "source_kind": "app_repo",
    "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml"
  },
  "install_steps": [
    {
      "order": 1,
      "kind": "prerequisite",
      "language": "text",
      "label": "Docker with the Compose plugin and git",
      "body": "A host with Docker, the Docker Compose plugin and git. This entry needs a checkout of the project repository.",
      "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 2,
      "kind": "shell",
      "language": "bash",
      "label": "Get the source at commit 1e622ff",
      "body": "git init uptrace\ncd uptrace\ngit remote add origin https://github.com/uptrace/uptrace.git\ngit sparse-checkout init --cone\ngit sparse-checkout set example/docker\ngit fetch --depth 1 --filter=blob:none origin 1e622fff165391a26bbebc135e4c4f8a843ef1bd\ngit checkout FETCH_HEAD",
      "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 3,
      "kind": "shell",
      "language": "bash",
      "label": "Go to the folder the docs use",
      "body": "cd example/docker",
      "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 4,
      "kind": "compose",
      "language": "yaml",
      "label": "The compose file in the checkout: example/docker/docker-compose.yml (shown here for reading)",
      "body": "services:\n  clickhouse:\n    image: clickhouse/clickhouse-server:26.3\n    restart: on-failure\n    environment:\n      CLICKHOUSE_USER: uptrace\n      CLICKHOUSE_PASSWORD: uptrace\n      CLICKHOUSE_DB: uptrace\n    healthcheck:\n      test: ['CMD', 'wget', '--spider', '-q', 'localhost:8123/ping']\n      interval: 1s\n      timeout: 1s\n      retries: 30\n      start_period: 120s\n    volumes:\n      - ch_data:/var/lib/clickhouse\n    ports:\n      - '8123:8123'\n      - '9000:9000'\n\n  postgres:\n    image: postgres:17-alpine\n    restart: on-failure\n    environment:\n      PGDATA: /var/lib/postgresql/data/pgdata\n      POSTGRES_USER: uptrace\n      POSTGRES_PASSWORD: uptrace\n      POSTGRES_DB: uptrace\n    healthcheck:\n      test: ['CMD-SHELL', 'pg_isready -U uptrace -d uptrace']\n      interval: 1s\n      timeout: 1s\n      retries: 30\n    volumes:\n      - 'pg_data3:/var/lib/postgresql/data/pgdata'\n    ports:\n      - '5432:5432'\n\n  redis:\n    image: redis:6.2.2-alpine\n    restart: on-failure\n    healthcheck:\n      test: ['CMD', 'redis-cli', 'ping']\n      interval: 1s\n      timeout: 1s\n      retries: 30\n\n  uptrace:\n    image: 'uptrace/uptrace:2.1.0-rc.1'\n    restart: on-failure\n    volumes:\n      - ./uptrace.yml:/etc/uptrace/config.yml\n      - ./certs/server.crt:/etc/uptrace/server.crt\n      - ./certs/server.key:/etc/uptrace/server.key\n    #environment:\n    #  - DEBUG=2\n    ports:\n      - '14317:4317'\n      - '14318:80'\n    depends_on:\n      clickhouse:\n        condition: service_healthy\n      postgres:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n\n  otelcol:\n    image: otel/opentelemetry-collector-contrib:0.123.0\n    restart: on-failure\n    volumes:\n      - ./otel-collector.yaml:/etc/otelcol-contrib/config.yaml\n    ports:\n      - '4317:4317'\n      - '4318:4318'\n    extra_hosts:\n      - 'host.docker.internal:host-gateway'\n    depends_on:\n      - uptrace\n\n  mailpit:\n    image: axllent/mailpit\n    restart: always\n    ports:\n      - 1025:1025\n      - 8025:8025\n    environment:\n      MP_MAX_MESSAGES: 5000\n      MP_DATA_FILE: /data/mailpit.db\n      MP_SMTP_AUTH_ACCEPT_ANY: 1\n      MP_SMTP_AUTH_ALLOW_INSECURE: 1\n    volumes:\n      - mailpit_data:/data\n\n  vector:\n    image: timberio/vector:0.28.X-alpine\n    volumes:\n      - ./vector.toml:/etc/vector/vector.toml:ro\n\n  grafana:\n    image: grafana/grafana:12.0.0\n    restart: on-failure\n    volumes:\n      - ./grafana/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml\n      - ./grafana/custom.ini:/etc/grafana/grafana.ini\n    ports:\n      - '3000:3000'\n    extra_hosts:\n      - 'host.docker.internal:host-gateway'\n\n  prometheus:\n    image: prom/prometheus:v2.36.2\n    restart: always\n    volumes:\n      - ./prometheus.yml:/etc/prometheus/prometheus.yml\n      - prometheus_data:/prometheus\n    command:\n      - '--config.file=/etc/prometheus/prometheus.yml'\n      - '--storage.tsdb.path=/prometheus'\n      - '--web.console.libraries=/usr/share/prometheus/console_libraries'\n      - '--web.console.templates=/usr/share/prometheus/consoles'\n    extra_hosts:\n      - 'host.docker.internal:host-gateway'\n\n  node_exporter:\n    image: quay.io/prometheus/node-exporter:latest\n    container_name: node_exporter\n    command:\n      - '--path.rootfs=/host'\n    network_mode: host\n    pid: host\n    restart: unless-stopped\n    volumes:\n      - '/:/host:ro,rslave'\n\nvolumes:\n  ch_data:\n  pg_data3:\n  prometheus_data:\n  mailpit_data:\n",
      "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml",
      "validation_status": "config_ok"
    },
    {
      "order": 5,
      "kind": "note",
      "language": "text",
      "label": "What the compose file check ran with",
      "body": "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.",
      "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 6,
      "kind": "shell",
      "language": "bash",
      "label": "Start it",
      "body": "docker compose up -d",
      "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/README.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 7,
      "kind": "verify",
      "language": "text",
      "label": "Open the app",
      "body": "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.",
      "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml",
      "validation_status": "unvalidated"
    }
  ],
  "notes": [
    {
      "kind": "gotcha",
      "title": "Some images use the latest tag or no tag",
      "body": "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_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file publishes host ports",
      "body": "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_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file mounts host folders",
      "body": "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_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "Some services get elevated host access",
      "body": "node_exporter uses the host network, node_exporter shares the host process list.",
      "source_url": "https://github.com/uptrace/uptrace/blob/1e622fff165391a26bbebc135e4c4f8a843ef1bd/example/docker/docker-compose.yml",
      "checked_at": "2026-10-22"
    }
  ],
  "signals": {
    "captured_at": "2026-10-22",
    "stars": 4306,
    "forks": 223,
    "open_issues": 53,
    "last_push": "2026-10-22",
    "days_since_push": 0,
    "latest_release": "v2.1.0-rc.2",
    "latest_release_date": "2026-10-22",
    "days_since_release": 0
  },
  "links": {
    "html": "https://openlogs.fyi/tools/uptrace",
    "markdown": "https://openlogs.fyi/tools/uptrace.md",
    "json": "https://openlogs.fyi/tools/uptrace.json"
  },
  "updated_at": "2026-10-22"
}
