Обнаружение дисков в Zabbix и просмотр по ним температуры
Предварительная настройка
Я всё проделываю на 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.
Настроим права для скриптов, выполнять их сможет только пользователь 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

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

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

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