Files
homework10/README.md
2025-12-13 19:28:22 +03:00

4.5 KiB
Raw Permalink Blame History

Домашнее задание 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/