Разберем, как настроить отправку сообщений в Telegram о новых ошибках из логов Nginx с помощью простого Bash-скрипта.
1. Настройка Telegram-бота
Для начала создайте Telegram-бота, чтобы использовать его для отправки уведомлений. Это можно сделать через @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.
1. Откройте редактор crontab:
crontab -e
2. Добавьте строку, чтобы скрипт запускался каждые 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
Если настройки сделаны верно, вы получите уведомление в Telegram с текстом ошибки.