【ClickHouse】 日志清理方法(query_log、query_thread_log)

一、背景

ClickHouse中的query_log、query_thread_log、trace_log等日志表,在开启之后,如果一段时间没有清理,这些日志表会占用大量的存储空间,query_log是最常用的查询日志,它记录了ClickHouse服务中所有已经执行的查询记录,下图为query_log表中的部分内容。ClickHouse默认不清理日志,这里需要自己配置。

二、解决方案

查了些资料发现,大家基本都是通过设置相应日志表的TTL来清理,如

  1. ALTER TABLE system.query_log on cluster cluster_name MODIFY TTL event_date + INTERVAL 15 DAY
  2. 保存一个月的数据
  3. ALTER TABLE query_log MODIFY TTL event_date + toIntervalMonth(1);
  4. ALTER TABLE query_thread_log MODIFY TTL event_date + toIntervalMonth(1);
  5. 保存15天的数据
  6. ALTER TABLE query_log MODIFY TTL event_date + toIntervalDay(15);
  7. ALTER TABLE query_thread_log MODIFY TTL event_date + toIntervalDay(15);

这样处理虽然也可以,但是不太安全也不太方便

官方资料建议:直接在配置文件中设置

query_log 配置参数

使用下列参数进行日志配置(配置文件位置 /etc/clickhouse-server/config.xml)

  •     database – 数据库名
  •     table – 日志存放的系统表名
  •     partition_by — 系统表分区键,如果定义了 engine 则不能使用
  •     engine -系统表 表引擎,如果定义了 partition_by 则不能使用
  •     flush_interval_milliseconds – 将数据从内存的缓冲区刷新到表的时间间隔。
  1. <query_log>
  2. <database>system</database>
  3. <table>query_log</table>
  4. <engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine>
  5. <flush_interval_milliseconds>7500</flush_interval_milliseconds>
  6. </query_log>