Обработка и ротация файлов журналов Nginx
Веб‑сервер 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.