Домашнее задание 10

Bash скрипт анализирующий логи Nginx

Для выполнение задания используется Ubuntu Server 24.04

Суть работы скрипта

Пишем скрипт, который будет анализировать логи установленного nginx в каталоге /var/log/nginx по следующей схеме:

  1. Анализируем access.log с момента прошлого запуска (если произошла ротация логов в файл access.log.1, то это так же учитывается), если запускается впервые то весь access.log:

    • Ищем топ 10 ip по количеству запросов
    • Ищем топ 10 запрашиваемых URL
    • Количество ответов HTTP-кодов (с 200 по 400)
    • Количество ответов HTTP-кодов (с 400 по 600)
  2. Анализируем error.log с момента прошлого запуска (если произошла ротация логов в файл error.log.1, то это так же учитывается), если запускается впервые то весь error.log:

    • Подсчитываем количество ошибок
  3. Анализируем логи ошибок nginx в systemd с момента последнего запуска, если запускается впервые то за последние сутки:

    • Если есть ошибки, то последние 3 мы отправим в отчете
  4. Формируем отчет, который мы отправляем через telegram (тут решил уйти от стандартной почты, так как телеграм считаю более удобным вариантом).

  5. Сохраняем в файле 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

Копируем скопируем рипт 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/

Description
No description provided
Readme 33 KiB
Languages
Shell 100%