Grafana — Pinbox24 Operations Dashboard
Dashboard UID: pinbox24-ops
File: monitoring/grafana/provisioning/dashboards/pinbox24-operations.json
Provisioned: automatically by Grafana on startup (path /etc/grafana/provisioning/dashboards)
What the Dashboard Covers
Single pane of glass for the Pinbox24 production stack across all four OVH Kimsufi bare-metal servers.
| Section | Panels | Source |
|---|---|---|
| Server health — bms-1 | CPU %, RAM %, Disk % + bms-1 warning | Prometheus node_exporter |
| Server health — bms-2 | CPU %, RAM %, Disk % | Prometheus node_exporter |
| Server health — bms-3 | CPU %, RAM %, Disk % | Prometheus node_exporter |
| Server health — bms-4 | CPU %, RAM %, Disk % | Prometheus node_exporter |
| Docker w3 group | Memory + CPU timeseries (Pinbox24 v31/v32, nginx-proxy, mailgun, pdf-gen, wkhtml, git-deploy) | cAdvisor on bms-4 |
| Docker w4 group | Memory + CPU timeseries (Pinbox24 v41/v42) | cAdvisor on bms-4 |
| MongoDB rs0 | Member states + replication lag | mongodb_exporter on bms-4 |
| Backups | Supabase + n8n Cloud backup age, workflow counts | backup-exporter :9220 |
| Credential rotation | Overdue count + days overdue per credential | credential-exporter :9230 |
| Open incidents | Table: title, service, server, created_at, acknowledged_by (live — queries incidents table) | Supabase PostgreSQL |
Data Sources Required
| Data Source | Type | UID in Grafana | Notes |
|---|---|---|---|
| Thanos Query (Prometheus) | Prometheus | prometheus | Already configured — infra metrics |
| Supabase PostgreSQL | PostgreSQL | (future, after #726) | dev_r_incidents table |
Server Coverage — node_exporter
All four BMS servers have node_exporter scraped by Prometheus at port 9100:
| Server | IP | Prometheus instance label |
|---|---|---|
| bms-1 (Pinbox24 prod) | 94.23.26.113 | 94.23.26.113:9100 |
| bms-2 (MongoDB PRIMARY) | 145.239.133.104 | 145.239.133.104:9100 |
| bms-3 (MongoDB SECONDARY + staging) | 51.68.155.224 | 51.68.155.224:9100 |
| bms-4 (MongoDB arbiter + n8n) | 54.36.123.110 | 54.36.123.110:9100 |
Known Gaps
1. cAdvisor on bms-1 and bms-3
cAdvisor is currently only deployed on bms-4 (port 8080). The Pinbox24 w3/w4 containers run on bms-1 and bms-3 — these servers have no cAdvisor. Docker container panels will show No Data for bms-1 and bms-3 until cAdvisor is deployed there.
Follow-up: create an issue to deploy cAdvisor as a Docker container on bms-1 and bms-3, add scrape targets to monitoring/prometheus/prometheus.yml.
2. mongodb_exporter coverage
mongodb_exporter containers run on bms-4 (ports 9216/9217) and scrape bms-2 (PRIMARY) and bms-3 (SECONDARY). The MongoDB rs0 panels use mongodb_rs_members_state and mongodb_rs_members_optimeDate. These metrics are already available — panels should work immediately.
bms-4 (arbiter) is excluded — MongoDB arbiters do not replicate users and prometheus cannot authenticate to an arbiter.
3. Open incidents strip
The open incidents panel queries the incidents table via the Supabase PostgreSQL datasource (uid: supabase). It shows up to 20 open incidents ordered by created_at DESC. Columns: title, service, server, created_at, acknowledged_by.
If the incidents table does not yet exist (before issue #726 is fully deployed), Grafana will show a “relation does not exist” error in this panel only — all other panels are unaffected.
4. bms-1 persistent warnings
bms-1 has a dedicated warning text panel:
- Ubuntu 20.04.1 LTS is EOL — upgrade required
- Disk was 100% full (cleaned 2026-06-18) — monitor closely
How to Reload / Deploy
After merging to dev and pulling on vps-i1:
ssh root@217.154.82.162 \
"cd /opt/p24-infra && git pull && \
cd monitoring && docker compose restart grafana"Grafana auto-provisions dashboards from /etc/grafana/provisioning/dashboards (mapped from monitoring/grafana/provisioning/dashboards/) with updateIntervalSeconds: 30, so a full restart is not strictly required after the first load — Grafana polls every 30s.
Thresholds
| Metric | Yellow | Red |
|---|---|---|
| CPU % | 70% | 85% |
| RAM % | 70% | 90% |
| Disk % | 70% | 85% |
| Backup age | 25 h | 49 h |
| Credential days overdue | 60 d | 90 d |
| MongoDB replication lag | 30 s | 120 s |
Related Dashboards
- Servers Overview — all servers, BM + VPS, drill-down by instance
- Credential Rotation — full credential rotation tracking
- Backup Health — full backup metrics