Существуют ли инструменты для хранения данных SMART с течением времени?

Немного расширив критические замечания в адрес u150825 и Герта ван ден Берга, я обнаружил, что мне нужно что-то относительно гибкое для различных ситуаций с различными системами автоматизации. Я решил добавить в свою маленькую библиотеку полезных скриптов и написать это. Он использует только нативные библиотеки из python 2.7+ и точно так же работает на python3.

Вы можете забрать его здесь , если хотите. Так же легко добавить это в свою среду, если вам нужно часто его использовать, http-хостинг или что-то еще, и вы можете запустить его на любой платформе, используя любой доступный вам интерпретатор python по умолчанию, довольно надежно рассчитывая на его работу.

По умолчанию запрашивается с помощью getpass с подсказками на stderr (, что позволяет легко перехватывать stdout ), но если вы передаете ему строку, она будет просто пожинать со stdin. В зависимости от того, как вы это сделаете, он также может не отображаться в истории команд,так что просто осознавайте, с чем вы работаете. Мне нравится иметь гибкий инструмент, который будет вести себя ожидаемым образом, а не полагаться на пакеты или Python One -, прокладывающий мой путь к победе 10 разными способами.

7
07.06.2021, 01:10
3 ответа

Уже существуют инструменты, которые могут это сделать, часто как часть более общего инструмента мониторинга. Я считаю полезным Munin , который имеет плагин SMART для отслеживания доступных атрибутов :

.

Graph showing SMART attributes over time

Munin доступен во многих дистрибутивах.

smartmontoolsсам содержит инструмент, который может периодически регистрировать атрибуты,smartd. Возможно, вы обнаружите, что это все, что вам нужно.

10
28.07.2021, 11:26

Легко "свернуть свое". Запускайтеsmartctl -A drive-specifier(от имени пользователя root )ежедневно с помощью сценария AWK с выводом в файл.

gnuplotхорош для рисования графиков этого файла.

Небольшое расширение на примере:-

  1. Поместите запись для запуска следующего скрипта в/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,...

  1. Я предпочитаю отображать выбранные значения [те, которые в идеале должны быть равны нулю] по запросу... Сценарий, который я использую для 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"

Я уверен, что есть сценарии получше!

7
28.07.2021, 11:26

Если вы ищете что-то более продвинутое, мои инструменты выбора для этого: Telegraf + InfluxDB + Grafana .

  • Telegraf — это агент мониторинга, который может извлекать статистику из сотен источников, включая данные SMART
  • InfluxDB — это база данных временных -рядов, оптимизированная для хранения данных, измеряемых во времени (то есть именно это!)
  • Grafana подключается к Influx для отображения графиков и настройки оповещений

Очевидно, что нужно больше настраивать и обслуживать, но гораздо больше мощности и гибкости. например, у вас может быть несколько устройств, отправляющих свою статистику на один сервер Influx.

Когда все установлено, вы можете настроить панель управления:

Grafana dashboard example

3
28.07.2021, 11:26

Теги

Похожие вопросы