Уведомления о проблемах в Oxidized
Разбор не сильно освещенных мест в довольно популярных продуктах несет с собой некоторое количество боли. Разработчики пишут документацию, считая некоторые вещи очевидными, но так бывает довольно не всегда и примеров с конфигурациями частенько бывает не хватает. В случае же с блогерами все тоже довольно грустно. Обзоры похожи один на другой и никто не старается копнуть вглубь и предложить что-то интересное или необычное.
Например есть довольно зрелый продукт для резервного копирования конфигурация — Oxidized. Разработка пришла на смену RANCID и заменила его чуть более чем полностью. В нем исторически есть набор фич, но развитие за годы замедлилось. Работает ведь отлично, зачем ломать? Но есть задачи немного в сторону.
В Oxidized нет возможности из коробки направить уведомлении об успешном или наоборот — не очень успешном процессе резервирования. Для этого можно использовать так называемые хуки. И вроде hook не слишком сложный, но важно помнить, что важен формат — yaml.
hooks:
failed:
type: exec
events: [node_fail]
cmd: 'echo "$OX_NODE_NAME,$OX_NODE_IP,$OX_JOB_STATUS" >> /home/oxidized/.config/oxidized/ox_node_failed.log'
На выходе мы получаем текстовый файл в формате csv и сможем еще уже отправить дальше. Например в телеграм путем не очень хитрых манипуляций:
#!/bin/bash
# Set the API token and chat ID - обозначаем токен и id чата
API_TOKEN="token"
CHAT_ID="chat-id"
# Parse file with error - объявляем путь к файлу
FILE=/opt/oxidized/ox_node_failed.log
# Checking if file is empty or not - проверяем, пустой ли файл
if [ -s $FILE ]
then
echo "File is not empty, do the JOB"
# Read file, prepare messade and send to Telegram - читаем файл, готовим сообщение и отправляем
while IFS=, read -r col1 col2 col3
do
MESSAGE=("<b>ERROR DETECTED</b> while backup on device $col1 with IP: $col2 reason: <b>$col3</b>. Check <a href=\"http://oxidized.url\">Oxidized</a>!");
echo $MESSAGE
# Use the curl command to send the message - отправляем сообщение
curl -s -X POST https://api.telegram.org/bot$API_TOKEN/sendMessage -d parse_mode="html" -d chat_id=$CHAT_ID -d text="$MESSAGE";
done < $FILE
# Clean file - очищаем файл, чтобы избежать повторной отправки
>$FILE
else
echo "File is empty, nothing to do"
exit;
fi
Теперь и на Github! ^_^