Найти в Дзене

Организуем мониторинг логов nginx с отправкой в телеграмм оповещений простым скриптом

На небольших проектах, зачастую, не требуется поднимать elasticsearch, настраивать kibana и logstash, достаточно и простого скрипта который будет проверять логи, искать в них ошибки по паттерну, записывать в лог и отправлять , например, в телеграмм. Именно такой скрипт мне и пришлось реализовать, когда встала задача отследить все 500, 502, 504 ошибки и проанализировать, почему они возникают (проблема низкой производительности сервера с Opencart 3). Результат получился примерно такой: Ссылка на сам скрипт. Для того, чтобы после ротации логов файлы корректно подхватывались - также написал простой sh, останавливающий nginx и после запускающий его (nginx крутится в docker-swarm). #!/bin/bash set -e # Прерывать выполнение при ошибках # Принудительная ротация логов /usr/sbin/logrotate -f /etc/logrotate.conf # Удаление текущего стека nginx /usr/bin/docker stack rm nginx # Ожидание, пока стек полностью удалится (опционально, но желательно) echo "Ожидаем завершения удаления стека nginx..." whi

На небольших проектах, зачастую, не требуется поднимать elasticsearch, настраивать kibana и logstash, достаточно и простого скрипта который будет проверять логи, искать в них ошибки по паттерну, записывать в лог и отправлять , например, в телеграмм. Именно такой скрипт мне и пришлось реализовать, когда встала задача отследить все 500, 502, 504 ошибки и проанализировать, почему они возникают (проблема низкой производительности сервера с Opencart 3).

Результат получился примерно такой:

Алерты в телеграмме
Алерты в телеграмме

Ссылка на сам скрипт.

Для того, чтобы после ротации логов файлы корректно подхватывались - также написал простой sh, останавливающий nginx и после запускающий его (nginx крутится в docker-swarm).

#!/bin/bash
set -e # Прерывать выполнение при ошибках
# Принудительная ротация логов
/usr/sbin/logrotate -f /etc/logrotate.conf
# Удаление текущего стека nginx
/usr/bin/docker stack rm nginx
# Ожидание, пока стек полностью удалится (опционально, но желательно)
echo "Ожидаем завершения удаления стека nginx..."
while docker stack ls | grep -q nginx; do
sleep 1
done
# Повторное развёртывание стека
/usr/bin/docker stack deploy -c /home/docker-admin/docker/infra/nginx/docker-compose.yml nginx

Оба скрипта я настроил на запуск по крону. Один - рано утром (ротация логов). Второй - каждую минуту (мониторинг).

Если требуется пробежать все актуальные логи nginx ещё раз - просто удалите файлы со смещениями и скрипт начнёт работу с начала.

Надеюсь, кому-то будет полезно.