How to Monitor Drive Health with Scrutiny (SMART Data on a Dashboard, with Real Failure Odds)

smartctl (tutorial 56) shows the numbers; smartd emails on thresholds. Scrutiny adds the judgement: it collects SMART data from every drive, graphs each attribute over months, and grades them against Backblaze's published statistics from hundreds of thousands of drives — so a rising reallocated-sector count shows as "this attribute correlates with a 30% annual failure rate", not just a number. With mergerfs or ZFS pools of mismatched drives (tutorials 97–99), it's the page to glance at monthly.
Quick reference
| Task | What |
|---|---|
| Folder | ~/docker/scrutiny/compose.yaml (web + collector) |
| Web | http://server-ip:8086 |
| Collector on another machine | the scrutiny-collector container pointing at this API |
| Schedule | collector runs every 15 min by default (COLLECTOR_CRON_SCHEDULE) |
| Alerts | ./config/scrutiny.yaml → notify urls (ntfy, Telegram, email) |
| USB drives | -d sat device entries in the collector config |
1. The compose file
mkdir -p ~/docker/scrutiny/{config,influxdb} && cd ~/docker/scrutiny
nano compose.yaml
services:
scrutiny:
image: ghcr.io/analogj/scrutiny:master-omnibus
container_name: scrutiny
ports:
- "8086:8080"
cap_add:
- SYS_RAWIO
- SYS_ADMIN
volumes:
- /run/udev:/run/udev:ro
- ./config:/opt/scrutiny/config
- ./influxdb:/opt/scrutiny/influxdb
devices:
- /dev/sda
- /dev/sdb
- /dev/sdc
- /dev/nvme0
restart: unless-stopped
The omnibus image bundles the web UI, the database and a collector. List every drive under devices (lsblk -d for the names; NVMe as /dev/nvme0, not nvme0n1).
docker compose up -d
sudo ufw allow from 192.168.1.0/24 to any port 8086
Open http://192.168.1.50:8086. The first collection runs on start; drives appear with a status, temperature and a summary of their attributes.
2. Reading the dashboard
Each drive card: Passed / Failed per SMART's own verdict and per Scrutiny's thresholds, power-on hours, temperature. Click a drive for every attribute with a history graph, and the Backblaze-derived failure rate column — the number that tells you which warning matters. A drive with "Failed (Scrutiny)" but "Passed (SMART)" is the point of the tool: SMART only says failed when it's nearly dead.
Settings (cog, top right): choose metric thresholds (Scrutiny, SMART, or both), temperature units, and how long to keep history.
3. Collect from other machines
On the Pi (or any box with drives):
docker run -d --name scrutiny-collector --restart unless-stopped \
--cap-add SYS_RAWIO --cap-add SYS_ADMIN -v /run/udev:/run/udev:ro \
--device /dev/sda --device /dev/sdb \
-e COLLECTOR_API_ENDPOINT=http://192.168.1.50:8086 \
-e COLLECTOR_HOST_ID=pi \
ghcr.io/analogj/scrutiny:master-collector
Its drives join the same dashboard under the host name pi. Every machine with a disk, one page.
4. USB drives and odd controllers
If a drive shows no data, the collector needs a hint. ./config/collector.yaml:
devices:
- device: /dev/sdb
type: sat
(sat for most USB adapters; megaraid,N for RAID cards.) Restart the container.
5. Notifications
nano config/scrutiny.yaml
notify:
urls:
- "ntfy://:TOKEN@ntfy.example.com/server"
- "telegram://TOKEN@telegram?chats=CHATID"
Shoutrrr format, same as Watchtower (tutorial 50). Settings → Send test notification proves it. From then on a drive crossing a threshold — or a change in a critical attribute — reaches your phone, with the drive's name and the attribute.
Scrutiny and smartd
Both can run. smartd still runs the scheduled self-tests (short nightly, long weekly, tutorial 56); Scrutiny reads the results and the attributes and does the graphing and grading. Set -n standby in smartd and the default 15-minute collector interval so sleeping drives (tutorial 119) aren't woken constantly — Scrutiny's collector respects standby by default.
Troubleshooting
No drives on the dashboard. The devices list is missing them, or the capabilities. docker compose logs scrutiny | grep -i error.
A drive shows but with no attributes. USB adapter: add the sat type; some cheap adapters simply don't pass SMART.
Temperature history flat. Drives asleep and the collector honouring standby — correct. Wake them by using them.
Everything shows "Failed" after an update. Threshold mode changed to the strict Scrutiny set; review the attributes — often one drive with an old pending-sector count; adjust per drive in its settings if it's known and stable.
Wrapping up
One omnibus container with the drives passed through, collectors on the other boxes, ntfy in the config. The SMART numbers you'd otherwise read once a month become graphs with failure odds beside them, and the message "order a replacement for sdb" arrives weeks before the drive makes the decision for you.
