$put_perv_real = "/home/www/dvakompa-ru/dopol/"; ?>
Редактируем /etc/default/smartmontools - раскомментируем строчку start_smartd=yes
. Параметр smartd_opts
отвечает за дополнительные опции для smartd, --interval
определяет периодичности проведения самодиагностики в секундах. Настроим список дисков для проверки и периодичность проверки - редактируем /etc/smartd.conf:
DEVICESCAN
./dev/sda -a -s (S/../../(1|3|6)/01|L) -m root@example.com -M diminishing
где:
-a
- включение большинства возможностей мониторинга: проверка «здоровья» диска, отслеживание изменений всех атрибутов, отслеживание неудачных тестов диагностики.-s (S/../../(1|3|6)/01|L)
- расписание запуска тестов диагностики диска в виде регулярного выражения. В данном случае: в 1 час ночи в понедельник, среду, субботу будет запускаться краткий тест диска.-m root@example.com
- email пользователя, на который будет отправлятся сообщение об ошибках на дисках. Для функционирования должен быть настроен почтовый сервер.-M diminishing
- периодически повторять отправку письма с сообщениями об ошибке.После внесения правок в /etc/smartd.conf перезапустим демон. Если возникли ошибки, то нужно смотреть лог /var/log/daemon.log. Для проверки работы email-оповещения нужно в /etc/smartd.conf, вместо -M diminishing
поставить -M test
.
----
Изначально в статье было рассказано только о мониторинге в системах linux. Со временем появилась необходимость настроить то же самое, только в Windows, поэтому решил не начинать новую статью, а дополнить текущую. Смысл дальнейших действий точно такой же, как и на linux. Для мониторинга за жесткими дисками, в том числе за температурой в windows, будем использовать smartmontools под windows. Скрипт для автообнаружения и формирования выдачи в zabbix будет работать на powershell.
Устанавливаем smartmontools. После установки рекомендую сразу проверить работу. Для этого открываем командную строку, переходим в директорию C:\Program Files\smartmontools\bin и выполняем:
# smartctl --scan-open
Вы должны увидеть список всех дисков в системе. Дальше можете посмотреть информацию о дисках, например так:
# smartctl -A /dev/sda # smartctl -i /dev/sda
Если все в порядке, информация о дисках выводится, продолжаем. Нам нужен скрипт для парсинга вывода. Я не стал придумывать свой, к тому же на powershell писать практически не умею, взял за основу готовый, который реализует тот же функционал, что описанный выше для linux.
param($1,$2) # Автообнарежение дисков # Ключ: discovery if ($1 -eq "discovery") { try { $items = c:\"Program Files"\smartmontools\bin\smartctl --scan-open | where {$_ -match "/dev/sd"} write-host -NoNewline "{" write-host -NoNewline "`"data`":[" $n = 0 foreach ($obj in $items) { if ((c:\"Program Files"\smartmontools\bin\smartctl -i $obj.substring(0,8) | where {$_ -match "SMART support is: Enabled"}) -ne $null) { $n = $n + 1 If ($n -gt 1) {write-host -NoNewline ","} $line = "{`"{#DISKID}`":`"" + ($obj.substring(5,3)) + "`"}" write-host -NoNewline $line } } write-host -NoNewline "]" write-host -NoNewline "}" } catch {write-host $error;exit} } # Получение информации от дисков # Ключи: else { try { if ($2 -eq "status") { $obj = c:\"Program Files"\smartmontools\bin\smartctl -H /dev/$1 | where {$_ -match "result:"} $obj = $obj.substring(50) } elseif ($2 -eq "model") { $obj = c:\"Program Files"\smartmontools\bin\smartctl -i /dev/$1 | where {$_ -match "Device Model:"} $obj = $obj.substring(18) } elseif ($2 -eq "family") { $obj = c:\"Program Files"\smartmontools\bin\smartctl -i /dev/$1 | where {$_ -match "Model Family:"} $obj = $obj.substring(18) } elseif ($2 -eq "fw") { $obj = c:\"Program Files"\smartmontools\bin\smartctl -i /dev/$1 | where {$_ -match "Firmware Version:"} $obj = $obj.substring(18) } elseif ($2 -eq "serial") { $obj = c:\"Program Files"\smartmontools\bin\smartctl -i /dev/$1 | where {$_ -match "Serial Number:"} $obj = $obj.substring(18) } elseif ($2 -eq "capacity") { $obj = c:\"Program Files"\smartmontools\bin\smartctl -i /dev/$1 | where {$_ -match "User Capacity:"} if ($obj -match "User Capacity:") { $obj = $obj.Substring($obj.IndexOf("[")+1,$obj.IndexOf("]")-$obj.IndexOf("[")-1) } else { $obj = "N/A" }} # Получение показателей SMART # Значения без скобок и их содержимого else { $obj = c:\"Program Files"\smartmontools\bin\smartctl -A /dev/$1 | where {$_ -match "^ *$2"} try {$obj = $obj.Substring(87,$obj.IndexOf("(")-87)} catch {$obj = $obj.Substring(87)} }} catch {$obj = ""} Write-Output $obj }
Я немного изменил оригинал скрипта, автор почему-то использует smartctl-nc.exe. У меня он вообще ничего не выводит, я не понял, что это за экзешник. Я использовал обычный smartctl.exe. Сохраните скрипт и проверьте его работу. Для того, чтобы система разрешила выполнять неподписанные powershell скрипты, необходимо запустить консоль powershell от администратора и выполнить команду:
Set-ExecutionPolicy RemoteSigned
Если этого не сделать, будете получать ошибку при запуске скрипта на тему того, что выполнение скриптов запрещены для данной системы. Я сохранил скрипт в директорию C:\zabbix\windows.hdd.ps1. Проверим его работу. Запускаем консоль powershell и сам скрипт с разными параметрами.
Все в порядке. Скрипт возвращает список дисков для автообнаружения и различные параметры для запроса. Теперь добавим в конфиг агента UserParameter.
UserParameter=ZScript[*],powershell -File C:\zabbix\windows.hdd.ps1 "$1" "$2"
Не забудьте увеличить таймаут получения данных. По-умолчанию в zabbix стоит 3 секунды. Этого может не хватать. Я обычно ставлю 15 секунд.
Timeout=15
Перезапускаем службу агента и идем на сервер.
На сервере делать ничего не надо, так как все сделал за вас я :) Предлагаю готовый шаблон — zabbix-smart-win-template.xml. Скачиваете и импортируете в свой сервер. У меня он работает на версии сервера 3.4.6. В шаблоне настроено автообнаружение дисков, создание итемов и триггеров. Все немного похоже на то, что есть для линукса, но тем не менее отличается, так как делалось в разное время и с разным настроением. В линуксе все более заморочено — сложные триггеры и итемы, которые добавил автор шаблона. Со временем понял, что это не особо надо и не стал заморачиваться с виндой, сделал все по проще, но тем не менее весь основной функционал присутствует.
Более того, в версию с windows я добавил триггер, который срабатывает, если диск исчезает из системы. У меня был один такой диск, который мог просто пропасть. Пришлось сделать оповещение. В linux у меня диски никогда не пропадали просто так, поэтому не догадался с свое время до такого триггера. Ниже список items шаблона.
И тут же триггеры.
И вот такую картинку вы получите на выходе, когда все диски и итемы к ним появятся на хосте и начнут собирать данные.
В общем и целом ничего сложного. Настроить мониторинг SMART и температуры дисков в windows не на много сложнее, чем в linux. Хорошо, что есть одинаковый интерфейс с одним и тем же синтаксисом для обоих дисков. В windows 10 ко всему прочему, есть полноценная система ubuntu, можно было бы и без powershell обойтись, но получилось бы не универсальное решение. Данный способ работает на всех версиях windows, начиная с XP.
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!
Мониторинг smart значений жесткого диска достаточно полезная штука, но не стоит ей слепо доверять. У меня были ситуации, когда диски с Bad Sector Count работали годами. Тут важно смотреть на динамику и на статус сервера. Если он критичный, то при малейших признаках неисправности, я бы менял диск. Если это обычая файлопомойка с рейдом, то если диск не деградирует со временем, можно его не трогать.
Еще важный нюанс — подобный мониторинг жестких дисков возможен только если вы не используете raid контроллер. Если же он у вас есть, то чаще всего вы не сможете увидеть параметры smart дисков. Нужно будет использовать утилиты производителя raid контроллера и настраивать мониторинг через них.