Commit Graph
12 Commits
Author SHA1 Message Date
Clément Désiles 86ad271b23 fix(grafana): align NVMe temperature thresholds with 0-70C rating
Dashboard temperature panel now uses NVMe-specific thresholds (orange
60, red 70) instead of HDD ones; alert descriptions reference the
rated range.
2026-09-29 12:25:56 +02:00
Clément DésilesandClaude Opus 5.5 1d37313bd6 fix(grafana): split NVMe temperature alerts from HDD tiers
NVMe drives run hotter than HDDs and kept firing the 48°C HDD alerts.
HDD tiers now exclude nvme devices; NVMe gets its own 65/70/75°C ladder.
The device matcher tolerates both "nvme0" and "/dev/nvme0" label forms
(smartctl_exporter strips the /dev/ prefix).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 08:59:59 +02:00
Clément Désiles 5efc0b0d6e fix(nginx): make Let's Encrypt opt-in per service
certbot cannot issue for internal hostnames (*.nas.local), which made
nginx-enabled services with internal names fail on deploy.

Add a <service>_nginx_letsencrypt flag (default false) and computed
<service>_nginx_ssl_certificate/_key paths: when off the vhost uses the
shared self-signed cert (nginx_default_ssl_cert), when on it uses the
Let's Encrypt lineage. Gate the certbot include on the flag and apply the
pattern to all service roles (deluge, fdroid, gitea, grafana, immich,
metabase, ntfy, prowlarr, radarr, seerr, static_web, uptime_kuma).
2026-09-21 10:04:47 +02:00
Clément Désiles be73f3adfa feat(grafana): provision disk alerts to ntfy
Provision Grafana Unified Alerting as code: ntfy webhook contact point
(?template=grafana), notification policy tree, and cumulative disk tiers
for HDD temperature (48-60C, <20C) plus ZFS/filesystem capacity. Lower the
smartctl exporter interval to 30m for alert responsiveness.
2026-09-18 18:32:02 +02:00
Clément Désiles c127336321 feat(zfs): add capacity metrics and Grafana dashboard
Deploy an hourly systemd timer that writes pool and dataset capacity to
node_exporter's textfile collector, since --collector.zfs exposes only
ARC/I-O/state. Add a provisioned 'ZFS - Pools & Datasets' dashboard with
per-pool totals, per-dataset used/quota and daily growth panels.
2026-09-18 15:25:23 +02:00
Clément Désiles 20cbf01040 enhance dashboarding 2026-09-11 21:32:00 +02:00
Clément Désiles f6c4d36bbe feat(monitoring): add backup and systemd metrics, alerts, and dashboards
- backup role emits last-success/run metrics into node_exporter's textfile collector
- node_exporter enables systemd and textfile collectors
- prometheus deploys BackupStale/BackupTimerSilent/SystemdUnitFailed alert rules
- grafana gains Backups - Restic and Systemd dashboards
- fix prometheus.yml params rendering (quote values so {job=...} stays a string)
2026-09-09 12:07:50 +02:00
Clément Désiles 8756eb1183 feat(monitoring): add smartctl, fail2ban, wireguard exporters and dashboards
- smartctl_exporter (disks), fail2ban exporter, wireguard exporter
- grafana dashboards for each exporter
- prometheus: firewall source rules, honor_labels/params scrape config
- node_exporter: zfs collector
- wireguard: nftables dep, resolvconf wrapper, reload fix
- remove superseded monitoring role
2026-09-08 23:03:34 +02:00
Clément Désiles e4d0812a69 fix(grafana): NUT dashboard instance variable ignores stale series
The variable used label_values() which lists all instances across full
retention, alphabetically sorting and auto-selecting the dead
127.0.0.1:9199 (relabeled to 'eaton' ~31h ago). Its stale series has no
samples in the visible window so every panel rendered empty. Replace with
query_result(count by (instance) (...)) which only surfaces live targets.
2026-09-06 23:51:22 +02:00
Clément Désiles ed5d0c68f1 feat(unbound): add prometheus exporter, dashboard, fix socket buffer sysctl 2026-09-06 23:44:05 +02:00
Clément Désiles 304a3fae12 feat(monitoring): add nginx, postgres, valkey dashboards 2026-09-06 23:43:50 +02:00
Clément Désiles 12b81919c3 feat(monitoring): add grafana, prometheus, node_exporter roles
- grafana: postgres backend, provisioning (prometheus datasource + node/NUT dashboards)
- prometheus: native service, scrape config via host_vars, localhost bind
- node_exporter: host metrics exporter (localhost:9100)
2026-09-05 17:24:08 +02:00