Про настройку уведомлений о создании бэкапов в Telegram

от автора

На одном из проектов, в которых мы участвовали, отсутствовал корпоративный мессенджер. Поэтому было принято решение, что нужно получать уведомления о создании бэкапов GitLab в Telegram. 

Что нужно для этого предпринять?

В первую очередь займемся ботом с минимальными возможностями. Для этого находим специальный бот BotFather, через который и будет происходить все управление, и нажимаем на кнопку “start” и видим следующее:

I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual.   You can control me by sending these commands:  /newbot - create a new bot  /mybots - edit your bots  Edit Bots  /setname - change a bot's name  /setdescription - change bot description  /setabouttext - change bot about info  /setuserpic - change bot profile photo  /setcommands - change the list of commands  /deletebot - delete a bot  Bot Settings  /token - generate authorization token  /revoke - revoke bot access token  /setinline - toggle inline mode  /setinlinegeo - toggle inline location requests  /setinlinefeedback - change inline feedback settings  /setjoingroups - can your bot be added to groups?  /setprivacy - toggle privacy mode in groups   Web Apps  /myapps - edit your web apps  /newapp - create a new web app  /listapps - get a list of your web apps  /editapp - edit a web app  /deleteapp - delete an existing web app  Games  /mygames - edit your games  /newgame - create a new game  /listgames - get a list of your games  /editgame - edit a game  /deletegame - delete an existing game

Для создания бота выбираем опцию /newbot - create a new bot, указываем имя и username, который должен заканчиваться на bot. 

На следующее сообщение, которое пришлет BotFather, нужно обратить особенно пристальное внимание. Там содержится HTTP API access token, который будет использоваться в дальнейшем скрипте. Именно этот токен позволяет полностью контролировать бот. С его хранением и передачей стоит быть предельно внимательными.

Уже после создания бота его можно смело модифицировать: добавить описание, аватарку, управление токенами и так далее. 

Затем нужно создать telegram-группу, куда добавляем бот и членов команды, которым важны уведомления. И приступаем к следующему шагу 一 отправляем сообщение следующего вида  @your_bot /start и переходим по ссылке https://api.telegram.org/bot<YourBOTToken>/getUpdates.

В ссылку не забудьте вставить access token вашего бота. В полученном ответе находим графу chat, из которой копируем id и сохраняем его. 

Сам бэкап создается bash-скриптом и раскатывается через ansible. Поэтому в представленном далее коде могут часть встречаться шаблоны jinja2. 

 Следующий шаг 一 модификация скрипта, чтобы тот смог присылать уведомления в группу. Первое, что добавляем 一 ID чата, в который отправляем сообщение и acess token для нашего бота:

  • 1

  • 2

TG_CHAT_ID="{{ gitlab_backup_chat_id }}"

TG_BOT_TOKEN="{{ gitlab_backup_tg_token }}"

Далее 一 функция по отправке сообщений в Telegram:

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

# Send message to telegram function

sendTelegram() {

    local MESSAGE="$1"

    curl -s -X POST "https://api.telegram.org/bot$TG_BOT_TOKEN/sendMessage" \

         -d "chat_id=$TG_CHAT_ID" \

         -d "text=$MESSAGE" > /dev/null

}

Каждую из выполняемых частей скрипта мы сделали с неким условием. Например, с проверкой свободного места на диске:

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

# Check for free disk space

FREE_SPACE=$(df "$BACKUP_DIR" | awk 'NR==2 {print $4}')

if [ "$FREE_SPACE" -lt "$THRESHOLD" ]; then

  log "[ERROR] Not enough free space in $TARGET_DIR. Minimum required: 60 GB. Gitlab backup aborted."

  sendTelegram "[ERROR] Not enough free space in $TARGET_DIR. Minimum required: 60 GB. Gitlab backup aborted."

  exit 1

fi

Показываем создание самого бэкапа:

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

# Create a backup

log "[INFO] Starting GitLab backup creation."

docker exec -t gitlab gitlab-backup create >> "$LOG_FILE" 2>&1

if [ $? -ne 0 ]; then

  log "[ERROR] GitLab backup creation failed."

  sendTelegram "[ERROR] GitLab backup creation failed."

  exit 1

fi

И про загрузку бэкапа в бакет:

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

s3cmd put "$LATEST_BACKUP" s3://$YC_BUCKET/$YC_FOLDER/ >> "$LOG_FILE" 2>&1

if [ $? -ne 0 ]; then

  log "[ERROR] Failed to upload backup to Yandex Cloud bucket $YC_BUCKET."

  sendTelegram "[ERROR] Failed to upload backup to Yandex Cloud bucket $YC_BUCKET."

  exit 1

fi

За счет того, что все создано через условия, можно своевременно получать уведомления о том, что что-то пошло не так буквально на каждом этапе скрипта. 

Например, мы посылаем сообщения о том, что бэкап успешно создался, каждый день, хотя это и не обязательно. А другой вариант 一 настройка сообщений исключительно на ошибки. 


ссылка на оригинал статьи https://habr.com/ru/articles/927542/


Комментарии

Добавить комментарий

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