# Домашнее задание 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, а после завершения удаляя его. Пример сообщения, который высылает скрипт ```bash Статисктика из логов 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 где будет хранится наш скрипт ```bash nimda@ubuntu-1:~$ sudo mkdir /opt/check-log-nginx ``` Копируем скопируем [cкрипт check-log-nginx.sh](check-log-nginx.sh) в созданный каталог. Даем права на запуск ```bash nimda@ubuntu-1:~$ sudo chmod +x /opt/check-log-nginx/check-log-nginx.sh ``` Делаем в cron задание, которое будет выполняться каждые 4 часа но с 8 до 21. Открываем cron ```bash nimda@ubuntu-1:~$ sudo crontab -e ``` и добавляем строку ```bash 0 8-21/4 * * * /opt/check-log-nginx/check-log-nginx.sh ``` Все готово! Теперь каждые 4 часа с 8 до 21 нам пудет приходить статистика по nginx/