Назад к задачам
Junior — Middle+
4

Обработка и ротация файлов журналов Nginx

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Веб‑сервер Nginx сохраняет запросы в файл /var/log/nginx/access.log. Каждый день происходит ротация, поэтому в каталоге /var/log/nginx появляются несколько файлов:

  • /var/log/nginx/access.log – текущий журнал;
  • /var/log/nginx/access.log.1 – журнал за предыдущий день;
  • /var/log/nginx/access.log.2 – журнал за два дня назад;
  • /var/log/nginx/access.log.3 и т.д.

Ротация запускается в полночь, но размеры файлов могут сильно различаться – в зависимости от нагрузки за день. Требуется написать утилиту, которая будет сканировать все файлы журнала (access.log и *access.log.**) в указанной директории, искать в них строки, соответствующие заданному шаблону (например, при шаблоне «favicon.ico» следует вывести все строки, где встречается «favicon.ico»).

Найденные строки необходимо сохранять в файл /var/log/nginx/parsed/lines.txt. Размер этого файла не должен превышать 200 МБ. Как только размер достигает лимита, файл должен быть переименован в /var/log/nginx/parsed/lines.txt.1 (при последующих ротациях – в .2, .3 и т.д.), а затем создать новый пустой /var/log/nginx/parsed/lines.txt и продолжить запись.

Таким образом, при каждом достижении 200 МБ происходит очередная ротация результата, формируя последовательную нумерацию файлов в каталоге parsed.