скрипт для оповещение проблем в логах по ключевой фразе. и еще пару полезных советов
Когда у тебя свой сервер — будь то почтовый, веб-сервер или VPS — ты несёшь ответственность за его стабильность. И один из главных инструментов администратора — логи. Но читать их вручную каждый день — нереально. А пропустить важную ошибку — легко.
В этой статье я покажу, как просто и бесплатно настроить отслеживание ошибок в логах и получать уведомления, как только что-то пойдёт не так — без сложных систем вроде ELK или Graylog.
Логи — это «чёрный ящик» твоего сервера. В них фиксируются:
Например, так выглядит реальная ошибка из лога Dovecot:
Aug 21 14:18:11 pochta.example.com dovecot[1043]: imap(user@domain.com): Error: Mailbox INBOX: UID=13156: read failed: Cached message size larger than expected
Если такая ошибка появится у десятка пользователей — почта станет «глючить». Но если ты не в логах — ты об этом узнаешь только по жалобам.
Тебе не нужен огромный стек из Kibana, Elasticsearch и Logstash. Достаточно:
cronСоздай файл, например /usr/local/bin/check-errors.sh:
#!/bin/bash
# Путь к лог-файлу (может быть /var/log/mail.log, /var/log/syslog и др.)
LOG_FILE="/var/log/dovecot.log"
# Ключевые слова для поиска
KEYWORDS="Error: Mailbox INBOX|Cached message size|read failed|Disconnected for"
# Файл для хранения времени последней проверки
STATE_FILE="/tmp/last_check_ts"
TMP_ALERTS="/tmp/alerts.log"
# Получаем последнее время проверки
if [ -f "$STATE_FILE" ]; then
LAST_TS=$(cat "$STATE_FILE")
else
LAST_TS=$(date -d '10 minutes ago' '+%s')
fi
NOW_TS=$(date '+%s')
# Ищем ошибки за период
grep -E "$KEYWORDS" "$LOG_FILE" | grep "$(date -d @$LAST_TS '+%b %d')" > "$TMP_ALERTS"
# Если найдены совпадения — отправляем уведомление
if [ -s "$TMP_ALERTS" ]; then
MESSAGE="⚠️ Найдены ошибки в логах:\n\n$(cat $TMP_ALERTS)"
# Вариант 1: отправка на email
# echo -e "$MESSAGE" | mail -s "Алерт: Ошибки в логах" admin@yoursite.com
# Вариант 2: отправка в Telegram
TOKEN="ВАШ_ТОКЕН_БОТА"
CHAT_ID="ВАШ_CHAT_ID"
URL="https://api.telegram.org/bot$TOKEN/sendMessage"
curl -s -X POST $URL -d chat_id=$CHAT_ID -d text="$MESSAGE" > /dev/null
fi
# Обновляем время последней проверки
echo "$NOW_TS" > "$STATE_FILE"
sudo chmod +x /usr/local/bin/check-errors.sh
Открой crontab:
crontab -e
Добавь строку для проверки каждые 5 минут:
*/5 * * * * /usr/local/bin/check-errors.sh
Установи mailutils (Debian/Ubuntu):
sudo apt install mailutils
Настрой SMTP через ssmtp или msmtp, чтобы письма уходили на твой Gmail, Yandex и т.п.
Это удобнее: уведомления приходят мгновенно, не зависят от почтовых фильтров.
CHAT_ID (можно через @get_id_bot)Authentication failure, Connection refused, Out of memory.df -h и алерт при заполнении диска на 90%.systemctl restart dovecot.Не просто читай алерты — действуй:
Сложные системы мониторинга — это здорово, но часто избыточно. Даже на одном сервере можно настроить надёжную и простую систему оповещений за 20 минут.
Главное — не ждать, пока пользователи начнут жаловаться. Настраивай алерты сейчас, пока всё работает. Потому что когда что-то сломается — ты будешь первым, кто об этом узнает.
Маленький скрипт сегодня — спокойствие завтра.
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!