Мониторинг S.M.A.R.T. дисков в Zabbix: полная инструкция по настройке | AdminWiki

Мониторинг S.M.A.R.T. дисков в Zabbix: полная инструкция по настройке

25 июля 2026 9 мин. чтения
Содержание статьи

Централизованный сбор метрик 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 не собирает данные: диагностика

Пошаговая проверка:

  1. Логи агента: tail -f /var/log/zabbix/zabbix_agentd.log. Ищите строки с «not supported» или «permission denied».
  2. Запуск агента в foreground-режиме с отладкой: zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf. Вывод покажет каждую обработанную команду.
  3. Тест ключа с параметром: zabbix_agentd -t smart.health[sda]. Если возвращается значение - проблема на стороне сервера или сети. Если ZBX_NOTSUPPORTED - проблема в UserParameter или правах.
  4. Проверка 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 в редакторе триггера - она покажет, как вычисляется выражение на исторических данных.

Поделиться:
Сохранить гайд? В закладки браузера