Простой скрипт, который будет периодически проверять файл логов 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
Программирую в тишине, пока баги не заговорят.
Комментарии