# Coroot

Observability and APM tool that combines metrics, logs, traces and profiles.

- Replaces: [Datadog](https://openlogs.fyi/alternatives/datadog)
- Summary: Paid observability services, such as Datadog.
- Stack: Go (language), ClickHouse (database)
- Deployment: docker_compose
- License: Apache-2.0 (osi) [source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/README.md), read 2026-10-22)
- Difficulty: hard. 5 services (1 database or broker: clickhouse-server), 9 volume mounts, no env values to set, host access: host_pid, privileged. Heuristic score 7 of 11: hard.
- Requirements: not stated
- Repository: [coroot/coroot](https://github.com/coroot/coroot)

## Install

1. Docker with the Compose plugin ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml))

   ```text
   A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
   ```

2. Save the compose file as docker-compose.yaml ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml))

   ```yaml
   name: coroot
   services:
     coroot:
       restart: always
       image: ghcr.io/coroot/coroot${LICENSE_KEY:+-ee} # set 'coroot-ee' as the image if LICENSE_KEY is defined
       pull_policy: always
       user: root
       volumes:
         - coroot_data:/data
       ports:
         - 8080:8080
       command:
         - '--data-dir=/data'
         - '--bootstrap-prometheus-url=http://prometheus:9090'
         - '--bootstrap-refresh-interval=15s'
         - '--bootstrap-clickhouse-address=clickhouse:9000'
       environment:
         - LICENSE_KEY=${LICENSE_KEY:-}
       depends_on:
         clickhouse:
           condition: service_healthy
         prometheus:
           condition: service_healthy
   
     node-agent:
       restart: always
       image: ghcr.io/coroot/coroot-node-agent
       pull_policy: always
       privileged: true
       pid: "host"
       volumes:
         - /sys/kernel/tracing:/sys/kernel/tracing
         - /sys/kernel/debug:/sys/kernel/debug
         - /sys/fs/cgroup:/host/sys/fs/cgroup
         - node_agent_data:/data
       command:
         - '--collector-endpoint=http://coroot:8080'
         - '--cgroupfs-root=/host/sys/fs/cgroup'
         - '--wal-dir=/data'
   
     cluster-agent:
       restart: always
       image: ghcr.io/coroot/coroot-cluster-agent
       pull_policy: always
       volumes:
         - cluster_agent_data:/data
       command:
         - '--coroot-url=http://coroot:8080'
         - '--metrics-scrape-interval=15s'
         - '--metrics-wal-dir=/data'
       depends_on:
         - coroot
   
     prometheus:
       restart: always
       image: prom/prometheus:v2.53.5
       volumes:
         - 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'
         - '--web.enable-lifecycle'
         - '--web.enable-remote-write-receiver'
       ports:
         - '127.0.0.1:9090:9090'
       healthcheck:
         test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:9090/-/healthy"]
         interval: 3s
         timeout: 5s
         retries: 5
         start_period: 10s
   
     clickhouse:
       restart: always
       image: clickhouse/clickhouse-server:24.3
       environment:
         CLICKHOUSE_SKIP_USER_SETUP: "1"
       volumes:
         - clickhouse_data:/var/lib/clickhouse
         - clickhouse_logs:/var/log/clickhouse-server
       ports:
         - '127.0.0.1:9000:9000'
       ulimits:
         nofile:
           soft: 262144
           hard: 262144
       configs:
         - source: clickhouse_logging
           target: /etc/clickhouse-server/config.d/logging_rules.xml
         - source: clickhouse_user_logging
           target: /etc/clickhouse-server/config.d/user_logging.xml
       healthcheck:
         test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8123/ping"]
         interval: 3s
         timeout: 5s
         retries: 5
         start_period: 10s
   
   volumes:
     prometheus_data: {}
     clickhouse_data: {}
     clickhouse_logs: {}
     coroot_data: {}
     node_agent_data: {}
     cluster_agent_data: {}
   
   configs:
     clickhouse_logging:
       content: |
         <clickhouse>
           <logger>
               <level>warning</level>
               <console>true</console>
           </logger>
           <query_thread_log remove="remove"/>
           <query_log remove="remove"/>
           <text_log remove="remove"/>
           <trace_log remove="remove"/>
           <metric_log remove="remove"/>
           <asynchronous_metric_log remove="remove"/>
           <session_log remove="remove"/>
           <part_log remove="remove"/>
           <latency_log remove="remove"/>
           <processors_profile_log remove="remove"/>
         </clickhouse>
     clickhouse_user_logging:
       content: |
         <clickhouse>
           <profiles>
             <default>
               <log_queries>0</log_queries>
               <log_query_threads>0</log_query_threads>
               <log_processors_profiles>0</log_processors_profiles>
             </default>
           </profiles>
         </clickhouse>
   ```

3. Start it ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml))

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

4. Open the app ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml))

   ```text
   Open http://localhost:8080. The compose file publishes host port 8080 for the coroot service.
   ```

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: node-agent: ghcr.io/coroot/coroot-node-agent (no tag), cluster-agent: ghcr.io/coroot/coroot-cluster-agent (no tag). A later pull can get a different version. ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 8080 (coroot), 127.0.0.1:9090 (prometheus), 127.0.0.1:9000 (clickhouse). A port without a host address listens on all host network interfaces. ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: /sys/kernel/tracing at /sys/kernel/tracing (node-agent), /sys/kernel/debug at /sys/kernel/debug (node-agent), /sys/fs/cgroup at /host/sys/fs/cgroup (node-agent). ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml), checked 2026-10-22)
- Some services get elevated host access: node-agent runs privileged, node-agent shares the host process list. ([source](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml), checked 2026-10-22)

### Signals

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

- Open issues and pull requests: 126
- Stars: 7980, forks: 409
- Last push: 2026-10-21 (0 days ago)
- Latest release: v1.28.1 on 2026-10-21 (0 days ago)

## Sources

- [Repository: https://github.com/coroot/coroot](https://github.com/coroot/coroot)
- [License: https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/LICENSE](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/LICENSE)
- [Business model: https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/README.md](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/README.md)
- [Compose file: https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml](https://github.com/coroot/coroot/blob/15137ef2f43e01d0a87245e44b937b25515e0afe/deploy/docker-compose.yaml)

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