Enabling monitoring
Add monitoring services when generating your stack:Architecture
- Prometheus: Scrapes metrics from services every 15 seconds
- Grafana: Visualizes metrics and logs with dashboards
- Loki: Aggregates logs from Docker containers
Prometheus configuration
Generated files
When monitoring is enabled, better-openclaw generates:config/prometheus/prometheus.yml- Scrape configurationdocker-compose.yml- Prometheus service definition
Scrape configuration
better-openclaw automatically detects which services expose Prometheus metrics and adds them toprometheus.yml:
config/prometheus/prometheus.yml
Supported metrics endpoints
| Service | Metrics Port | Path | Metrics |
|---|---|---|---|
| Redis | 9121 | /metrics | Connections, memory, commands |
| PostgreSQL | 9187 | /metrics | Queries, connections, replication |
| MinIO | 9000 | /minio/v2/metrics/cluster | Storage, bandwidth, operations |
| n8n | 5678 | /metrics | Workflows, executions |
| Grafana | 3000 | /metrics | Dashboards, users, queries |
| Caddy | 2019 | /metrics | HTTP requests, response times |
| Traefik | 8082 | /metrics | Routes, services, middleware |
| Qdrant | 6333 | /metrics | Vectors, collections, searches |
| Uptime Kuma | 3001 | /metrics | Monitors, uptime, response times |
| Ollama | 11434 | /metrics | Model loads, inference, VRAM |
Docker Compose
docker-compose.yml
Accessing Prometheus
Open http://localhost:9090- Status → Targets: View all scraped services
- Graph: Query metrics with PromQL
- Alerts: Configure alerting rules
Grafana configuration
Generated files
config/grafana/provisioning/datasources/prometheus.yml- Auto-configure Prometheus datasourceconfig/grafana/provisioning/dashboards/default.yml- Dashboard providerconfig/grafana/grafana.ini- Grafana server configconfig/grafana/dashboards/openclaw-overview.json- Default dashboard
Datasource provisioning
config/grafana/provisioning/datasources/prometheus.yml
Dashboard provisioning
better-openclaw includes a default OpenClaw Stack Overview dashboard:- Service Health: Count of healthy services
- Memory Usage: Container memory utilization
- Request Rate: HTTP requests per second
Docker Compose
docker-compose.yml
Accessing Grafana
Open http://localhost:3000 Default credentials:- Username:
admin - Password:
admin(change on first login)
.env:
.env
Environment variables
.env
Loki configuration
Loki aggregates logs from all Docker containers.Docker Compose
docker-compose.yml
Add Loki datasource to Grafana
- Open Grafana → Configuration → Data Sources
- Click “Add data source”
- Select “Loki”
- URL:
http://loki:3100 - Click “Save & Test”
Query logs
In Grafana, go to Explore:Custom dashboards
Creating dashboards
- Open Grafana
- Click ”+” → “Dashboard”
- Add panels with PromQL queries:
Importing dashboards
Grafana has thousands of community dashboards:- Browse at grafana.com/grafana/dashboards
- Find a dashboard (e.g., “Docker and system monitoring”)
- Copy the dashboard ID
- In Grafana: Dashboards → Import → Paste ID
- 1860: Node Exporter Full (system metrics)
- 893: Docker monitoring
- 6417: PostgreSQL Database
- 7362: Redis Dashboard
- 11074: Traefik 2.0
Alerting
Prometheus alerting rules
Createconfig/prometheus/alerts.yml:
docker-compose.yml:
prometheus.yml:
Grafana alerts
- Open a dashboard panel
- Click “Alert” tab
- Create alert rule:
- Condition:
WHEN avg() OF query(A, 5m, now) IS ABOVE 90 - Frequency: Evaluate every 1m
- Notification: Send to Slack/Email/PagerDuty
- Condition:
Uptime monitoring
Add Uptime Kuma for HTTP/ping monitoring:- HTTP(s) monitoring
- TCP port monitoring
- Ping/DNS monitoring
- Status pages
- Multi-channel notifications (Slack, Discord, Email, etc.)
Performance tuning
Prometheus retention
Adjust data retention indocker-compose.yml:
Scrape interval
Reduce scrape frequency for less critical services:prometheus.yml
Grafana performance
config/grafana/grafana.ini
Troubleshooting
Prometheus not scraping targets
-
Check Prometheus logs:
-
Verify service is exposing metrics:
-
Check network connectivity:
Grafana can’t connect to Prometheus
- ✅
http://prometheus:9090(Docker network) - ❌
http://localhost:9090(won’t work inside container)