ZFS мониторинг файловой системы с помощью системы Zabbix. Контроль состояния происходит с учетом значения DEGRADED появляющегося в выводе статуса ZFS при ошибках с дисками. Своевременно полученная информация может избавить от серьезных проблем.
Содержание:
Введение
Не представляю как можно спокойно жить системному администратору без тотального контроля файловых систем. Например, для меня чем больше механизмов меня оповестят о проблемах дисков тем лучше. К сожалению жесткий диск может выйти из строя в любой момент и это не зависит от того дорогой он или дешевый.
В этой статье вы узнаете как с помощью системы Zabbix можно держать под контролем все имеющие диски в файловой системе ZFS.
Более подробно про систему ZFS можно узнать на сайте разработчика.
ZFS мониторинг общий принцип
Схема действий для мониторинга параметра будет следующей:
- Создаем скрипт bach который будет записывать нужное значение в текстовый файл;
- Добавляем в cron задание которое будет с нужной нам периодичностью записывать показания в текстовый файл;
- Добавляем необходимые параметры в агент Zabbix и проверяем правильность работы;
- На сервере Zabbix для нужного узла добавляем все необходимые данные для контроля над параметром и настраиваем оповещение в случае плохих параметров.
Действия на Zabbix агенте
Команда для вывода нужных параметров ZFS
Выведем состояние zfs:
zpool status = вывод команды = pool: rpool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-ST3120811AS_5PT00YS1-part3 ONLINE 0 0 0 ata-ST3120811AS_5PT00DRP-part3 ONLINE 0 0 0 errors: No known data errors
Из вывода видно что имеются 2 диска сделанные в зеркале.
ZFS мониторинг будет основываться на появлении сообщения DEGRADED. Выполним команду которая проверит наличие этого сообщение:
/sbin/zpool status | grep DEGRADED | wc -l = вывод команды = 0
При отсутствии значения DEGRADED выводится сообщение 0. При наличии значения выведется число соответствующее количеству встречающихся значений.
Отключим диск и подождав немного запросим статус ZFS:
zpool status = вывод команды = pool: rpool state: DEGRADED status: One or more devices has been removed by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scan: none requested config: NAME STATE READ WRITE CKSUM rpool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 ata-ST3120811AS_5PT00YS1-part3 REMOVED 0 0 0 ata-ST3120811AS_5PT00DRP-part3 ONLINE 0 0 0 errors: No known data errors
Видим что у одного из дисков появилось значение REMOVED и параметр DEGRADED встречается 3 раза.
Проверим правильность выполняемой команды:
/sbin/zpool status | grep DEGRADED | wc -l
= вывод команды =
3
Всё правильно.
Создадим папку и в ней скрипт bash который будем запускать в cron для записи значения в текстовый файл.
mkdir /etc/zabbix/scripts vim /etc/zabbix/scripts/zfs_degraded-bin.sh = необходимый код = #!/bin/bash /sbin/zpool status | grep DEGRADED | wc -l > /etc/zabbix/scripts/zfs_degraded.txt
Сделаем скрипт исполнительным:
chmod +x /etc/zabbix/scripts/zfs_degraded-bin.sh
Произведем проверки. Запустим скрит, проверим создание текстового файла и информацию в нём. Выполнив по очереди 3 команды:
sh /etc/zabbix/scripts/zfs_degraded-bin.sh
= вывод пустой =
ls /etc/zabbix/scripts
= вывод команды =
zfs_degraded-bin.sh zfs_degraded.txt
cat /etc/zabbix/scripts/zfs_degraded.txt
= вывод команды =
3
Все работает как надо. Добавим задание в крон:
vim /etc/crontab = необходимый код = */3 * * * * root /etc/zabbix/scripts/zfs_degraded-bin.sh >/dev/null 2>&1
Каждые 3 минуты в текстом фале будет обновляться информация.
Добавление параметров для Zabbix агента
Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо добавить в файл настройки необходимый параметр.
vim /etc/zabbix/zabbix_agentd.conf = необходимый параметр = UnsafeUserParameters=1
После необходимого параметра добавляем нужный код. В моем случае получился следующий код:
UserParameter=pve-1.zfs,cat /etc/zabbix/scripts/zfs_degraded.txt
Параметры имеют следующие значения:
- UserParameter — параметр согласно которого агент понимает что с ним надо работать;
- pve-1.zfs — название параметра который мы будем использовать при добавлении элемента данных;
- cat /etc/zabbix/scripts/zfs_degraded.txt — команда и путь по которому брать данные.
Перезапускаем агент Zabbix и проверяем правильность получения параметра агентом:
systemctl restart zabbix-agent
zabbix_get -s 127.0.0.1 -k pve-1.zfs
= вывод команды =
3
В случае получения ошибок
zpool clear rpool-bash: zabbix_get: command not found или zabbix_get [20065]: Check access restrictions in Zabbix agent configuration
перейдите по ссылке и узнаете почему не работает zabbix_get.
Действия на сервере Zabbix
Добавление элемента данных
Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.
Необходимо заполнить следующие поля:
- Имя — pve-1 degraded zfs;
- Ключ — pve-1.zfs;
- Тип информации — Числовой (целое положительное);
- Интервал обновления — 5m;
- Период хранения истории — 1w;
- Группы элементов данных — Filesystem.
Добаление тригера
Открываем необходимый узел и перейдя в «Триггеры» добавляем новый нажав «Создать триггер«.
Необходимо заполнить следующие поля:
- Имя триггера — pve-1 degraded zfs;
- Выражение — {pve-1:pve-1.zfs.last()}>0.
Ждем немного времени и проверяем срабатывание триггера. В случае успешного срабатывания выключаем систему, подключаем диск назад и запускаем систему.
Cброс счетчиков ошибок ZFS
После того как мы подключили в диск в выводе статуса ZFS будет информация об ошибках. Например, в нашем случае мы знаем чем вызваны эти ошибки и разбираться в их причине не требуется.
Сбросить все ошибки в пуле мы можем следующей командой:
zpool clear rpool
Заключение
Возможно есть и другие варианты и подходы для мониторинга файловой системы ZFS и если вы знаете о них поделитесь информацией в комментариях.
Зачем создавать файл и запихивать скрипт в Crontab? Можно же сразу получать значение через агента.
Путей много и реализация часто зависит от уровня знаний. Можно наверно и агентом, но мне было привычней сделать так как описано в статье.
Спасибо, просто стало интересно, может чего не знаю )) Удачи!
Добрый.
Если надо просто мониторить ZFS с отсылкой алертов на почту, то подойдет пакет zfs-zed — pve.proxmox.com/wiki/ZFS_on_Linux
Достаточно корректно настроить postfix на PVE. И для проверки принудительно изъять диск из пула — zpool offline -f имя-пула имя-диска. На почту прийдет алерт. Вернуть диск — zpool online имя-пула имя-диска; zpool clear
Зы. Не уверен, что zfs-zed умеет алертить о заполненности пула (( Ну, или я пока не разобрался.
Добрый
В догонку. Если надо из коробки мониторить zfs (и не только — SMART, логи etc.) с отсылкой алертов на почту — techblog.jeppson.org/2019/08/using-proxmox-as-a-nas/
Попробую. В случае успеха добавлю с статью информацию.