Блог / Статьи

Полезная информация для вашего хостинга

Как получать уведомления об ошибках Nginx в Telegram

Как получать уведомления об ошибках Nginx в Telegram

Разберем, как настроить отправку сообщений в 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 с текстом ошибки.