Мониторинг состояния ZFS pool и отправка уведомления в Telegram

Нет ничего страшнее, чем не заметить как развалился ZFS пул, или массив дисков (кому как удобнее) … Особенно когда речь идет о важных данных. Недавно был в такой ситуации, и решил настругать скрипт для мониторинга.

#! /bin/bash

LOGFILE="/home/bear/zpool.log"
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`

POOLSTATUS=$(/sbin/zpool status | /bin/grep 'state:' | /usr/bin/cut -c 9-)
/bin/echo "$TIMESTAMP $POOLSTATUS" >> $LOGFILE


if [ "$POOLSTATUS" != ONLINE ]
then
  /usr/bin/wget -q -O /dev/null 'https://api.telegram.org/bot831187410:AAEqggdfgr4aEdy3vIUFFuE68vk/sendMessage?chat_id=385210248&text=ZFS status: '$POOLSTATUS
else
  exit 0
fi

Данный скрипт при каждом запуске записывает в лог файл /home/bear/zpool.log дату и состояние пула на момент проверки.

Если состояние НЕ соответствует ONLINE (считай авария, или ресильвер в процессе) — он отправляет сообщение в telegram, и в этом сообщении пишет статус на момент проверки.
Как настроить отправку сообщений в telegram, прочитать можно вот тут

Запуск данного скрипта делаем в crontab -e

1     12      *       *       *       sh /home/bear/zpool-telegram >>/var/log/cronrun 2>&1

Часто запускать проверку смысла нет. Обратите внимание что иногда ZFS делает самообслуживание (ресильвер), и если скрипт будет запущен в этот момент, будет ложная тревога.

Выражаю благодарность своему другу Алексею за помощь в отладке этого скрипта.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *