This guide explains how to install SigNoz on a Docker Swarm cluster. Foundry generates a stack Compose file from your configuration and deploys it across the swarm with docker stack deploy.
Prerequisites
- A Docker Swarm cluster with Swarm mode initialized (
docker swarm init) and at least one manager node. - Docker Engine 20.10+ on each node.
- At least 4GB of memory available per node.
- Open ports:
8080(SigNoz UI),4317and4318(OTLP ingestion).
Install SigNoz
Step 1: Install foundryctl
curl -fsSL https://signoz.io/foundry.sh | bashFor manual install (Windows PowerShell, air-gapped, etc.) or PATH setup, see the foundry getting-started guide.
Step 2: Create casting.yaml
Create a casting file that targets Docker Swarm with flavor: swarm and mode: docker:
apiVersion: v1alpha1
kind: Installation
metadata:
name: signoz
spec:
deployment:
flavor: swarm
mode: dockerFor all configuration options, see the casting file reference and the Docker Swarm example.
Step 3: Deploy
Run this on a swarm manager node:
foundryctl cast -f casting.yamlStep 4: Verify the installation
Monitor the stack until the long-running services report their full replica count:
docker stack services signozThe output should look similar to the following:
ID NAME MODE REPLICAS IMAGE PORTS
umo0h2zcccyl signoz_ingester replicated 1/1 signoz/signoz-otel-collector:latest *:4317-4318->4317-4318/tcp
9nrnfpyx7ioc signoz_signoz-metastore-postgres-0 replicated 1/1 postgres:16
h6obimnoj110 signoz_signoz-signoz-0 replicated 1/1 signoz/signoz:latest *:8080->8080/tcp
gyf7woac9m4p signoz_signoz-telemetrykeeper-clickhousekeeper-0 replicated 1/1 clickhouse/clickhouse-keeper:25.5.6
oxx2l13lvwdd signoz_signoz-telemetrystore-clickhouse-0-0 replicated 1/1 clickhouse/clickhouse-server:25.5.6
e65ymxjial3p signoz_signoz-telemetrystore-clickhouse-user-scripts global 0/0 clickhouse/clickhouse-server:25.5.6
pofn1bs2qzpj signoz_signoz-telemetrystore-migrator replicated 0/1 signoz/signoz-otel-collector:latestDocker prefixes every service with the stack name (signoz_). The five long-running services should reach 1/1. The two bootstrap jobs run once and then stop, which is expected: …clickhouse-user-scripts runs in global mode and shows 0/0 after finishing, and …migrator shows 0/1 after its run. Confirm it finished without errors (see Troubleshooting).
Confirm the SigNoz backend is healthy:
curl http://localhost:8080/api/v1/healthA healthy backend returns {"status":"ok"}. Because Swarm publishes the port through its routing mesh, the UI is reachable on port 8080 of any node in the swarm. Open http://<NODE-IP>:8080/ (use http://localhost:8080/ on a single-node swarm).
Troubleshooting
foundryctl cast or docker stack deploy fails to deploy the stack
Deploying a stack requires Docker to be running, Swarm mode to be active, and the command to run on a manager node; a non-manager node fails with this node is not a swarm manager. Check all three at once:
docker info --format 'Swarm: {{.Swarm.LocalNodeState}} | Manager: {{.Swarm.ControlAvailable}}'Swarm: activemeans Swarm mode is on. If it readsinactive, initialize it withdocker swarm init(or join an existing swarm).Manager: truemeans this node is a manager. If it readsfalse, run the deploy from a manager node instead.
A service keeps restarting right after deploy
Docker Swarm starts every service in parallel and does not honor depends_on. Until ClickHouse and Postgres are ready, dependent services such as signoz_signoz-signoz-0 and signoz_signoz-telemetrystore-migrator may fail and restart a few times before they settle. Inspect any service that does not recover:
docker stack ps signoz # per-task state and last error
docker service logs signoz_signoz-telemetrystore-migrator # full logs for one serviceTo redeploy from a clean slate, remove the stack and run cast again (this keeps the named data volumes):
docker stack rm signoz
foundryctl cast -f casting.yaml