rpi: бэкап OneDrive на HDD + SMART/бэкап-метрики через pushgateway на fr1
- servers/rpi.md: новая домашняя Raspberry Pi 4 (Trixie, cloud-init), HDD 4 ТБ, грабли с питанием двух HDD от USB - stacks/rpi-backup: rclone sync с вечным архивом версий, еженедельная сверка хэшей, smartd, пуш SMART и статуса бэкапов - fr1: pushgateway (127.0.0.1:9091), приём по SSH через forced command ~/bin/pushgw-ingest, алерты группы rpi Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
3604e843c8
commit
d1269162e7
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
# SMART всех USB/SATA-дисков → pushgateway (job=smart).
|
||||
# -n standby: спящий диск НЕ будим (иначе опрос раз в 15 мин не дал бы ему спать) —
|
||||
# для него отдаём последние снятые значения из кэша и smart_disk_standby=1.
|
||||
set -uo pipefail
|
||||
CACHE=/var/lib/smart-metrics; mkdir -p "$CACHE"
|
||||
out=$(mktemp); trap 'rm -f "$out"' EXIT
|
||||
echo "# TYPE smart_disk_standby gauge" >> "$out"
|
||||
for dev in /dev/sd?; do
|
||||
[ -b "$dev" ] || continue
|
||||
json=$(smartctl -d sat -n standby,7 -j -H -i -A -l selftest "$dev"); rc=$?
|
||||
serial=$(udevadm info -q property -n "$dev" | sed -n 's/^ID_SERIAL_SHORT=//p')
|
||||
[ -n "$serial" ] || continue
|
||||
f="$CACHE/$serial.prom"
|
||||
if [ $rc -eq 7 ]; then
|
||||
standby=1
|
||||
else
|
||||
standby=0
|
||||
echo "$json" | jq -r --arg dev "${dev#/dev/}" '
|
||||
(.model_name // "unknown") as $m | (.serial_number // "unknown") as $s |
|
||||
"{model=\"\($m)\",serial=\"\($s)\",device=\"\($dev)\"" as $l |
|
||||
"smart_health_passed\($l)} \(if .smart_status.passed then 1 else 0 end)",
|
||||
"smart_temperature_celsius\($l)} \(.temperature.current // "NaN")",
|
||||
"smart_power_on_hours\($l)} \(.power_on_time.hours // "NaN")",
|
||||
(.ata_smart_self_test_log.standard.table[0]? // empty |
|
||||
"smart_selftest_last_passed\($l)} \(if .status.passed then 1 else 0 end)"),
|
||||
(.ata_smart_attributes.table[]? |
|
||||
"smart_attribute_raw\($l),id=\"\(.id)\",name=\"\(.name)\"} \(.raw.value)",
|
||||
"smart_attribute_value\($l),id=\"\(.id)\",name=\"\(.name)\"} \(.value)"),
|
||||
"smart_last_read_timestamp\($l)} \(now|floor)"
|
||||
' > "$f.tmp" && [ -s "$f.tmp" ] && mv "$f.tmp" "$f"
|
||||
fi
|
||||
[ -f "$f" ] && cat "$f" >> "$out"
|
||||
echo "smart_disk_standby{serial=\"$serial\",device=\"${dev#/dev/}\"} $standby" >> "$out"
|
||||
done
|
||||
metrics-push smart < "$out"
|
||||
Reference in New Issue
Block a user