Обнаружение дисков в Zabbix и просмотр по ним температуры

В статье будет описано как можно настроить авто обнаружение всех дисков (sata и nvme) в системе с помощью сервера мониторинга Zabbix и получать по ним температуру. Получать температуру с дисков будем с помощью утилит hddtemp и nvme. Также нам понадобится утилита sudo, чтобы пользователь Zabbix мог выполнять команды hddtemp и nvme.

Предварительная настройка

Я всё проделываю на Debian 10, на Debian 11 всё должно работать также, но сам не проверял. Сейчас на Debian 12 нет утилиты hddtemp, поэтому придётся изменить скрипты, но если вы поймёте метод, то сможете сделать это самостоятельно.

Получать температуру с дисков будем с помощью утилит hddtemp и nvme, также нам понадобится утилита sudo, установим эти пакеты:

# apt install -y hddtemp nvme-cli sudo

Дадим возможность пользователю zabbix использовать эти утилиты под sudo без запроса пароля:

# visudo
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/hddtemp
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/nvme smart-log /dev/disk/by-id/*

Обратите внимание, утилита nvme даёт возможность управлять диском. Например, разбивать его на разделы. Поэтому я ограничил для пользователя zabbix возможность только получать информацию с дисков, с помощью подкоманды smart-log.

Пользовательские параметры и скрипты

Если кто не в курсе что что такое пользовательские параметры, то у меня для вас есть отдельная статья Zabbix — пользовательские параметры агента).

И так, стоздадим два пользовательских параметра:

  • hdd-temp[*] — в качестве параметра принимает название диска, и получает по диску температуру;
  • hdd-list — работает без параметров, просто находит все диски на сервере и оборачивает вывод в json для правила обнаружения zabbix.

Добавим пользовательские параметры:

# nano /etc/zabbix/zabbix_agentd.conf.d/userparameter.conf
UserParameter=hdd-temp[*],/etc/zabbix/hdd_temp.sh "$1"
UserParameter=hdd-list,/etc/zabbix/hdd_list.sh

Скрипт — обнаружение дисков для Zabbix:

# nano /etc/zabbix/hdd_list.sh

#!/bin/bash
ls -1 /dev/disk/by-id/ | grep -E -v 'part|wwn|eui' | awk 'BEGIN {printf "{\"data\":["} {printf "%s{\"{#DISK}\":\"%s\"}", separator, $0; separator=","} END {print "]}" }'

Скрипт — получение температуры для конкретного диска:

# nano /etc/zabbix/hdd_temp.sh

#!/bin/bash
sudo /usr/sbin/hddtemp -n /dev/disk/by-id/"$1" 2>/dev/null || sudo /usr/sbin/nvme smart-log /dev/disk/by-id/$1 | grep temperature | awk '{print $3}'

Этот скрипт немного не оптимальный, можно было бы сделать получше. Я в нём получаю температуру с помощью утилиты hddtemp, и если получаю ошибку то предполагаю что это nvme диск. В этом случае пытаюсь получить температуру с помощью утилиты nvme.

Настроим права для скриптов, выполнять их сможет только пользователь zabbix:

# chown zabbix:zabbix /etc/zabbix/hdd_*.sh
# chmod u+x /etc/zabbix/hdd_*.sh

И наконец, перезапустим службу zabbix-agent:

# systemctl restart zabbix-agent.service

Добавление правил на Zabbix сервер

Для начала добавим правило обнаружения (по этой теме у меня есть статья — Zabbix — правила обнаружения):

  • Название — hdd-list
  • Ключ — hdd-list
Добавление в Zabbix правила обнаружения

Создадим прототип элементов данных:

  • Название — Температура диска {#DISK}
  • Ключ — hdd-temp[{#DISK}]
Добавление в Zabbix прототипа элемента данных

Добавим прототип триггеров:

  • Выражение — min(/ProxmoxVE/hdd-temp[{#DISK}],3m)>50
  • Он сработает если в течении 3 минут температура будет больше 50 градусов.
Добавление в Zabbix прототипа триггеров

Другие мои статьи по серверу мониторинга Zabbix можете найти здесь.

Если понравилась статья, подпишись на мой канал в VK или Telegram.

Оставьте комментарий