Простой скрипт, который будет периодически проверять файл логов Nginx на наличие новых ошибок и отправлять их в Telegram. Вот как это можно сделать.
Шаг 1: Создание бота в Telegram
Создайте бота в Telegram, чтобы сделать нового бота и получить токен API. Используйте: @BotFather
Обязательно: после создания бота напишите ему или нажмите на команду /start. Это необходимо для того, чтобы бот вас запомнил и смог отправлять вам сообщения.
Получите Chat ID. Используйте: @myidbot
Шаг 2: Скрипт для отправки уведомлений
Создайте Bash-скрипт. Этот скрипт будет проверять логи Nginx и отправлять ошибки в Telegram. Скрипт написан с уведомлениями об ошибках.
#!/bin/bash
# Конфигурация
BOT_TOKEN="ваш_токен_бота"
CHAT_ID="ваш_chat_id"
LOG_FILE="/var/log/nginx/error.log"
LAST_POSITION_FILE="/var/tmp/nginx_log_position"
# Проверка существования файла позиции
if [ ! -f "$LAST_POSITION_FILE" ]; then
echo "Файл позиции не найден. Создаю новый файл: $LAST_POSITION_FILE"
echo "0" > "$LAST_POSITION_FILE"
fi
# Получение последней позиции в лог-файле
LAST_POSITION=$(cat $LAST_POSITION_FILE 2>/dev/null || echo "0")
# Проверка новых строк в лог-файле
NEW_LINES=$(tail -n +$((LAST_POSITION + 1)) $LOG_FILE 2>/dev/null)
# Если есть новые строки, отправляем их в Telegram
if [ ! -z "$NEW_LINES" ]; then
echo "$NEW_LINES" | while read -r LINE; do
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d chat_id=$CHAT_ID -d text="$LINE"
done
# Обновляем позицию
wc -l < $LOG_FILE > $LAST_POSITION_FILE
else
echo "Новых ошибок не найдено или лог-файл недоступен."
fi
Сделайте скрипт исполняемым:
chmod +x check_nginx_errors.sh
Шаг 3: Автоматизация проверки
Настройте cron. Чтобы скрипт проверял логи регулярно, добавьте его в cron.
crontab -e
Добавьте следующую строку для выполнения скрипта каждые 5 минут:
*/5 * * * * /путь/к/вашему/check_nginx_errors.sh
Заключение
Теперь ваш скрипт будет каждые 5 минут проверять файл логов Nginx на наличие новых ошибок и отправлять их в Telegram. Это простой и эффективный способ оперативно получать уведомления о проблемах на вашем сервере. Не забудьте протестировать скрипт, чтобы убедиться, что он работает корректно, и при необходимости адаптируйте его под ваши нужды.
Тестирование:
Добавьте принудительно ошибку в файл логов.
echo "$(date) [error] 12345#0: *1 open() \"/path/to/nonexistent/file\" failed (2: No such file or directory)" >> /var/log/nginx/error.log
Это добавит строку с текущей датой и временем, с ошибкой, похожей на ту, которую Nginx генерирует, когда не может найти файл.
Если данные конфигурации введены правильно, вы получите уведомления от своего бота.
Что еще можно добавить в данный скрипт
- Фильтрация ошибок по уровню
- Логирование отправленных уведомлений
- Настройка частоты уведомлений
- Конфигурационный файл
- Алерты по ключевым словам
- Поддержка нескольких логов
- Интеграция с другими мессенджерами
- Web-интерфейс для управления
- Оптимизация производительности
- Работа без cron
Программирую в тишине, пока баги не заговорят.
Комментарии