4.5 KiB
Домашнее задание 10
Bash скрипт анализирующий логи Nginx
Для выполнение задания используется Ubuntu Server 24.04
Суть работы скрипта
Пишем скрипт, который будет анализировать логи установленного nginx в каталоге /var/log/nginx по следующей схеме:
-
Анализируем access.log с момента прошлого запуска (если произошла ротация логов в файл access.log.1, то это так же учитывается), если запускается впервые то весь access.log:
- Ищем топ 10 ip по количеству запросов
- Ищем топ 10 запрашиваемых URL
- Количество ответов HTTP-кодов (с 200 по 400)
- Количество ответов HTTP-кодов (с 400 по 600)
-
Анализируем error.log с момента прошлого запуска (если произошла ротация логов в файл error.log.1, то это так же учитывается), если запускается впервые то весь error.log:
- Подсчитываем количество ошибок
-
Анализируем логи ошибок nginx в systemd с момента последнего запуска, если запускается впервые то за последние сутки:
- Если есть ошибки, то последние 3 мы отправим в отчете
-
Формируем отчет, который мы отправляем через telegram (тут решил уйти от стандартной почты, так как телеграм считаю более удобным вариантом).
-
Сохраняем в файле var.tmp количество строк в логах, именно так мы будет выяснять с какого места нам требуется анализировать логи при следующих запусках. Так же сохраняем дату последнего запуска
Так же скрипт не позволяет запускать 2 копии одновременно, создавая при запуске файл /tmp/check-log-nginx.lock, а после завершения удаляя его.
Пример сообщения, который высылает скрипт
Статисктика из логов Nginx начиная с 2025-12-13 16:18:01 по текущее время.
=============Статистика Nginx=============
===Топ 10 ip адресов: ===
192.168.50.16 7 запросов
===Топ 10 зпрашиваемых URL: ===
/bvaolvabh 4 запросов
/ 2 запросов
/favicon.ico 1 запросов
===✅Удачные запросы: ===
код 200 2 запросов
===❗️Неудачные запросы: ===
код 404 5 запросов
===Журнал error.log===
✅ Журнал не содержит ошибок с момента последней проверки
=============Ошибки systemd=============
✅С момента последней проверки, ошибок в systemd нет!
Создаем скрипт и задание
Создаем каталог в /opt где будет хранится наш скрипт
nimda@ubuntu-1:~$ sudo mkdir /opt/check-log-nginx
Копируем скопируем cкрипт check-log-nginx.sh в созданный каталог.
Даем права на запуск
nimda@ubuntu-1:~$ sudo chmod +x /opt/check-log-nginx/check-log-nginx.sh
Делаем в cron задание, которое будет выполняться каждые 4 часа но с 8 до 21.
Открываем cron
nimda@ubuntu-1:~$ sudo crontab -e
и добавляем строку
0 8-21/4 * * * /opt/check-log-nginx/check-log-nginx.sh
Все готово! Теперь каждые 4 часа с 8 до 21 нам пудет приходить статистика по nginx/