Настройка автоматического удаления системных логов в 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:
Перейдите в настройки СУБД ClickHouse.
Добавьте параметр:
где:
query_log.ttl — параметр конфигурации ClickHouse, который задаёт политику автоматического удаления для системной таблицы system.query_log;
event_date — стандартный столбец таблицы, хранящий дату выполнения запроса. Используется как точка отсчёта для расчёта срока жизни каждой записи;
<период> — например, 7 DAY (7 дней). Записи, у которых текущая дата превышает event_date + 7 дней, помечаются как устаревшие и физически удаляются при слиянии частей таблицы.
Перезагрузите сервер:
Вариант 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% от размера таблицы).