Настройка мониторинга SMART жесткого диска в zabbix
Я рассмотрел на своем сайте много вариантов использования заббикс для наблюдения за различными метриками. Сейчас хочу рассказать, как настроить мониторинг SMART параметров жесткого диска с помощью Zabbix. Я давно использую это решение, но не писал статью, так как информация полностью мной заимствована. Но для полноты картины решил все же опубликовать на своем сайте.
Содержание:
- 1 Введение
- 2 Подготовка zabbix agent
- 3 Настройка мониторинга SMART параметров диска
- 4 Мониторинг SMART и температуры диска в Windows
- 5 Заключение
Введение
Когда мне понадобилось настроить мониторинг жестких дисков, в частности, SMART параметров в Zabbix, я сразу же нашел готовое решение на share.zabbix.com. Рекомендую туда заглядывать периодически в поисках интересных приемов для мониторинга.
В данном случае практически не пришлось ничего менять или допиливать. И скрипты, и шаблон готов к использованию в оригинальном исполнении. Расскажу подробно, как я на основе этой информации настраиваю мониторинг smart у себя.
Я буду работать на сервере CentOS 7, но в данном случае, как обычно с заббиксом, это не имеет принципиального значения. Все скрипты и шаблоны подойдут для практически любого дистрибутива linux. Если у вас еще нет своего сервера для мониторинга, то рекомендую свои материалы на эту тему:
- Установка CentOS 7.
- Настройка CentOS 7.
- Установка и настройка zabbix сервера.
То же самое на Debian 9, если предпочитаете его:
- Установка Debian 9.
- Базовая настройка Debian 9.
- Установка и настройка zabbix на debian.
Настраивать будем по этапам:
- Сначала настроим агент и все необходимые скрипты.
- Импортируем шаблон на сервер и применим к нужному хосту.
- Проверим полученные данные.
Приступим к настройке zabbix для наблюдения за смартом дисков.
Подготовка zabbix agent
Мониторинг значений SMART жесткого диска будет выполняться с помощью smartmontools. Установить их можно следующей командой для CentOS:
# yum install smartmontools
Либо аналогично в Debian/Ubuntu
# apt install smartmontools
Далее нам понадобится скрипт на perl для автообнаружения дисков и вывода информации о них в JSON формате, который понимает заббикс. Создадим такой скрипт.
# mcedit /etc/zabbix/scripts/smartctl-disks-discovery.pl
#!/usr/bin/perl
#must be run as root
$first = 1;
print "{n";
print "t"data":[nn";
for (`ls -l /dev/disk/by-id/ | cut -d"/" -f3 | sort -n | uniq -w 3`)
{
#DISK LOOP
$smart_avail=0;
$smart_enabled=0;
$smart_enable_tried=0;
#next when total 0 at output
if ($_ eq "total 0n")
{
next;
}
print "t,n" if not $first;
$first = 0;
$disk =$_;
chomp($disk);
#SMART STATUS LOOP
foreach(`smartctl -i /dev/$disk | grep SMART`)
{
$line=$_;
# if SMART available -> continue
if ($line = /Available/){
$smart_avail=1;
next;
}
#if SMART is disabled then try to enable it (also offline tests etc)
if ($line = /Disabled/ & $smart_enable_tried == 0){
foreach(`smartctl -i /dev/$disk -s on -o on -S on | grep SMART`) {
if (/SMART Enabled/){
$smart_enabled=1;
next;
}
}
$smart_enable_tried=1;
}
if ($line = /Enabled/){
$smart_enabled=1;
}
}
print "t{n";
print "tt"{#DISKNAME}":"$disk",n";
print "tt"{#SMART_ENABLED}":"$smart_enabled"n";
print "t}n";
}
print "nt]n";
print "}n";
Сохраняем скрипт и делаем исполняемым.
# chmod u+x smartctl-disks-discovery.pl
Выполняем скрипт и проверяем вывод. Должно быть примерно так с двумя дисками.
{
"data":[
{
"{#DISKNAME}":"sda",
"{#SMART_ENABLED}":"1"
}
,
{
"{#DISKNAME}":"sdb",
"{#SMART_ENABLED}":"1"
}
]
}
В данном случае у меня 2 физических диска — sda и sdb. Их мы и будем мониторить.
Настроим разрешение для пользователя zabbix на запуск этого скрипта, а заодно и smartctl, который нам понадобится дальше. Для этого запускаем утилиту для редактирования /etc/sudoers.
# visudo
Добавляем в самый конец еще одну строку:
zabbix ALL=(ALL) NOPASSWD:/usr/sbin/smartctl,/etc/zabbix/scripts/smartctl-disks-discovery.pl
Сохраняем, выходим ? Это если вы умеете работать с vi. Если нет, то загуглите, как работать с этим редактором. Именно он запускается командой visudo.
Проверим, что пользователь zabbix нормально исполняет скрипт.
# chown zabbix:zabbix /etc/zabbix/scripts/smartctl-disks-discovery.pl
# sudo -u zabbix /etc/zabbix/scripts/smartctl-disks-discovery.pl
Вывод должен быть такой же, как от root. Если вам не хочется разбираться с этими разрешениями, либо что-то не получается, можете просто запустить zabbix-agent от пользователя root и проверить работу в таком режиме. Сделать это не трудно, данный параметр закомментирован в конфигурации агента. Вам достаточно просто снять комментарий и перезапустить агент.
После настройки скрипта автообнаружения, добавим необходимые UserParameters для мониторинга SMART. Для этого создадим отдельный конфигурационный файл. Для версии 3.2 и ниже он будет выглядеть вот так.
# mcedit /etc/zabbix/zabbix_agentd.d/smart.conf
UserParameter=uHDD[*],sudo smartctl -A /dev/$1| grep -i "$2"| tail -1| cut -c 88-|cut -f1 -d' '
UserParameter=uHDD.model.[*],sudo smartctl -i /dev/$1 |grep -i "Device Model"| cut -f2 -d: |tr -d " "
UserParameter=uHDD.sn.[*],sudo smartctl -i /dev/$1 |grep -i "Serial Number"| cut -f2 -d: |tr -d " "
UserParameter=uHDD.health.[*],sudo smartctl -H /dev/$1 |grep -i "test"| cut -f2 -d: |tr -d " "
UserParameter=uHDD.errorlog.[*],sudo smartctl -l error /dev/$1 |grep -i "ATA Error Count"| cut -f2 -d: |tr -d " "
UserParameter=uHDD.discovery,sudo /etc/zabbix/scripts/smartctl-disks-discovery.pl
Версия настроек для агента 3.4
UserParameter=uHDD.A[*],sudo smartctl -A /dev/$1
UserParameter=uHDD.i[*],sudo smartctl -i /dev/$1
UserParameter=uHDD.health[*],sudo smartctl -H /dev/$1 || true
UserParameter=uHDD.discovery,sudo /etc/zabbix/scripts/smartctl-disks-discovery.pl
Сохраняем файл и перезапускаем zabbix-agent.
# systemctl restart zabbix-agent
Проверяем, как наш агент будет отдавать данные. Ключ uHDD.discovery будет одинаковый для обоих версий агента.
# zabbix_agentd -t uHDD.discovery
Вы должны увидеть полный JSON вывод с информацией о ваших диска. Теперь посмотрим, как передаются информация о smart. Запросим температуру дисков для версии 3.2.
# zabbix_agentd -t uHDD[sda,Temperature_Celsius]
uHDD[sda,Temperature_Celsius] [t|35]
Все в порядке. Можете погонять еще какие-нибудь параметры из смарта, но скорее всего все будет работать, если хотя бы один параметр работает. На этом настройка на агенте закончена, переходим к настройке сервера мониторинга.
Настройка мониторинга SMART параметров диска
На сервере нам никаких особенных настроек делать не придется. Достаточно будет загрузить готовый шаблон и применить его к интересующему нас хосту для мониторинга за диском.
Шаблон можно взять у меня — zabbix-smart-template.xml. Я уже точно не помню, изменял ли я что-нибудь в нем, по сравнению с оригинальным или нет. Но даже если и изменял, то незначительно, скорее всего только интервалы обновления итемов. Это шаблон я экспортировал со своего сервера версии 3.2. Оригинальные шаблоны вы можете взять у авторов по ссылке в начале поста.
Для сервера zabbix версии 3.4 используйте обновленный шаблон автора.
Интервал обновления правил автообнаружения в шаблоне 30 минут, поэтому придется подождать примерно пол часа, прежде чем какие-то новые данные по мониторингу смарта появятся на сервере. Во время отладки можете изменить этот параметр вручную в шаблоне.
Тут же, в прототипах элементов данных, можете посмотреть остальные айтемы, их параметры и интервалы обновления. Возможно, что-то вам будет не нужно и вы отключите.
Может быть вам будет полезно чаще, чем раз в 10 минут мониторить температуру жесткого диска. В соседнем разделе посмотрите прототипы триггеров. Некоторые из них вычисляемые и начнут работать только после того, как накопится определенное количество данных. До этого они будут показывать ошибки, имейте это ввиду.
После того, как правило автообнаружения сработает и будут получены первые данные, можно их проверять в «Последние данные». Это будут значения температуры.
Мониторинг SMART и температуры диска в Windows
Изначально в статье было рассказано только о мониторинге в системах linux. Со временем появилась необходимость настроить то же самое, только в Windows, поэтому решил не начинать новую статью, а дополнить текущую. Смысл дальнейших действий точно такой же, как и на linux. Для мониторинга за жесткими дисками, в том числе за температурой в windows, будем использовать smartmontools под windows. Скрипт для автообнаружения и формирования выдачи в zabbix будет работать на powershell.
Устанавливаем smartmontools. После установки рекомендую сразу проверить работу. Для этого открываем командную строку, переходим в директорию C:Program Filessmartmontoolsbin и выполняем:
# smartctl --scan-open
Вы должны увидеть список всех дисков в системе. Дальше можете посмотреть информацию о дисках, например так:
# smartctl -A /dev/sda
# smartctl -i /dev/sda
Если все в порядке, информация о дисках выводится, продолжаем. Нам нужен скрипт для парсинга вывода. Я не стал придумывать свой, к тому же на powershell писать практически не умею, взял за основу готовый, который реализует тот же функционал, что описанный выше для linux.
param($1,$2)
# Автообнарежение дисков
# Ключ: discovery
if ($1 -eq "discovery") {
try {
$items = smartctl --scan-open | where {$_ -match "/dev/sd"}
write-host -NoNewline "{"
write-host -NoNewline "`"data`":["
$n = 0
foreach ($obj in $items) {
if ((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 {exit}
}
# Получение информации от дисков
# Ключи:
else {
try {
if ($2 -eq "status") {
$obj = smartctl -H /dev/$1 | where {$_ -match "result:"}
$obj = $obj.substring(50)
}
elseif ($2 -eq "model") {
$obj = smartctl -i /dev/$1 | where {$_ -match "Device Model:"}
$obj = $obj.substring(18)
}
elseif ($2 -eq "family") {
$obj = smartctl -i /dev/$1 | where {$_ -match "Model Family:"}
$obj = $obj.substring(18)
}
elseif ($2 -eq "fw") {
$obj = smartctl -i /dev/$1 | where {$_ -match "Firmware Version:"}
$obj = $obj.substring(18)
}
elseif ($2 -eq "serial") {
$obj = smartctl -i /dev/$1 | where {$_ -match "Serial Number:"}
$obj = $obj.substring(18)
}
elseif ($2 -eq "capacity") {
$obj = 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 = 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:zabbixwindows.hdd.ps1. Проверим его работу. Запускаем консоль powershell и сам скрипт с разными параметрами.
Все в порядке. Скрипт возвращает список дисков для автообнаружения и различные параметры для запроса. Теперь добавим в конфиг агента UserParameter.
UserParameter=ZScript[*],powershell C:zabbixwindows.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 контроллера и настраивать мониторинг через них.
- Очистка, оптимизация, настройка mysql базы Zabbix
- Отправка уведомлений и графиков из zabbix в telegram
- Повторяющиеся уведомления в Zabbix
- Мониторинг времени отклика сайта в zabbix
- Мониторинг бэкапов с помощью zabbix
- Мониторинг времени делегирования домена в zabbix
- Мониторинг ssh логинов в zabbix
- Сервер терминалов тормозит
- Сервер терминалов на Windows 10
- Аудит логинов с записью в файл с помощью vbs скрипта