Прямой ответ
Журналы приложений занимают объём пропорционально времени работы, поэтому ротация с последующим сжатием ограничивает рост. Сжатие применяется к закрытому файлу, а не к активному.
# /etc/logrotate.d/app
/var/log/app/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 app app
}
| Директива | Действие |
|---|---|
rotate N |
Число сохраняемых архивных файлов |
compress |
Сжатие закрытых файлов |
delaycompress |
Сжатие начиная со следующего цикла |
missingok |
Отсутствие файла не считается ошибкой |
delaycompress откладывает сжатие на один цикл, поскольку процесс может продолжать писать в файл после ротации. Сжатие активного файла приводит к потере записей.
О настройке уровней и структуры журналов — в статье про структурированные логи.
Поиск по архиву и срок хранения
Два требования определяют пригодность архива журналов для разбора инцидента.
Поиск без распаковки. Утилиты поиска по сжатым файлам позволяют найти запись, не распаковывая весь архив. Без такой возможности разбор инцидента требует распаковки всех файлов периода.
Срок хранения. Архивные журналы хранятся определённое время, после которого удаляются. Срок определяется требованием к разбору инцидентов и объёмом хранения; о сроках — в статье про хранение данных.
Практическое следствие: журнал, который невозможно прочитать без распаковки всего архива, замедляет разбор инцидента.
Отдельный аспект — объём хранения. Текстовые журналы содержат повторяющиеся шаблоны, поэтому коэффициент сжатия высокий. Архив за длительный период занимает значительно меньше места, чем активные файлы за тот же период.
Три признака некорректной ротации со сжатием.
Сжатие активного файла. Процесс продолжает писать в файл, поэтому часть записей теряется.
Отсутствие срока хранения. Архивные файлы накапливаются без удаления, поэтому объём хранения растёт.
Отсутствие способа поиска. Разбор инцидента требует распаковки всех файлов периода.
О переводе журналов в долгосрочное хранение — в статье про архивацию данных: архив журналов упаковывается и перемещается в хранилище с меньшей стоимостью.
Метод сжатия влияет на скорость поиска, поскольку распаковка выполняется при каждом обращении; о выборе метода — в статье про алгоритмы сжатия.
Влияние сжатия на разбор инцидента
Сжатие архивных журналов изменяет процедуру разбора инцидента, поэтому два аспекта требуют внимания.
Поиск по периоду. Разбор инцидента требует просмотра журналов за определённый период, который может охватывать несколько архивных файлов. Поиск по сжатым файлам выполняется без полной распаковки, поэтому время разбора сокращается.
Порядок записей. Архивные файлы соответствуют периодам ротации, поэтому восстановление хронологии выполняется по именам файлов. Отсутствие последовательной нумерации либо метки периода усложняет восстановление порядка.
Практическое следствие: процедура разбора инцидента проверяется на архивных данных, а не только на активном журнале.
Отдельный аспект — объём распакованных данных. Распаковка всех файлов периода может занять объём, превышающий свободное место на диске, поэтому поиск выполняется по сжатым файлам без полной распаковки.
Практика: настройка ротации и сжатия журналов
1. Ротируйте по периоду либо по размеру. Периодическая ротация обеспечивает предсказуемость, ротация по размеру ограничивает объём файла.
2. Отложите сжатие на один цикл. Процесс может продолжать писать в файл после ротации, поэтому сжатие активного файла приводит к потере записей.
3. Задайте число сохраняемых файлов. Параметр определяет срок хранения архива на диске.
4. Обеспечьте поиск по сжатым файлам. Разбор инцидента не должен требовать распаковки всего архива.
5. Контролируйте объём хранения. Архивные файлы накапливаются, поэтому срок хранения задаётся явно.
6. Проверяйте права доступа. Файлы журналов содержат данные о работе системы, поэтому доступ ограничивается.
7. Проверяйте результат ротации. Отсутствие архивных файлов указывает на ошибку конфигурации.
Рекомендации:
- Различайте ротацию и удаление. Ротация закрывает файл и начинает новый, удаление выполняется по истечении срока хранения.
- Учитывайте скорость поиска по сжатому файлу. Метод сжатия влияет на время распаковки при поиске.
- Не храните журналы только на диске приложения. Долгосрочное хранение выполняется в отдельном хранилище.
- Проверяйте конфигурацию после изменения. Ошибка в конфигурации ротации обнаруживается по отсутствию архивных файлов.
- Фиксируйте срок хранения в документации. Срок определяется требованием к разбору инцидентов, а не удобством.
Практический сценарий: записи журнала терялись после ротации
Контекст: часть записей журнала за определённый период отсутствовала, при этом ротация выполнялась по расписанию.
- Диагностика. Сжатие выполнялось сразу после ротации, при этом процесс продолжал писать в прежний файл по открытому дескриптору. Записи, внесённые после ротации и до переоткрытия файла, оказались в сжатом файле, который не перечитывался.
- Причина. Сжатие активного файла выполнялось без задержки. Процесс не переоткрывал файл сразу, поэтому часть записей попадала в уже сжатый файл и не была доступна при обычном чтении.
- Действия. (а) Добавили отложенное сжатие на один цикл, чтобы файл закрывался до сжатия; (б) настроили сигнал переоткрытия файлов после ротации, чтобы процесс начинал писать в новый файл; (в) проверили наличие архивных файлов и их читаемость; (г) добавили поиск по сжатым файлам для разбора инцидентов без распаковки; (д) зафиксировали срок хранения архива и удалили файлы сверх срока.
- Результат. Записи не теряются при ротации, а поиск по архиву выполняется без распаковки всех файлов.
Вывод: сжатие активного файла приводит к потере записей, поскольку процесс продолжает писать по открытому дескриптору. Отложенное сжатие и переоткрытие файла после ротации исключают потерю.
FAQ
Почему сжатие откладывается на один цикл? Процесс может продолжать писать в файл после ротации по открытому дескриптору. Сжатие активного файла приводит к потере записей.
Как искать по сжатым журналам? Утилитами поиска по сжатым файлам, которые распаковывают данные на лету. Разбор инцидента не требует распаковки всего архива.
Сколько хранить архивные журналы? Определяется требованием к разбору инцидентов и объёмом хранения. Срок задаётся числом сохраняемых файлов либо периодом.
Влияет ли метод сжатия на поиск? Да, скорость распаковки определяет время поиска по архиву. Метод с быстрой распаковкой ускоряет разбор инцидента.
Источники: logrotate, Zstandard, zstdgrep — ссылки в шапке.