一、背景
ClickHouse中的query_log、query_thread_log、trace_log等日志表,在开启之后,如果一段时间没有清理,这些日志表会占用大量的存储空间,query_log是最常用的查询日志,它记录了ClickHouse服务中所有已经执行的查询记录,下图为query_log表中的部分内容。ClickHouse默认不清理日志,这里需要自己配置。
二、解决方案
查了些资料发现,大家基本都是通过设置相应日志表的TTL来清理,如
- ALTER TABLE system.query_log on cluster cluster_name MODIFY TTL event_date + INTERVAL 15 DAY
-
- 保存一个月的数据
-
- ALTER TABLE query_log MODIFY TTL event_date + toIntervalMonth(1);
-
- ALTER TABLE query_thread_log MODIFY TTL event_date + toIntervalMonth(1);
-
- 保存15天的数据
-
- ALTER TABLE query_log MODIFY TTL event_date + toIntervalDay(15);
-
- 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 – 将数据从内存的缓冲区刷新到表的时间间隔。
- <query_log>
- <database>system</database>
- <table>query_log</table>
- <engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine>
- <flush_interval_milliseconds>7500</flush_interval_milliseconds>
- </query_log>