Установка и настройка SMART Exporter для Prometheus: полное руководство 2026 | AdminWiki

Установка и настройка SMART Exporter для Prometheus: полное руководство 2026

25 июля 2026 8 мин. чтения

Что такое SMART Exporter и зачем он нужен

Технология S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) встроена в каждый современный HDD и SSD. Она собирает десятки атрибутов: температуру, количество ошибок чтения, число переназначенных секторов, степень износа ячеек SSD. Проблема в том, что эти данные бесполезны, пока вы их не видите. Диски умирают внезапно - так кажется, если не следить за их состоянием.

SMART Exporter решает эту задачу. Это скрипт, который запускает утилиту smartctl, извлекает ключевые атрибуты и отдаёт их в формате, понятном Prometheus. Метрики попадают в общий поток данных через textfile collector, встроенный в node_exporter. Вы получаете централизованный сбор показателей всех дисков на всех серверах без установки дополнительных агентов.

Какие метрики критически важны:

  • Температура - рост выше 50°C для HDD и 70°C для SSD сигнализирует о проблемах с охлаждением.
  • Reallocated Sectors Count - появление переназначенных секторов на HDD указывает на деградацию поверхности. Любое значение выше нуля - повод для пристального наблюдения.
  • Wear Leveling Count / Media Wearout Indicator - для SSD показывает остаточный ресурс. Падение ниже 10% означает, что накопитель выработал свой срок.
  • Raw Read Error Rate и Seek Error Rate - рост этих показателей предшествует механическим отказам.

Без мониторинга S.M.A.R.T. вы рискуете потерять данные и столкнуться с внезапным отказом сервера. Экспортер даёт время на плановую замену диска до того, как он выйдет из строя. Это не теория - это практика, проверенная на сотнях серверов. Если вы уже используете стек Prometheus, добавление SMART Exporter займёт 15 минут. Если только начинаете - начните с развёртывания стека мониторинга Prometheus и Grafana, а затем вернитесь к этой инструкции.

Подготовка сервера и установка необходимых пакетов

Для работы SMART Exporter требуется Linux-сервер с установленным node_exporter. Если node_exporter ещё не настроен, воспользуйтесь руководством по мониторингу Linux-сервера с Node Exporter - там описан процесс за 5 минут. Предполагаем, что Prometheus уже собирает метрики с этого хоста.

Первый шаг - установка пакета smartmontools, который содержит утилиту smartctl:

apt update && apt install smartmontools -y

Для CentOS/RHEL:

yum install smartmontools -y

После установки проверяем, что утилита доступна:

smartctl --version

Проверка поддержки S.M.A.R.T. на ваших дисках

Не все диски имеют S.M.A.R.T., и не на всех он включен. Проверяем каждый накопитель:

smartctl -i /dev/sda

В выводе ищите строки:

  • SMART support is: Available - устройство поддерживает технологию.
  • SMART support is: Enabled - технология активна.

Если видите SMART support is: Disabled, включаем командой:

smartctl -s on /dev/sda

Если S.M.A.R.T. не поддерживается на уровне устройства - мониторинг невозможен. Такое встречается на старых HDD и некоторых виртуальных дисках. Для виртуальных машин мониторинг дисков имеет смысл только на уровне хостовой системы.

Проверьте все диски, которые планируете мониторить: /dev/sda, /dev/sdb, /dev/nvme0n1 и так далее. Для NVMe-дисков используется команда smartctl -i /dev/nvme0 (без указания раздела).

Установка и настройка SMART Exporter

SMART Exporter - это скрипт на bash или python, который вызывает smartctl, парсит вывод и формирует метрики в формате Prometheus. Мы используем проверенный вариант - bash-скрипт, который легко читается и не требует дополнительных зависимостей.

Скачиваем скрипт и размещаем его в системной директории:

curl -o /usr/local/bin/smart_exporter.sh https://raw.githubusercontent.com/.../smart_exporter.sh
chmod +x /usr/local/bin/smart_exporter.sh

Скрипт должен запускаться с правами, достаточными для выполнения smartctl. Утилите smartctl нужен доступ к устройству - либо через sudo, либо через добавление пользователя в группу disk:

usermod -aG disk prometheus

Где prometheus - пользователь, от которого работает node_exporter. После добавления в группу потребуется перелогин или перезапуск сервиса.

Проверяем работу скрипта вручную:

/usr/local/bin/smart_exporter.sh

Вывод должен содержать строки вида:

smart_device_health{device="/dev/sda",model="WDC WD40EFRX"} 1
smart_temperature_celsius{device="/dev/sda"} 34
smart_reallocated_sectors{device="/dev/sda"} 0

Настройка cron или systemd таймера для регулярного сбора метрик

Метрики S.M.A.R.T. меняются медленно - опрос раз в 5 минут более чем достаточен. Настраиваем cron:

*/5 * * * * /usr/local/bin/smart_exporter.sh > /var/lib/node_exporter/textfile_collector/smart.prom

Откройте редактор crontab:

crontab -e

Добавьте строку выше и сохраните. Убедитесь, что директория /var/lib/node_exporter/textfile_collector существует:

mkdir -p /var/lib/node_exporter/textfile_collector
chown prometheus:prometheus /var/lib/node_exporter/textfile_collector

Альтернативный вариант - systemd-таймер. Создайте файл сервиса /etc/systemd/system/smart-exporter.service:

[Unit]
Description=SMART Exporter for Prometheus

[Service]
Type=oneshot
User=prometheus
ExecStart=/usr/local/bin/smart_exporter.sh
StandardOutput=file:/var/lib/node_exporter/textfile_collector/smart.prom

И таймер /etc/systemd/system/smart-exporter.timer:

[Unit]
Description=Run SMART Exporter every 5 minutes

[Timer]
OnCalendar=*:0/5
Persistent=true

[Install]
WantedBy=timers.target

Активируем таймер:

systemctl daemon-reload
systemctl enable smart-exporter.timer
systemctl start smart-exporter.timer

Проверяем, что файл метрик обновляется:

ls -la /var/lib/node_exporter/textfile_collector/smart.prom
cat /var/lib/node_exporter/textfile_collector/smart.prom

Интеграция с node_exporter через textfile collector

Node_exporter должен знать, откуда забирать метрики. При запуске ему передаётся аргумент:

--collector.textfile.directory=/var/lib/node_exporter/textfile_collector

Если вы устанавливали node_exporter по нашему руководству, этот параметр уже настроен. Проверьте конфигурацию systemd-юнита node_exporter:

systemctl cat node_exporter | grep textfile

Если параметра нет - добавьте его в ExecStart юнита и перезапустите сервис:

systemctl daemon-reload
systemctl restart node_exporter

Проверяем, что метрики отдаются:

curl -s http://localhost:9100/metrics | grep smart_

Вы должны увидеть те же строки, что и при ручном запуске скрипта. Node_exporter подхватывает все файлы с расширением .prom из указанной директории и добавляет их содержимое к своим метрикам.

Добавление SMART Exporter в конфигурацию Prometheus

Поскольку метрики отдаёт node_exporter, отдельный job в Prometheus не нужен. Данные S.M.A.R.T. уже включены в эндпоинт /metrics вашего node_exporter. Проверяем, что хост добавлен в prometheus.yml:

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['192.168.1.10:9100']

Если вы настраивали мониторинг по инструкции по развёртыванию стека мониторинга, этот шаг уже выполнен. Перезагружаем Prometheus для применения изменений:

systemctl reload prometheus

Открываем веб-интерфейс Prometheus (http://prometheus:9090/targets) и убеждаемся, что цель node_exporter в состоянии UP. Переходим в Graph и выполняем запрос:

smart_temperature_celsius

Если данные отображаются - интеграция работает.

Визуализация метрик S.M.A.R.T. в Grafana

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

Пример дашборда для мониторинга HDD

Для жестких дисков критичны механические показатели. Основные панели:

  • Температура - запрос smart_temperature_celsius{instance="$host", device="$disk"}. Порог - 50°C.
  • Reallocated Sectors Count - запрос smart_reallocated_sectors{instance="$host", device="$disk"}. Любое значение выше 0 - повод для проверки.
  • Raw Read Error Rate - запрос smart_raw_read_error_rate{instance="$host", device="$disk"}. Резкий рост за час - предвестник отказа.
  • Spin Retry Count - запрос smart_spin_retry_count{instance="$host", device="$disk"}. Показывает проблемы с раскруткой шпинделя.

JSON-модель панели температуры для HDD:

{
  "datasource": "Prometheus",
  "targets": [{
    "expr": "smart_temperature_celsius{instance=~\"$host\", device=~\"$disk\"}",
    "legendFormat": "{{device}} - {{model}}"
  }],
  "title": "Температура HDD",
  "type": "gauge",
  "fieldConfig": {
    "defaults": {
      "thresholds": {
        "steps": [
          { "color": "green", "value": null },
          { "color": "yellow", "value": 45 },
          { "color": "red", "value": 50 }
        ]
      }
    }
  }
}

Пример дашборда для мониторинга SSD

Твердотельные накопители требуют других метрик - износ ячеек важнее механических ошибок:

  • Wear Leveling Count - запрос smart_wear_leveling_count{instance="$host", device="$disk"}. Показывает процент износа. Значение ниже 10 - диск под замену.
  • Media Wearout Indicator - аналог Wear Leveling для некоторых производителей. Запрос: smart_media_wearout_indicator{instance="$host", device="$disk"}.
  • Used Reserved Block Count - запрос smart_used_reserved_block_count{instance="$host", device="$disk"}. Рост указывает на исчерпание резервных блоков.
  • Program Fail Count - запрос smart_program_fail_count{instance="$host", device="$disk"}. Ошибки записи - прямой путь к отказу.

Для обоих типов дисков настройте переменные дашборда: $host для выбора сервера и $disk для выбора конкретного накопителя. Это позволит использовать один дашборд для всего парка серверов.

Готовые дашборды можно импортировать через JSON-модель. Если вы работаете с дисковым пространством и inode, посмотрите также руководство по мониторингу дисков и inode через Netdata и Grafana - там описан альтернативный подход с прогнозированием заполнения.

Настройка алертов для критических ошибок дисков

Дашборд показывает текущее состояние, но реагировать на проблемы нужно автоматически. Создайте файл правил алертинга, например /etc/prometheus/rules/smart_alerts.yml:

groups:
  - name: smart_alerts
    rules:
      - alert: DiskHighTemperature
        expr: smart_temperature_celsius > 55
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Высокая температура диска {{ $labels.device }} на {{ $labels.instance }}"
          description: "Температура {{ $value }}°C превышает порог 55°C"

      - alert: DiskReallocatedSectors
        expr: smart_reallocated_sectors > 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Переназначенные сектора на {{ $labels.device }} ({{ $labels.instance }})"
          description: "Обнаружено {{ $value }} переназначенных секторов. Диск деградирует."

      - alert: DiskWearLevelLow
        expr: smart_wear_leveling_count < 10
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Критический износ SSD {{ $labels.device }} на {{ $labels.instance }}"
          description: "Остаточный ресурс {{ $value }}%. Немедленно замените накопитель."

      - alert: DiskReallocatedSectorsIncrease
        expr: rate(smart_reallocated_sectors[1h]) > 0
        for: 10m
        labels:
          severity: critical
        annotations:
          summary: "Рост переназначенных секторов на {{ $labels.device }}"
          description: "За последний час появились новые переназначенные сектора. Скорость: {{ $value }}/сек"

Подключите файл правил в prometheus.yml:

rule_files:
  - "/etc/prometheus/rules/smart_alerts.yml"

Перезагрузите Prometheus и проверьте, что правила появились в разделе Alerts веб-интерфейса. Для отправки оповещений настройте Alertmanager - процесс описан в руководстве по настройке оповещений Prometheus.

Пороговые значения подбирайте под свою инфраструктуру. Для серверов в холодном дата-центре температура 55°C - уже критично. Для офисного помещения - допустимо. Алерт на переназначенные сектора должен срабатывать при любом значении выше нуля - появление даже одного такого сектора означает, что диск начал разрушаться.

Типичные проблемы и их решение

smartctl: command not found. Пакет smartmontools не установлен. Выполните apt install smartmontools или yum install smartmontools.

Permission denied при запуске smartctl. Пользователь, от которого работает скрипт, не имеет доступа к устройству. Добавьте его в группу disk: usermod -aG disk prometheus. После этого перезапустите сервис node_exporter или выполните перелогин.

Метрики не появляются в Prometheus. Проверьте цепочку: файл .prom создаётся? ls -la /var/lib/node_exporter/textfile_collector/. Node_exporter видит файл? curl -s http://localhost:9100/metrics | grep smart_. Prometheus достукивается до node_exporter? Проверьте Targets в веб-интерфейсе.

Файл метрик пустой или содержит ошибки. Запустите скрипт вручную и смотрите вывод. Частая причина - неправильный путь к устройствам в конфигурации скрипта. Укажите точный список дисков, исключив CD-ROM и виртуальные устройства.

Метрики есть, но Grafana показывает "No data". Проверьте datasource и переменные дашборда. Убедитесь, что в запросе правильно указаны instance и device. Регистр и спецсимволы в именах дисков должны совпадать с метриками.

NVMe-диски не отображаются. Для NVMe используется другой синтаксис: smartctl -a /dev/nvme0. Убедитесь, что скрипт экспортера поддерживает NVMe и правильно парсит их атрибуты.

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