Заметки и замечания, рассказы и пересказы

Уведомления о проблемах в 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! ^_^

Отправить
Поделиться