Мониторинг ошибок контейнера и уведомление в 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 минут.