Давайте будем честными — сервер без ошибок не бывает. Даже если вы настраиваете всё идеально, рано или поздно что-то да сломается. То файл не найдётся, то скрипт не отработает, то ресурс недоступен. Главное тут — не впадать в панику и как можно быстрее заметить проблему, чтобы сразу её починить. Но ведь никто не хочет постоянно сидеть в терминале, открывать логи и выискивать эти ошибки вручную, правда? Гораздо удобнее, если сервер сам вам напишет в Telegram, как только что-то пошло не так.
Сейчас расскажу, как это настроить всего за 15–20 минут.
Первое, что нам нужно — это бот, который будет присылать вам уведомления.
Как создать бота:
1. Откройте Telegram и найдите там @BotFather — это такой официальный «папа всех ботов».
2. Напишите ему команду /newbot и следуйте инструкциям. Придумайте имя и логин для вашего бота — это займёт пару минут.
3. В конце вам выдадут токен API — это такая длинная строчка из букв и цифр. Скопируйте её и сохраните куда-нибудь, она нам ещё пригодится.
Важный момент:
После создания обязательно напишите что-нибудь вашему новому боту — например, просто /start.
Это нужно для того, чтобы Telegram понял, что вы с этим ботом знакомы и разрешил ему писать вам сообщения.
Как узнать свой Chat ID:
1. Найдите ещё одного бота — @myidbot.
2. Напишите ему /getid, и он тут же отправит вам ваш Chat ID. Запомните или сохраните это число — оно нужно, чтобы бот знал, куда именно слать уведомления.
Теперь сделаем так, чтобы сервер мог «разговаривать» с вашим ботом. Для этого напишем простой скрипт на Bash. Он будет заглядывать в лог ошибок Nginx и отправлять вам всё новое, что там появилось.
Скопируйте этот код в файл, например, check_nginx_errors.sh:
#!/bin/bash
BOT_TOKEN="yourtoken"
CHAT_ID="your_chat_id"
LOG_FILE="/var/log/nginx/error.log"
LAST_POSITION_FILE="/var/tmp/nginx_log_position"
if [ ! -f "$LAST_POSITION_FILE" ]; then
echo "Position file not found. Creating a new one: $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)
if [ -n "$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 "No errors"
fi
Не забудьте сделать его исполняемым:
chmod +x check_nginx_errors.sh
Чтобы скрипт не приходилось запускать вручную, добавим его в cron — это такая встроенная в Linux штука, которая может выполнять команды по расписанию.
1. Откройте cron на редактирование:
crontab -e
2. Добавьте туда строчку, чтобы скрипт запускался каждые 5 минут:
*/5 * * * * /full/path/check_nginx_errors.sh
Обязательно укажите полный путь, иначе cron просто не найдёт ваш скрипт.
Чтобы убедиться, что система работает, давайте подбросим в лог что-нибудь похожее на настоящую ошибку:
echo "$(date) [error] 12345#0: *1 open() \"/path/to/nonexistent/file\" failed (2: No such file or directory)" >> /var/log/nginx/error.log
Через пару минут вы должны получить сообщение в Telegram. Если пришло — поздравляю, всё настроено как надо!
Теперь вы всегда будете в курсе свежих ошибок вашего Nginx, где бы вы ни находились. И не надо каждый раз лезть на сервер и копаться в логах. Всё само приходит в Telegram.
Если хотите, можно доработать скрипт под себя — добавить фильтры, форматирование, или, например, отправлять уведомления в общий чат команды. Всё в ваших руках.