Uptime Kuma — Monitor Setup Guide¶
Configure Uptime Kuma to monitor all 13 Forma3D.Connect staging containers
Quick Start: Setup Script (Recommended)¶
The fastest way to configure all monitors is to run the setup script, which uses Uptime Kuma's Socket.IO API.
Note: The Backup import feature in Uptime Kuma is deprecated and unreliable. Use the script approach instead.
Step 1: Run the Setup Script¶
From the project root:
node deployment/monitoring/setup-uptime-kuma.mjs
The script will prompt for your Uptime Kuma username and password, then create all 16 entries (3 groups + 13 monitors).
Step 2: Verify¶
After the script completes, you should see 3 groups with 13 monitors total:
| Group | Monitors |
|---|---|
| Public Endpoints | Gateway (API), Web App, Docs Site, Event Catalog, Status Page (Self), Log Viewer |
| Backend Services | Order Service, Print Service, Shipping Service, GridFlock Service, Slicer |
| Infrastructure | Redis, Traefik |
Note: pgAdmin is an on-demand container managed via the Developer Tools settings page. It is not monitored by Uptime Kuma since it is intentionally stopped most of the time.
All monitors should turn green within 1–2 minutes if the containers are healthy.
Monitor Overview¶
Public Endpoints (HTTPS — through Traefik)¶
These monitors verify the full request path: DNS → Traefik → TLS → Container → Health endpoint.
| Monitor | URL | Interval | Health Endpoint |
|---|---|---|---|
| Gateway (API) | https://staging-connect-api.forma3d.be/health/live |
60s | Liveness probe |
| Web App | https://staging-connect.forma3d.be/health/live |
60s | Liveness probe |
| Docs Site | https://staging-connect-docs.forma3d.be/health/live |
60s | Liveness probe |
| Event Catalog | https://staging-connect-eventcatalog.forma3d.be |
120s | Homepage |
| Status Page (Self) | https://staging-connect-status.forma3d.be |
120s | Homepage |
| Log Viewer (Dozzle) | https://staging-connect-logs.forma3d.be |
120s | Homepage |
Backend Services (HTTP — internal Docker network)¶
These monitors check services directly inside the Docker network, bypassing Traefik. If a public endpoint is down but the internal monitor is up, the issue is in Traefik routing.
| Monitor | URL | Interval | Port |
|---|---|---|---|
| Order Service | http://order-service:3001/health |
60s | 3001 |
| Print Service | http://print-service:3002/health |
60s | 3002 |
| Shipping Service | http://shipping-service:3003/health |
60s | 3003 |
| GridFlock Service | http://gridflock-service:3004/health |
60s | 3004 |
| Slicer | http://slicer:3010/health |
60s | 3010 |
Note: Internal URLs like
http://order-service:3001work because Uptime Kuma is on the sameforma3d-networkDocker network as all other containers.
Infrastructure (TCP + HTTP — internal)¶
| Monitor | Type | Target | Interval |
|---|---|---|---|
| Redis | TCP Port | redis:6379 |
60s |
| Traefik | HTTP | http://traefik:8080/ping |
60s |
Alternative: Manual Setup¶
If the backup import doesn't work (e.g., version mismatch), add monitors manually.
Add a Group¶
- Click + Add New Monitor
- Monitor Type: Group
- Friendly Name: e.g.,
Public Endpoints - Click Save
Add an HTTP Monitor (example: Gateway)¶
- Click + Add New Monitor
- Monitor Type: HTTP(s)
- Friendly Name:
Gateway (API) - URL:
https://staging-connect-api.forma3d.be/health/live - Heartbeat Interval:
60seconds - Retries:
3 - Heartbeat Retry Interval:
30seconds - Under Advanced, set:
- Accepted Status Codes:
200-299 - Max. Redirects:
10 - Under Monitor Group, select the parent group
- Click Save
Add a TCP Port Monitor (Redis)¶
- Click + Add New Monitor
- Monitor Type: TCP Port
- Friendly Name:
Redis - Hostname:
redis - Port:
6379 - Heartbeat Interval:
60seconds - Click Save
Complete Monitor List for Manual Entry¶
Copy-paste these values when adding monitors manually:
GROUP: Public Endpoints
├── Gateway (API) | HTTP(s) | https://staging-connect-api.forma3d.be/health/live | 60s
├── Web App | HTTP(s) | https://staging-connect.forma3d.be/health/live | 60s
├── Docs Site | HTTP(s) | https://staging-connect-docs.forma3d.be/health/live | 60s
├── Event Catalog | HTTP(s) | https://staging-connect-eventcatalog.forma3d.be | 120s
├── Status Page (Self) | HTTP(s) | https://staging-connect-status.forma3d.be | 120s
└── Log Viewer (Dozzle) | HTTP(s) | https://staging-connect-logs.forma3d.be | 120s
GROUP: Backend Services
├── Order Service | HTTP(s) | http://order-service:3001/health | 60s
├── Print Service | HTTP(s) | http://print-service:3002/health | 60s
├── Shipping Service | HTTP(s) | http://shipping-service:3003/health | 60s
├── GridFlock Service | HTTP(s) | http://gridflock-service:3004/health | 60s
└── Slicer | HTTP(s) | http://slicer:3010/health | 60s
GROUP: Infrastructure
├── Redis | TCP | redis:6379 | 60s
└── Traefik | HTTP(s) | http://traefik:8080/ping | 60s
Status Page Setup¶
Two public status pages are created — one customer-facing, one for the team.
Automated Setup (Recommended)¶
node deployment/monitoring/setup-uptime-kuma-status-pages.mjs
This creates both pages in one go. You'll be prompted for your credentials.
Status Pages Overview¶
| Page | URL | Audience | Shows |
|---|---|---|---|
| Public | /status/forma3d |
Customers, stakeholders | Gateway, Web, Docs, Tools |
| Operations | /status/ops |
Development team | All 12 services + infrastructure |
Both pages are public — no login required to view.
Full URLs:
- https://staging-connect-status.forma3d.be/status/forma3d
- https://staging-connect-status.forma3d.be/status/ops
Public Page Sections¶
| Section | Monitors |
|---|---|
| Application | Gateway (API), Web App, Docs Site, Event Catalog |
| Tools | Log Viewer (Dozzle), Status Page (Self) |
Operations Page Sections¶
| Section | Monitors |
|---|---|
| Public Endpoints (HTTPS) | Gateway (API), Web App, Docs Site, Event Catalog, Log Viewer, Status Page |
| Backend Microservices (Internal) | Order Service, Print Service, Shipping Service, GridFlock Service, Slicer |
| Infrastructure | Redis, Traefik |
Manual Setup (Alternative)¶
- Navigate to Status Pages (top nav bar)
- Click + New Status Page
- Name:
Forma3D Connect — Status, Slug:forma3d - Click Next
- Add sections and drag monitors from the list
- Uncheck Show Powered By (optional)
- Click Save
Repeat for the Operations page with slug ops.
Notifications (Optional)¶
To receive alerts when a service goes down:
Email Notification¶
- Go to Settings > Notifications
- Click Setup Notification
- Notification Type: Email (SMTP)
- Configure your SMTP settings
- Click Test then Save
Apply to All Monitors¶
After creating a notification channel:
- Edit each monitor (or use the group settings)
- Under Notifications, check the notification channel
- Click Save
Troubleshooting¶
Internal monitors show "down" but public endpoints are "up"¶
This means Uptime Kuma cannot resolve the Docker service names. Verify that Uptime Kuma is on the forma3d-network:
docker inspect forma3d-uptime-kuma --format='{{json .NetworkSettings.Networks}}' | jq
Traefik monitor (port 8080) shows "down"¶
Traefik's API/ping endpoint runs on port 8080 by default. If the Traefik configuration doesn't expose port 8080 internally, switch to monitoring via a public URL:
- Change the Traefik monitor URL to:
https://staging-connect-api.forma3d.be/health/live - This verifies Traefik is routing correctly (same as Gateway, but serves as an implicit Traefik check)
Redis TCP monitor shows "down"¶
Verify Redis is reachable from within the Docker network:
docker exec forma3d-uptime-kuma sh -c "nc -z redis 6379 && echo OK || echo FAIL"
All monitors show "Pending"¶
Monitors take up to one interval period (60s) to perform the first check. Wait 1-2 minutes after import.
Script Location¶
The setup scripts are stored in the repository:
deployment/monitoring/setup-uptime-kuma.mjs # Monitor setup (run first)
deployment/monitoring/setup-uptime-kuma-status-pages.mjs # Status page setup (run second)
deployment/monitoring/uptime-kuma-backup.json # Reference only (backup import is deprecated)
Update the scripts whenever you add or modify containers in the stack.
Document Version: 1.0 Last Updated: 2026-02-16 Maintainer: AI-generated, review before production use