Настройка Log Rotation и Retention политик: инструкция DevOps

Логи растут быстрее, чем диск, и в пик нагрузки самое нужное теряется первым. Мы настраиваем ротацию и хранение логов под ключ: разбираем текущие правила, закрываем пробелы и передаём регламент вашей команде. Глубина разбора перестаёт зависеть от везения.
Часто задаваемые вопросы

Почему логи переполняют диск: где ломается log rotation

Бесконтрольный рост файлов логов выглядит безобидно, пока есть свободное место: сервис открывает файл на дозапись и держит дескриптор, а размер увеличивается на каждый запрос, ошибку и запись журнала. Пока ротация настроена, файл закрывается по размеру или по календарю — при её отсутствии единственным предохранителем остаётся свободное место на разделе. Типовая история: включили подробное логирование на время разбора инцидента, забыли вернуть уровень обратно, и через сутки диск заполнен.

Первым делом при нехватке места на диске деградирует не сервис, а запись: приложение получает от файловой системы отказ по месту, буферы журнала перестают сбрасываться, часть сообщений теряется, а при необработанном исключении падает и сам процесс. Сбой записи логов редко выглядит как авария — чаще это «сервис отвечает, но ничего не логирует», и разбор инцидента приходится вести вслепую. Отдельная ловушка — удаление файла вручную: место не возвращается, пока процесс держит открытый дескриптор.

В контейнерах картина та же, только файл на каждый контейнер создаёт драйвер журналирования, и без ограничений по размеру и числу файлов он растёт вместе с нагрузкой.

Базовая страховка — logrotate: ротация по размеру и календарю, лимит на число хранимых архивов, сжатие и корректное переоткрытие дескриптора. Дальше разбираем, как это закрывается на уровне системы и сервисов: от политик хранения до контроля занятого места и оповещений о переполнении диска логами.

Что даёт управляемая ротация и хранение логов

Управляемая ротация — это не «включить logrotate и забыть», а набор правил: по каким условиям файл закрывается и сжимается, сколько копий живёт локально, что уходит в долговременное хранилище и по какому сроку удаляется. Правила формулируются в размерах и времени, а не «когда станет много», поэтому объём логов в реестре перестаёт быть сюрпризом, а политика хранения логов становится проверяемой, а не декларативной.

Что видно в метриках после перевода на управляемую схему:

  • Занятое место на узле колеблется в известном коридоре: ротация по размеру срабатывает раньше, чем раздел упирается в предел, и класс отказов «сервис упал из-за переполненного диска» уходит из статистики.
  • Сжатые архивы занимают в разы меньше исходного объёма, поэтому глубина истории растёт без роста хранилища.
  • Время разбора инцидента сокращается: нужный интервал лежит в одном файле с понятным именем и меткой периода, а не размазан по десяткам неповёрнутых логов.
  • Поиск по архивам остаётся быстрым, потому что границы файлов совпадают с границами суток и часовых поясов сервиса.
  • Удаление идёт по сроку, а не по остатку места, — очистка перестаёт быть аварийной операцией под нагрузкой.
  • Настройки лежат в системе управления конфигурацией, поэтому новый узел получает ту же политику без ручной правки.

Итог — предсказуемый объём реестра и стабильность сервиса: место на диске перестаёт быть переменной, влияющей на доступность, а дежурный при разборе инцидента сразу знает, где искать данные. Дальше разберём, какие параметры задают эти границы и как их проверять.

Сравнение подходов к log rotation: размер, время, отправка

Предсказуемость ротации — это выбор между предсказуемым размером файла и предсказуемым моментом среза. Ротация по размеру срабатывает, когда файл перешёл заданный порог, поэтому место на диске не закончится даже при всплеске нагрузки. Ротация по расписанию привязана к минутам или часам, и тогда файл за нужный период лежит одним куском — с ним удобно сопоставлять выкладку новой версии или разбор инцидента.

Обе схемы закрывают только первую половину задачи — освободить место. Вторая половина в том, что делать со срезанным файлом: сжимать на месте, складывать в архив или сразу отправлять в внешнее хранилище логов, где поиск идёт по всем узлам сразу, а не по каждому по очереди.

Вариант Когда подходит Ограничения
Ротация по размеру Ровный поток записей, плотно занятый диск, узлы с жёсткой квотой Момент среза непредсказуем: при пике файл дробится на десятки мелких частей
Ротация по расписанию Регулярная нагрузка, аудит, привязка логов к окнам выкладки Между срезами место может закончиться; в тихие часы появляются пустые файлы
Отправка в внешнее хранилище Много узлов, нужен единый поиск и срок хранения по классам данных Зависит от канала и самого хранилища — на месте всё равно нужен буфер на время недоступности

На практике берут сочетание: срез по размеру как страховка от переполнения, срез по расписанию как точка отсчёта для разбора, сжатие старых логов и выгрузка в внешнее хранилище с политикой хранения. Тогда архивация логов перестаёт быть ручной операцией, а срок хранения задаётся правилом, а не памятью дежурного.

Порядок внедрения: от аудита до передачи регламента

Ротация «на глаз» даёт один из двух исходов: диск переполняется в самый неудачный момент или логи инцидента удалены раньше, чем до них дошли руки. Поэтому идём этапами — от инвентаризации источников до регламента для дежурной смены.

  1. Аудит источников логов. Фиксируем, кто пишет на диск: путь, интенсивность, поведение при всплесках, кто держит файл открытым. Отдельно разбираем контейнеры и системный журнал — у них своя логика хранения.
  2. Схема ротации и окна хранения. Для каждой группы выбираем порог по размеру или интервал, число хранимых копий и сжатие. Классы разводим: аудит и доступы храним дольше, отладочные — несколько суток.
  3. Настройка правил. Конфигурации в формате logrotate по группам: сжатие архивов, действия после ротации для переоткрытия дескриптора, копирование с усечением там, где процесс не реагирует на сигнал, права на каталоги.
  4. Проверка под нагрузкой. Прогоняем поток выше пикового: правило срабатывает на пороге, строки не теряются на стыке файлов, сжатие не блокирует запись, старые копии действительно удаляются.
  5. Наблюдаемость. Алерты на свободное место, возраст последнего файла и ошибки ротации — иначе сбой заметят по недоступному сервису, а не по метрике.
  6. Передача регламента. Документ и разбор с дежурной сменой: где лежат логи, что делать при переполнении, как безопасно освободить место и откатить правило.

Артефакты внедрения: конфигурации, схемы, регламенты

Внедрение закрыто не тогда, когда ротация работает, а когда заказчик может её изменить, проверить и восстановить после сбоя без нас. Поэтому передаём комплект: конфигурации под контролем версий, схему хранения со сроками, регламенты для дежурных и модель доступа.

  • Конфигурация ротации по каждому источнику: условие срабатывания (по размеру или календарю), число хранимых копий, сжатие, отложенное архивирование и действие после переоткрытия файла процессом.
  • Регламент хранения: таблица «класс логов — срок горячего хранения — срок архива — носитель — кто вправе удалить досрочно».
  • Карта источников: перечень сервисов и узлов, что пишется в файл, что уходит в системный журнал, где дублируется и почему.
  • Документация для дежурных: что делать при заполнении диска, при неотработавшей ротации, при необходимости срочно поднять подробность — с готовыми командами и ожидаемым выводом.
  • Права доступа к логам: матрица ролей — чтение напрямую, доступ по запросу, где маскируются персональные данные, кто вправе менять сроки и конфигурацию.
  • Проверки и оповещения: срабатывают, если ротация не прошла, архив не выгрузился или свободное место ниже порога, — с привязкой к конкретному дежурному.
  • Инструкция по откату: как вернуть предыдущую конфигурацию и поднять удалённые копии из архива, пока срок хранения не истёк.
  • Замеры до и после: объём логов на диске, доля узла под ними, число инцидентов из-за переполнения — база для сравнения после изменений.

Кейс: перестали терять логи при пиковой нагрузке

Сервис писал логи в файлы на каждом узле, а ротация была настроена одной строкой: по 100 МБ, хранить всё. На пике приложение продолжало писать в уже повёрнутый файл, и часть записей уходила в никуда — «дыры» появлялись ровно в те минуты, когда разбор инцидента нужнее всего. Поиск нужного события занимал 20–30 минут: инженер обходил восемь узлов и искал по архивам вручную.

Что изменили

Развели политики по классам: приложение, системный журнал и аудит получили отдельные правила вместо общего конфига. Поворот выполняется по размеру и по времени, а демон получает сигнал — файл не переоткрывается приложением, поэтому ни одна запись не теряется на смене. Правила описали в logrotate, доставку в централизованное хранилище вынесли в отдельный агент с буфером на диске: если хранилище недоступно, записи копятся локально, а не пропадают. Глубину хранения задали раздельно для горячего слоя и архива, старые файлы сжимаются.

Метрики до и после

Доля потерянных на пике записей упала с 3–7% до нуля — сверяли счётчики приложения с числом строк в хранилище. Поиск одного события сократился с 20–30 минут до 10–20 секунд по индексу, без обхода узлов и ручного разбора архивов. Горячий слой уменьшился примерно втрое при той же глубине архива: реестр перестал расти линейно, старые данные вытесняются по политике.

Чем отличается ротация по размеру от ротации по времени?

Ротация по размеру срабатывает, когда файл перерастает заданный порог: потребление места на разделе остаётся предсказуемым, но момент переключения зависит от нагрузки — в спокойный день файл живёт сутки, в пиковый закрывается за минуты. Ротация по времени привязана к расписанию: файл закрывается по календарю, поэтому набор файлов за период всегда одинаков, и по ним удобно строить выборки. Разница становится заметна именно на неравномерном профиле нагрузки.

Вариант Когда подходит Ограничения
Ротация по размеру Высокая и рваная частота записи, риск переполнения раздела, нужен жёсткий потолок по объёму Границы файлов непредсказуемы, тяжёлые интервалы и обрывы посреди активности сервиса
Ротация по времени Ровный поток, привязка логов к отчётным периодам, одинаковая гранулярность файлов Один всплеск может занять весь раздел до следующего срабатывания
Расписание плюс порог сверху Сервисы с суточным пиком и ночным затишьем Нужны два условия сразу и контроль, что сжатие успевает за записью

Для выбора режима смотрят на частоту записи в пике, а не в среднем за сутки. Если разброс между пиком и затишьем больше порядка, чистая ротация по времени оставляет окно, в котором раздел переполняется, — тогда расписание задают вместе с порогом по размеру, чтобы файл закрывался по любому из двух условий.

Срок хранения считают от скорости появления файлов: при ротации по времени за сутки их предсказуемое число, при ротации по размеру — переменное, и политика удаления по количеству файлов даёт разную глубину истории. Поэтому по частым тегам удобнее считать глубину в днях, а объём ограничивать сжатием и общим потолком каталога.

Частые технические вопросы по ротации и хранению логов

Сомнения вокруг ротации обычно не про то, как её включить, а про то, не порвём ли мы живой сервис и чем докажем, что политика работает. Ниже — ответы на то, что чаще всего всплывает при передаче инфраструктуры другой команде.

Сроки, целостность и разбор инцидентов

Какой срок хранения логов выбрать?

Срок диктуют не привычки, а задачи: разбор инцидентов, требования аудита и безопасность. Рабочий компромисс — горячее окно на быстром диске для оперативной диагностики, дальше сжатый архив в холодном слое. Важнее конкретной цифры — единый регламент: он фиксирует, что удаляется по расписанию, а не по остатку места.

Можно ли ротировать без перезапуска сервиса?

Да. Если процесс умеет переоткрывать дескриптор по сигналу — ротация идёт без обрыва соединений, файл меняет имя, запись продолжается в новый. Если не умеет и держит файл открытым, используем копирование с усечением: часть строк в момент копирования может попасть в оба файла или потеряться, поэтому окно подбираем под пиковую нагрузку и проверяем на стенде.

Как убедиться, что политика действительно применяется?

Конфигурация — это ещё не результат. Прогоняем ротацию принудительно на тестовом контуре, сверяем число строк до и после, смотрим, не осталось ли пустых и «залипших» файлов, и ставим алерты на рост каталога и на сбой ротации. Отдельно проверяем, что сжатие и удаление не конфликтуют с активной записью.

Что даёт аудит логов и как хранить архив?

Аудит отвечает на вопросы «кто менял политику» и «можно ли доверять записям». Для этого архив выгружаем в неизменяемое хранилище с контролем целостности, а правки конфигурации ведём через версионирование с историей изменений. Тогда восстановление конкретного окна времени занимает минуты, и есть чем подтвердить достоверность данных.

Обсудим задачу и вернёмся с планом ротации логов

Первый разговор — про вашу инфраструктуру, а не про наши регламенты. Нам важно понять, какие сервисы пишут логи, где они лежат, сколько занимают и что уже болит: ротация не настроена, диск переполняется за ночь. Отдельно проговариваем сроки хранения и чем они заданы — аудитом, разбором инцидентов или правилами безопасности.

Из этого разговора собирается план внедрения политик — по вашим контурам, а не по шаблону:

  • Что нужно от вас: список серверов и контуров, где живут логи, текущие конфигурации хранения и окна, когда допустимо менять боевой контур.
  • Что смотрим мы: объёмы и скорость роста логов, кто и как часто их читает, какие файлы нужны для разбора инцидентов, а какие — балласт.
  • Схема ротации: по размеру, по времени или по обоим порогам, со сжатием и разбивкой по сервисам.
  • Политика хранения: сколько держим в горячем виде, что уходит в архив, что снимается по правилу жизненного цикла автоматически.
  • Оценка работ: перечень изменений по каждому контуру, трудозатраты, порядок выката и шаг отката.
  • Внедрение политик: сначала небоевые контуры и проверка на реальном потоке, затем боевой — с контролем, что свободное место растёт, а нужные логи остаются доступными.

Следующий шаг — за вами: опишите задачу в двух-трёх абзацах или пришлите текущие конфигурации. Вернёмся с оценкой работ и планом внедрения, разложенным по этапам.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142