Настройка автоматического удаления системных логов в ClickHouse

Важно

Некорректные настройки могут вывести кластер из строя, поэтому предварительно создайте резервную копию.

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

Рейтинг «тяжеловесов» среди системных таблиц

Таблица

Причина роста

Типичный сценарий

system.query_log

Логирует каждый выполненный запрос (метаданные, время, ошибки, ресурсы)

Высокая нагрузка: тысячи запросов в секунду → миллионы записей в день

system.trace_log

Семплирующий профайлер  собирает стек-трейсы с заданной частотой



Включён профайлер с частым семплированием (например, каждые 10 мс)

system.part_log

Фиксирует все операции с частями таблиц: merges, mutations, replication

Активное изменение данных: частые вставки, оптимизации, репликация

system.metric_log

Периодические снимки метрик сервера (по умолчанию каждые 15 сек)

Долгосрочный мониторинг без настроенного TTL

system.text_log

Текстовые логи сервера (ошибки, предупреждения, info-сообщения)

Высокий уровень логирования

Настройка TTL для системных таблиц

Вариант 1. Простой параметр TTL (для таблиц без параметра engine)

Например, чтобы настроить автоматическое удаление логов в таблице system.query_log:

  1. Перейдите в настройки СУБД ClickHouse.

  2. Добавьте параметр:

    где:

    • query_log.ttl — параметр конфигурации ClickHouse, который задаёт политику автоматического удаления для системной таблицы system.query_log;

    • event_date — стандартный столбец таблицы, хранящий дату выполнения запроса. Используется как точка отсчёта для расчёта срока жизни каждой записи;

    • <период> — например, 7 DAY (7 дней). Записи, у которых текущая дата превышает event_date + 7 дней, помечаются как устаревшие и физически удаляются при слиянии частей таблицы.

  3. Перезагрузите сервер:

Вариант 2. TTL в значении параметра engine (для таблиц с параметром engine)

Некоторые системные таблицы (например, system.opentelemetry_span_log) имеют в конфигурации параметр engine. Для таких таблиц TTL должен прописываться в значении параметра engine, иначе ClickHouse выдаст ошибку при запуске сервера.

Пример для таблицы system.opentelemetry_span_log:

После изменения конфигурации перезагрузите сервер:

Единицы времени для выражения INTERVAL

В ClickHouse для выражения INTERVAL в столбцах с типом данных Date поддерживаются единицы времени от дня до года:

  • DAY

  • WEEK

  • MONTH

  • QUARTER

  • YEAR

Единицы времени можно комбинировать, например: 

Примечание

  • Удаление происходит в фоновом режиме, не мгновенно.
  • Для операций слияния требуется свободное место (~10-20% от размера таблицы).