--- title: "SyncEngine Log Storage Guide" slug: "syncengine-log-storage-guide" description: "Learn to control SyncEngine container logs, prevent root filesystem overflow, and set up log rotation for efficient management and performance." updated: 2026-10-28T02:14:35Z published: 2026-10-28T02:14:35Z canonical: "docs.vastdata.com/syncengine-log-storage-guide" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.vastdata.com/llms.txt > Use this file to discover all available pages before exploring further. # SyncEngine Log Storage Guide How to control where SyncEngine container logs are stored, prevent logs from filling your root filesystem, and set up log rotation. --- ## Why This Matters By default, both Docker and Podman store container logs on the root filesystem (`/`). A busy SyncEngine worker can generate gigabytes of logs per hour. If `/` fills up, the host becomes unresponsive and all containers stop. This guide covers how to redirect logs to a dedicated volume (e.g., `/data/syncengine_logs/`) for both fresh installs and existing deployments. --- ## How SyncEngine Containers Are Deployed SyncEngine has two deployment types with different logging behavior: | Component | Deployed Via | Logging Config | Container Names | | --- | --- | --- | --- | | Control plane | `./ms deploy control` (podman-compose / docker-compose) | `max-size: 100m` in compose file | `syncengine-control`, `postgres`, `redis`, `prometheus`, `grafana`, `pgadmin`, `redisinsight`, `loki`, `otel-collector`, `syncengine-ui` | | Worker | `./ms deploy worker` (podman run / docker run) | **None -- unlimited growth** | `syncengine-worker` | > **Note:** Container names are set by the `.env` file (`CONTROL_HOSTNAME`, etc.) and by the `ms` script (`syncengine-worker` is hardcoded in the `deploy_worker` function). Your deployment may use different names -- substitute accordingly in the commands below. The **worker** is the primary concern. It generates the most log volume and has no rotation configured by default. The control plane containers have `max-size: 100m` set in their compose files (`podman-compose.yaml` / `docker-compose.yaml`), but their logs still land on `/` unless you move the storage location. > **Note:** Podman does not support the `max-file` option. The `max-file: "5"` setting in `podman-compose.yaml` is silently ignored. When `max-size` is reached, Podman truncates the log file in place rather than rotating to a new file. --- ## Prerequisites - [ ] **A dedicated volume** mounted at your target path (e.g., `/data`) with sufficient space - [ ] **Root or sudo access** (for rootful containers) or ownership of the Podman storage directory (for rootless) - [ ] **Docker 17.05+** or **Podman 3.0+** - [ ] The `./ms` script and `.env` file in your SyncEngine install directory --- ## Quick Reference | Method | Downtime Required | Scope | Docker | Podman | | --- | --- | --- | --- | --- | | Fresh install -- configure storage before deploying | None | All containers | Yes | Yes | | Per-container log path (worker) | Worker restart | Single container | No | Yes | | Move all container storage | Full restart | All containers | Yes | Yes | | Symlink storage directory | Full restart | All containers | Yes | Yes | | Emergency: free space now | None | Immediate relief | Yes | Yes | --- ## Method 1: Fresh Install -- Configure Storage Before Deploying Use this when deploying SyncEngine for the first time. Configure the container runtime to store all data (images, containers, logs) on your target volume before running `./ms deploy`. ### Docker ``` # Create the storage directory sudo mkdir -p /data/docker # Create or edit the daemon configuration sudo tee /etc/docker/daemon.json <<'EOF' { "data-root": "/data/docker", "log-driver": "json-file", "log-opts": { "max-size": "500m", "max-file": "5" } } EOF # Reload and restart Docker sudo systemctl daemon-reload sudo systemctl restart docker ``` Verify: ``` docker info -f '{{ .DockerRootDir }}' # Expected: /data/docker ``` Now deploy SyncEngine normally: ``` ./ms deploy control CONTROL_IP= WORKER_LABEL=