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

106 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Домашнее задание 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
```
Копируем скопируем [рипт 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/