Немного расширив критические замечания в адрес u150825 и Герта ван ден Берга, я обнаружил, что мне нужно что-то относительно гибкое для различных ситуаций с различными системами автоматизации. Я решил добавить в свою маленькую библиотеку полезных скриптов и написать это. Он использует только нативные библиотеки из python 2.7+ и точно так же работает на python3.
Вы можете забрать его здесь , если хотите. Так же легко добавить это в свою среду, если вам нужно часто его использовать, http-хостинг или что-то еще, и вы можете запустить его на любой платформе, используя любой доступный вам интерпретатор python по умолчанию, довольно надежно рассчитывая на его работу.
По умолчанию запрашивается с помощью getpass с подсказками на stderr (, что позволяет легко перехватывать stdout ), но если вы передаете ему строку, она будет просто пожинать со stdin. В зависимости от того, как вы это сделаете, он также может не отображаться в истории команд,так что просто осознавайте, с чем вы работаете. Мне нравится иметь гибкий инструмент, который будет вести себя ожидаемым образом, а не полагаться на пакеты или Python One -, прокладывающий мой путь к победе 10 разными способами.
Уже существуют инструменты, которые могут это сделать, часто как часть более общего инструмента мониторинга. Я считаю полезным Munin , который имеет плагин SMART для отслеживания доступных атрибутов :
.Munin доступен во многих дистрибутивах.
smartmontools
сам содержит инструмент, который может периодически регистрировать атрибуты,smartd
. Возможно, вы обнаружите, что это все, что вам нужно.
Легко "свернуть свое". Запускайтеsmartctl -A drive-specifier
(от имени пользователя root )ежедневно с помощью сценария AWK с выводом в файл.
gnuplot
хорош для рисования графиков этого файла.
Небольшое расширение на примере:-
/etc/cron.daily
#!/bin/sh
# SMART DISK PROCESSING
# =====================
tmpfile=$(mktemp -q)
today=$(date -u +%d-%m-%Y)
smartctl -A /dev/disk/by-id/ata-Samsung_SSD_870_QVO_1TB_S5SVNG0NB22319L > $tmpfile
# Output log as a single line - note "Unknown_Attribute" is "POR_Recovery_Count" [unexpected shutdown]
echo -n $today ', ' >> /var/log/disk-monitor.d/sdb-errors.csv
awk 'NR>=8 && NR<=21 {print $1,",",$2,",",$10,",";}' $tmpfile | tr -d '\n' | sed 's/Unknown_Attribute/POR_Recovery_Count/;s/\,$/\n/' >> /var/log/disk-monitor.d/sdb-errors.csv
exit 0
AWK "NR>=8 && NR<=21" выбирает правильные номера строк, оператор печати выбирает соответствующие столбцы; tr
удаляет новые -строки; sed
исправляет проблему атрибута SMART и добавляет одну новую строку.
Чтобы каждый день в лог-файл CSV записывалась одна запись в формате даты, [атрибута -id, атрибута -имени, атрибута -значения] *N формата.
07-06-2021, 5, Reallocated_Sector_Ct, 0,9, Power_On_Hours, 2900,...
gnuplot script-name
, выглядит следующим образом: set title "SDA Errors which should be ZERO"
set xdata time
set timefmt "%d-%m-%Y"
set format x "%d/%m"
set datafile separator ","
set colorsequence default
set ytics 2 nomirror tc lt 2
set ylabel 'POR' tc lt 2
set yrange [0:30<*]
set y2tics 1 nomirror tc lt 1
set y2label 'Errors' tc lt 1
set y2range [-1:10]
set key left top
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb"
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb"
plot "/var/log/disk-monitor.d/sda-errors.csv" using 1:4 title "Reallocated Sector Count" with lines axes x1y2, '' using 1:13 title "Wear Levelling Count" with lines axes x1y2, '' using 1:16 title "Used Rsvd Blk Cnt Total" with lines axes x1y2, '' using 1:19 title "Program Fail Cnt Total" with lines axes x1y2, '' using 1:22 title "Erase Fail Count Total" with lines axes x1y2, '' using 1:25 title "Runtime Bad Block" with lines axes x1y2, '' using 1:28 title "Reported Uncorrect" with lines axes x1y2, '' using 1:34 title "Hardware ECC Recovered" with lines dt 3 axes x1y2, '' using 1:40 title "POR Recovery Count" with lines dt 1 linetype rgb "green" axes x1y1
pause -1 "Hit any key to continue"
Я уверен, что есть сценарии получше!
Если вы ищете что-то более продвинутое, мои инструменты выбора для этого: Telegraf + InfluxDB + Grafana .
Очевидно, что нужно больше настраивать и обслуживать, но гораздо больше мощности и гибкости. например, у вас может быть несколько устройств, отправляющих свою статистику на один сервер Influx.
Когда все установлено, вы можете настроить панель управления: