Архив метки: ZFS

ZFS мониторинг в Zabbix

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 и если вы знаете о них поделитесь информацией в комментариях.

FSYNCS мониторинг параметра в Proxmox

Мониторинг FSYNCS параметра в системе виртуализации Proxmox является одним из главных, так как сильно влияет на качество работы системы. Контролируя данный параметр в системе Zabbix можно оптимально настроить производительность дисковой системы сервера.

Введение

В системе Proxmox есть замечательный механизм проверки работы дисковой системы. Выполнив в консоли команду pveperf мы увидим полезную информацию о скорости работы жестких дисков. Основной параметр который показывает скорость работы с дисками это FSYNCS/SECOND.

Выведя man сервиса мы увидим всю информацию о требовании к нашему параметру.

man pveperf
= часть вывода команды =
FSYNCS/SECOND value should be greater than 200 (you should enable write back cache mode on you RAID controller - needs a battery backed cache (BBWC)).

В описании четко сказано что параметр должен быть не меньше 200. При меньших значениях однозначно будут проблемы в работе сервера.

Общий принцип мониторинга FSYNCS для Proxmox

Схема действий для мониторинга параметра будет следующей:

  • Создаем скрипт bach который будет записывать нужное значение в текстовый файл;
  • Добавляем в cron задание которое будет с нужной нам периодичностью записывать показания в текстовый файл;
  • Добавляем необходимые параметры в агент Zabbix и проверяем правильность работы;
  • На сервере Zabbix для нужного узла добавляем все необходимые данные для контроля над параметром и настраиваем оповещение в случае плохих параметров.

Действия на Zabbix агенте

Команда для вывода нужных параметров FSYNCS

Для начала нам надо посмотреть куда и что у нас смонтировано в системе.

df -h
= часть вывода для ZFS =
rpool/ROOT/pve-1   99G    1001M    98G   1%   /

= часть вывода для mdadm =
/dev/md2           3,5T    1,2T    2,2T  35% /mnt/md2-raid10

Выводим информацию для нужного раздела.

Обязательно указываем в параметре куда смонтировано иначе не увидим параметр FSYNCS/SECOND.

pveperf /
= вывод команды =
CPU BOGOMIPS: 10044.86
REGEX/SECOND: 1168356
HD SIZE: 98.08 GB (rpool/ROOT/pve-1)
FSYNCS/SECOND: 85.84
DNS EXT: 67.40 ms
DNS INT: 1.44 ms (sevo44.loc)

pveperf /mnt/md2-raid10
= вывод команды =
CPU BOGOMIPS:      37241.08
REGEX/SECOND:      595252
HD SIZE:           3570.96 GB (/dev/md2)
BUFFERED READS:    165.42 MB/sec
AVERAGE SEEK TIME: 18.32 ms
FSYNCS/SECOND:     510.48
DNS EXT:           65.53 ms
DNS INT:           0.82 ms (sevo44.loc)

Теперь нам необходимо вывести только цифровое значение и для этого выполним команду:

pveperf / | grep 'FSYNCS/SECOND' | cut -c20-24
= вывод команды =
81.52

Параметры имеют следующие значения:

  • pveperf / -сама команда с указанием куда смантирован раздел;
  • grep ‘FSYNCS/SECOND’ — выбираем только значения из строки с этими данныи;
  • cut -c20-24 — выводи знаки с 20 по 24 от начала строки.

Создадим папку где будет находится скрипт bach, файл с данными и добавим необходимый скрипт.

mkdir /etc/zabbix/scripts

vim /etc/zabbix/scripts/fsyncs-bin.sh
= необходимые данные =
#!/bin/bash
pveperf / | grep 'FSYNCS/SECOND' | cut -c20-24 > /etc/zabbix/scripts/fsyncs.txt

По действию скрипта данные будут перезаписываться при каждом выполнении скрипта в файле /etc/zabbix/scripts/fsyncs.txt. Файл создавать не надо, так как при выполнении скрипта он создастся сам.

Сделаем файл запускаемым.

chmod +x /etc/zabbix/scripts/fsyncs-bin.sh

Проверим работу скрипта и правильность получения данных.

sh /etc/zabbix/scripts/fsyncs-bin.sh
= вывод пустой =

ls /etc/zabbix/scripts
= вывод команды =
fsyncs-bin.sh  fsyncs.txt

cat /etc/zabbix/scripts/fsyncs.txt
= вывод команды =
117.9

Скрипт создал файл и записал туда правильные данные. Запускаем скрипт несколько раз для полной уверенности в правильности записи данных.

Добавляем скрипт в cron для выполнения по расписанию.

vim /etc/crontab
= необходимый код =
*/3 * * * * root /etc/zabbix/scripts/fsyncs-bin.sh >/dev/null 2>&1

Например, я запускаю скрипт каждые 3 минуты.

Добавление параметров для Zabbix агента

Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо добавить в файл настройки необходимый параметр.

vim /etc/zabbix/zabbix_agentd.conf
= необходимый параметр =
UnsafeUserParameters=1

После необходимого параметра добавляем нужный код. В моем случае получился следующий код:

UserParameter=pve-1.fsyncs,cat /etc/zabbix/scripts/fsyncs.txt

Параметры имеют следующие значения:

  • UserParameter — параметр согласно которого агент понимает что с ним надо работать;
  • pve-1.fsyncs — название параметра который мы будем использовать при добавлении элемента данных;
  • cat /etc/zabbix/scripts/fsyncs.txt — команда и путь по которому брать данные.

Так как скрипт отрабатывает не быстро необходимо увеличить время ожидания.

vim /etc/zabbix/zabbix_agentd.conf 
= необходимый параметр = 
Timeout=15

Перезагружаем агент и проверим как он получает данные.

systemctl restart zabbix-agent

zabbix_get -s 127.0.0.1 -k pve-1.fsyncs
= вывод команды =
123.56

В случае получения ошибок

-bash: zabbix_get: command not found 
или
zabbix_get [20065]: Check access restrictions in Zabbix agent configuration

перейдите по ссылке и узнаете почему не работает zabbix_get.

Действия на сервере Zabbix

Добавление элемента данных

Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.

Необходимо заполнить следующие поля:

  • Имя — pve-1 fsyncs zfs;
  • Ключ — pve-1.fsyncs;
  • Тип информации — Числовой (с плавающей точкой);
  • Интервал обновления — 5m;
  • Период хранения истории — 1w;
  • Группы элементов данных — Filesystem.

Добавление тригера

Открываем необходимый узел и перейдя в «Тригеры» добавляем новый нажав «Создать тригер«.

Необходимо заполнить следующие поля:

  • Имя тригера — pve-1 fsyncs zfs;
  • Выражение — {pve-1:pve-1.fsyncs.last()}<200.

Добавление графика

Открываем необходимый узел и перейдя в «Графики» добавляем новый нажав «Создать график«.

Например, мне нравится выводить все параметры  fsyncs для всех серверов в один график.

Заключение

Вначале практики я контролировал параметры только при настройке систем. После того как я стал контролировать мне удалось максимально настроить дисковую систему на лучшую производительность. Параметр постоянно меняется от разных параметров системы и только контролируя его можно разобраться в чем проблема и принять верные решения.

Вот примерно такие графики вы можете наблюдать в период настройки.

Полезные ссылки: