Пост

Мониторинг ошибок контейнера и уведомление в Telegram

Приветcтвую 👋! Вот вам пример моего рабочего bash-скрипта для мониторинга ошибок в контейнере Docker и отправки уведомлений в Telegram с подробными комментариями:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

CONTAINER_NAME="integration-service"           # Имя контейнера для мониторинга
ERROR_KEYWORD="java.net.SocketTimeoutException" # Ключевое слово ошибки для поиска
LOG_FILE="/var/log/container_errors.log"        # Файл для записи найденных ошибок

TELEGRAM_BOT_TOKEN="************:**********"   # Токен Telegram-бота
TELEGRAM_CHAT_ID="-*********"                  # ID чата Telegram для уведомлений

# Получаем логи контейнера за последние 3 минуты и ищем ошибки
# Если ошибка найдена, записываем её в лог-файл

docker logs --since 3m "$CONTAINER_NAME" 2>/dev/null | grep -o "$ERROR_KEYWORD" >> "$LOG_FILE"

# Проверяем, есть ли ошибки в лог-файле
if [ -s "$LOG_FILE" ]; then
  ERROR_MESSAGE="⚠️ Errors in $CONTAINER_NAME: $(cat $LOG_FILE)"  # Формируем сообщение для Telegram
  # Отправляем сообщение через Telegram Bot API
  curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
    -d chat_id="$TELEGRAM_CHAT_ID" \
    -d text="$ERROR_MESSAGE"
  : > "$LOG_FILE"   # Очищаем лог-файл после отправки
fi

Описание работы скрипта:

  • Мониторит логи указанного контейнера Docker за последние 3 минуты.
  • Ищет ошибки по ключевому слову (например, java.net.SocketTimeoutException).
  • Если ошибки найдены, отправляет уведомление в Telegram и очищает лог-файл.
  • Используйте свой токен Telegram-бота и chat_id.

Добавление скрипта в Cron для запуска каждые 5 минут:

Откройте crontab для редактирования:

1
crontab -e

Добавьте строку:

1
*/5 * * * * /path/to/your/script.sh

Где /path/to/your/script.sh — путь к вашему скрипту.

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

© Andrey. Некоторые права защищены.

Использует тему Chirpy для Jekyll