Централизованный сбор метрик S.M.A.R.T. в Zabbix - это раннее выявление деградации накопителей до того, как отказ приведет к потере данных. Вы получаете единую панель для всех серверов и NAS, где видны температура, количество переназначенных секторов и общий статус здоровья каждого диска.
Эта инструкция проведет вас от установки smartmontools до настройки алертов в Telegram и построения дашбордов. Выполнив шаги последовательно, вы за один-два часа получите работающую систему мониторинга, которая предупредит о проблеме раньше, чем RAID-контроллер или пользователи.
Если вы уже используете Zabbix для мониторинга дисковой подсистемы, материал о стандартных шаблонах и кастомных триггерах поможет расширить покрытие. Для комплексного подхода к хранению данных также рекомендуем руководство по настройке RAID-контроллера с интеграцией в Zabbix.
Подготовка к мониторингу: установка smartmontools и настройка прав
Zabbix Agent будет вызывать утилиту smartctl из пакета smartmontools. Сначала установим её и дадим агенту права на выполнение.
Установка smartmontools в различных дистрибутивах
В Debian и Ubuntu пакет ставится одной командой:
sudo apt update && sudo apt install smartmontoolsДля CentOS, RHEL 7 и производных:
sudo yum install smartmontoolsВ RHEL 8, Rocky Linux, AlmaLinux используется dnf:
sudo dnf install smartmontoolsПроверьте, что утилита доступна:
smartctl --versionВывод покажет версию smartmontools (актуальная - 7.3 или 7.4) и список поддерживаемых устройств.
Настройка sudo для Zabbix Agent
По умолчанию smartctl требует прав root для доступа к дискам. Zabbix Agent работает от пользователя zabbix, поэтому при прямом вызове получит «Permission denied». Решение - разрешить агенту выполнять smartctl через sudo без пароля.
Откройте редактор sudoers:
sudo visudo -f /etc/sudoers.d/zabbixДобавьте строку:
zabbix ALL=(ALL) NOPASSWD:/usr/sbin/smartctlУказывайте полный путь к исполняемому файлу - это критично для безопасности. Узнать его можно командой which smartctl.
Проверьте, что пользователь zabbix действительно может выполнить команду:
sudo -u zabbix sudo smartctl -a /dev/sdaЕсли вы видите вывод S.M.A.R.T.-данных, права настроены корректно. Если нет - проверьте синтаксис в sudoers и убедитесь, что файл заканчивается переводом строки.
Создание пользовательских параметров (UserParameter) в Zabbix Agent
UserParameter - это механизм, который связывает ключ элемента данных в Zabbix с командой операционной системы. Мы создадим набор ключей, через которые агент будет отдавать метрики S.M.A.R.T.
Базовые UserParameter для критических атрибутов
Создайте файл конфигурации:
sudo nano /etc/zabbix/zabbix_agentd.d/smart.confДобавьте следующие параметры:
UserParameter=smart.health[*],sudo smartctl -H /dev/$1 | grep -q 'PASSED' && echo 1 || echo 0
UserParameter=smart.temperature[*],sudo smartctl -A /dev/$1 | grep Temperature_Celsius | awk '{print $$10}'
UserParameter=smart.reallocated[*],sudo smartctl -A /dev/$1 | grep Reallocated_Sector_Ct | awk '{print $$10}'Макрос $1 принимает имя устройства, переданное в ключе - например, smart.health[sda]. Параметр smart.health возвращает 1, если диск проходит общую проверку здоровья (PASSED), и 0 при любых проблемах. smart.temperature извлекает текущую температуру в градусах Цельсия, smart.reallocated - счетчик переназначенных секторов.
Расширенные параметры для детального анализа
Для глубокой диагностики добавьте в тот же файл:
UserParameter=smart.power_on_hours[*],sudo smartctl -A /dev/$1 | grep Power_On_Hours | awk '{print $$10}'
UserParameter=smart.read_error_rate[*],sudo smartctl -A /dev/$1 | grep Raw_Read_Error_Rate | awk '{print $$10}'
UserParameter=smart.spin_retry[*],sudo smartctl -A /dev/$1 | grep Spin_Retry_Count | awk '{print $$10}'
UserParameter=smart.pending_sectors[*],sudo smartctl -A /dev/$1 | grep Current_Pending_Sector | awk '{print $$10}'
UserParameter=smart.uncorrectable[*],sudo smartctl -A /dev/$1 | grep Offline_Uncorrectable | awk '{print $$10}'Если параметров становится больше пяти, вынесите логику в отдельный скрипт и вызывайте его из UserParameter - это упростит отладку и снизит нагрузку на агент при частых проверках.
После редактирования перезапустите агент:
sudo systemctl restart zabbix-agentПротестируйте ключи локально:
zabbix_agentd -t smart.health[sda]
zabbix_agentd -t smart.temperature[sda]Вы должны увидеть числовые значения и статус SUCCESS. Если возвращается ZBX_NOTSUPPORTED, проверьте логи агента: tail -f /var/log/zabbix/zabbix_agentd.log.
Импорт и адаптация готового шаблона S.M.A.R.T. для Zabbix
Ручное создание элементов данных для каждого диска отнимает время. Готовый шаблон автоматизирует обнаружение накопителей и добавляет типовые триггеры.
Где найти качественные шаблоны S.M.A.R.T.
Проверенные источники:
- Репозиторий zabbix-smartctl на GitHub - поддерживает LLD-обнаружение дисков, содержит триггеры на все критические атрибуты и совместим с Zabbix 6.0, 6.4 и 7.0.
- Официальный Zabbix Share - ищите по запросу «SMART» или «disk health», обращайте внимание на дату последнего обновления и рейтинг.
При выборе шаблона проверьте три критерия: наличие discovery-правил для автоматического поиска дисков, готовые триггеры на основные атрибуты и совместимость с вашей версией Zabbix.
Адаптация шаблона под свою инфраструктуру
Скачайте YAML или XML-файл шаблона и импортируйте его: Configuration → Templates → Import. После импорта откройте шаблон и настройте макросы:
- {$SMART_DISK} - путь к устройству. Для первого диска оставьте
/dev/sda, для остальных discovery подставит значения автоматически. - {$SMART_SUDO} - если вы настроили sudo, укажите
sudo. Если добавили пользователя zabbix в группу disk, оставьте пустым.
Для NVMe-дисков измените команду в элементах данных: добавьте флаг -d nvme к вызову smartctl. Например:
sudo smartctl -d nvme -A /dev/nvme0Привяжите шаблон к хосту через Configuration → Hosts → выбор хоста → вкладка Templates. Через несколько минут в разделе Monitoring → Latest Data появятся значения с ключами smart.health, smart.temperature и другими.
Если данные не поступают, проверьте общие принципы мониторинга дискового пространства в Zabbix - там разобраны типовые проблемы с LLD и правами агента.
Настройка алертов на критические атрибуты S.M.A.R.T.
Сбор метрик без оповещений не имеет смысла. Настроим триггеры, которые сообщат о проблеме до того, как диск откажет.
Ключевые атрибуты S.M.A.R.T., требующие мониторинга
Пять атрибутов, на которые нужно настроить алерты в первую очередь:
- Reallocated Sectors Count (ID 5) - сектора, переназначенные из резервной области. Ненулевое значение у нового диска - повод для замены по гарантии. Рост на десятки в месяц - предвестник отказа.
- Current Pending Sector (ID 197) - нестабильные сектора, ожидающие переназначения. Любое значение больше нуля требует внимания: диск пытается прочитать данные и не может.
- Offline Uncorrectable (ID 198) - сектора, которые не удалось прочитать и исправить. Появление этого счетчика означает, что данные уже потеряны.
- Temperature_Celsius (ID 194) - рабочая температура. Для HDD порог 45-50 °C, для SSD - 60-70 °C в зависимости от модели.
- SMART Health Status - интегральная оценка. Если smartctl возвращает FAILED, диск необходимо заменить немедленно.
Создание триггеров и действий в Zabbix
Откройте шаблон в разделе Configuration → Templates, перейдите на вкладку Triggers и создайте триггер:
Name: SMART Health Failed on {#DISK}
Expression: last(/Template SMART/smart.health[{#DISK}])=0
Severity: DisasterДля температуры настройте триггер с макросом порога:
Name: High temperature on {#DISK} ({ITEM.VALUE}°C)
Expression: last(/Template SMART/smart.temperature[{#DISK}])>{$TEMP_WARN}
Severity: WarningМакрос {$TEMP_WARN} задайте на уровне шаблона или хоста - например, значение 50 для жестких дисков.
Для реакции на события перейдите в Configuration → Actions. Создайте действие: условие - сработал триггер из группы SMART, операция - отправка сообщения в Telegram. Если медиатип Telegram еще не настроен, воспользуйтесь руководством по автоматическому мониторингу дисков с уведомлениями в Telegram и email - там приведены готовые скрипты и конфигурации.
Пример текста сообщения:
Проблема: {TRIGGER.NAME}
Хост: {HOST.NAME}
Значение: {ITEM.VALUE}
Время: {EVENT.TIME}Мониторинг удаленных дисков: сценарии для NAS и других хостов
Диски в удаленном офисе, за NAT или в NAS требуют особого подхода. Рассмотрим три рабочих сценария.
Использование Zabbix Proxy для удаленных площадок
Установите Zabbix Proxy на удаленной стороне, настройте агенты на хостах с дисками и подключите шаблон S.M.A.R.T. через прокси. Схема стандартная: агент собирает данные, прокси буферизирует и передает на центральный сервер. Преимущество - мониторинг продолжается даже при обрыве связи с центром.
Настройка агента на удаленном хосте идентична локальной: установите smartmontools, настройте sudo, создайте UserParameter и привяжите шаблон. В конфигурации хоста укажите, что он мониторится через прокси.
Мониторинг через активные проверки Zabbix Agent
Если сервер Zabbix не может инициировать соединение с агентом (хост за NAT, динамический IP), переведите агент в активный режим. В файле /etc/zabbix/zabbix_agentd.conf укажите:
ServerActive=IP_вашего_сервера
Hostname=уникальное_имя_хостаВ элементах данных шаблона измените тип с «Zabbix Agent» на «Zabbix Agent (Active)». Агент сам будет устанавливать соединение и передавать собранные метрики.
Сбор S.M.A.R.T. по SSH и отправка через zabbix_sender
Для устройств, где нельзя установить Zabbix Agent (некоторые NAS, гипервизоры с закрытой ОС), используйте внешний скрипт. Настройте беспарольный SSH-доступ по ключам с сервера Zabbix на целевой хост, затем создайте скрипт:
#!/bin/bash
DISK="/dev/sda"
HOST="nas-01"
VALUE=$(ssh nas-01 "sudo smartctl -H $DISK | grep -q PASSED && echo 1 || echo 0")
zabbix_sender -z 127.0.0.1 -s "$HOST" -k smart.health[sda] -o "$VALUE"Добавьте скрипт в cron с интервалом 5-10 минут. Для продакшена лучше написать скрипт на Python с обработкой ошибок и отправкой нескольких метрик за одно соединение - это снизит накладные расходы на SSH-аутентификацию.
Визуализация данных S.M.A.R.T. в дашбордах Zabbix
Дашборд дает мгновенную картину состояния дискового парка без проваливания в отдельные хосты.
Основные виджеты для мониторинга дисков
Создайте дашборд в разделе Monitoring → Dashboards. Добавьте виджеты:
- Graph - температура всех дисков. В качестве источника данных укажите шаблон SMART, ключ
smart.temperature[*]. На одном графике отобразятся кривые для каждого накопителя - аномалии видны сразу. - Problem hosts - фильтр по тегу «SMART». Показывает хосты, на которых есть активные проблемы с дисками.
- Gauge - статус здоровья конкретного диска. Значение 1 - зеленый сектор, 0 - красный. Быстрая индикация для самых критичных систем.
- Top hosts - топ-5 дисков по температуре. Помогает выявить проблемы с охлаждением в стойке.
Используйте фильтры по группе хостов и тегам, чтобы дашборд показывал только релевантные устройства. Например, отдельный дашборд для NAS и отдельный для серверов баз данных.
Типичные проблемы и их решение
При настройке мониторинга S.M.A.R.T. возникают одни и те же ошибки. Разберем их с готовыми решениями.
Ошибка «Permission denied» при выполнении smartctl
Проверьте три момента. Первый: точный путь к smartctl в sudoers - команда which smartctl должна вернуть тот же путь, что прописан в конфигурации. Второй: флаг NOPASSWD - без него sudo запросит пароль, и агент зависнет. Третий: выполните sudo -u zabbix sudo -l - вывод должен содержать разрешенную команду.
Менее безопасная альтернатива - добавить пользователя zabbix в группу disk:
sudo usermod -aG disk zabbixПосле этого перезапустите агент. Прямой доступ к устройствам без sudo работает, но расширяет привилегии агента на все блочные устройства.
Zabbix Agent не собирает данные: диагностика
Пошаговая проверка:
- Логи агента:
tail -f /var/log/zabbix/zabbix_agentd.log. Ищите строки с «not supported» или «permission denied». - Запуск агента в foreground-режиме с отладкой:
zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf. Вывод покажет каждую обработанную команду. - Тест ключа с параметром:
zabbix_agentd -t smart.health[sda]. Если возвращается значение - проблема на стороне сервера или сети. Если ZBX_NOTSUPPORTED - проблема в UserParameter или правах. - Проверка firewall: агент по умолчанию слушает порт 10050 для пассивных проверок. Сервер Zabbix должен иметь доступ к этому порту.
Для активных проверок убедитесь, что агент может соединиться с сервером на порт 10051.
Smartctl не видит диск
Для NVMe-дисков обязательно указывайте тип устройства: smartctl -d nvme -a /dev/nvme0. Для дисков за RAID-контроллером может потребоваться ключ -d megaraid,N или -d 3ware,N в зависимости от модели контроллера.
Если имена устройств в /dev/sd* меняются после перезагрузки, используйте симлинки из /dev/disk/by-id/ - они привязаны к серийному номеру накопителя и постоянны.
Триггер не срабатывает
Откройте элемент данных в разделе Latest Data и проверьте актуальное значение. Сравните его с выражением триггера - возможно, порог задан некорректно. Проверьте, что триггер включен (Enabled) и что хост не находится в режиме обслуживания (Maintenance).
Для отладки выражений используйте функцию Testing в редакторе триггера - она покажет, как вычисляется выражение на исторических данных.