前言
该文章介绍在自建(CentOS7)MySQL5.7上部署Clicktail,并拉取MySQL慢日志数据,写入到ClickHouse库表的实施过程。
1 环境
1.1 拓扑图

1.2 环境信息
| 主机名 | IP | 端口 | 服务 | 配置文件 |
|---|---|---|---|---|
| mysql001 | 192.168.6.114 | 3306 | MySQL5.7.22 | /etc/mysql57/my_3306.cnf |
| Clicktail慢日志进程 | /etc/clicktail/clicktail_slow_3306.conf /data/app/clicktail/state/slow_3306.leash.state | |||
| Clicktail审计日志进程 | /etc/clicktail/clicktail_audit_3306.conf /data/app/clicktail/state/audit_3306.leash.state | |||
| clickhouse001 | 192.168.6.8 | 8123 | clickhouse客户端、服务端 | /etc/clickhouse-server/config_9000.xml |
2 部署过程
2.1 安装clicktail软件
curl -s https://packagecloud.io/install/repositories/Altinity/clickhouse/script.rpm.sh | bash
yum search clicktail
yum info clicktail
yum -y install clicktail
也可以通过rpm包安装
下载路径:https://packagecloud.io/app/Altinity/clickhouse/search?q=clicktail
yum install clicktail-1.0.20180401-1.x86_64.rpm2.2 安装相关目录
[ root@mysql001:/data/app ]# mkdir -p /data/app/clicktail/state/2.3 修改clicktail配置文件
/etc/clicktail/clicktail-example.conf 为默认配置文件,可以看下参数说明。也可以通过clicktail --help看。
新建配置文件clicktail_slow_3306.conf,是为了后面拉取审计日志,和审计日志配置文件clicktail_audit_3306.conf区分开。
clicktail进程可能会占用较大CPU,需要通过NumSenders、BatchFrequencyMs、BatchSize等参数控制拉取的频率和大小,避免引起线上事故。
[ root@mysql001:/data/app ]# vim /etc/clicktail/clicktail_slow_3306.conf
[Application Options]
APIHost = http://192.168.6.8:8123/ --clickhouse地址
NumSenders = 1
BatchFrequencyMs = 10000
BatchSize = 1000
[Required Options]
ParserName = mysql
LogFiles = /data/mysql/mysql57_3306/slowlog/slow.log --MySQL慢日志文件路径
Dataset = clicktail.mysql_slow_log --clickhouse上存储MySQL慢日志的库表
[Tail Options]
;ReadFrom = beginning
;Stop = false
StateFile = /data/app/clicktail/state/slow_3306.leash.state
[MySQL Parser Options]
Host = localhost:3306 --MySQL地址端口
User = clicktail_r --MySQL上创建用户,用来拉取慢日志
Pass = 1234562.4 MySQL创建用户
create user 'clicktail_r'@'localhost' identified by '123456';
GRANT SELECT,REPLICATION CLIENT ON *.* TO 'clicktail_r'@'localhost';
flush privileges;2.5 MySQL慢日志
慢日志文件应做好每日切割(logrotate)。
[ root@mysql001:/data/mysql/mysql57_3306/slowlog ]# ll
total 10656
-rw-r----- 1 mysql mysql 6899072 Oct 9 11:09 slow.log
-rw-r----- 1 mysql mysql 777714 Oct 5 03:08 slow.log-20221005.gz
-rw-r----- 1 mysql mysql 811916 Oct 6 03:07 slow.log-20221006.gz
-rw-r----- 1 mysql mysql 820048 Oct 7 03:20 slow.log-20221007.gz
-rw-r----- 1 mysql mysql 780921 Oct 8 03:15 slow.log-20221008.gz
-rw-r----- 1 mysql mysql 806132 Oct 9 03:15 slow.log-20221009.gzmysql> show variables like '%slow_query_log_file%';
+---------------------+-------------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------------+
| slow_query_log_file | /data/mysql/mysql57_3306/slowlog/slow.log |
+---------------------+-------------------------------------------+
1 row in set (0.01 sec)
mysql> set global log_throttle_queries_not_using_indexes=1000;2.6 ClickHouse建库表
通过下面sql脚本在clickhouse创建库表,用来存放慢日志数据。(该创建库表脚本及方法只针对clickhouse单实例,集群的话需要改造)
建库脚本来源:https://github.com/Altinity/clicktail/blob/master/schema/db.sql
建表脚本来源:https://github.com/Altinity/clicktail/blob/master/schema/mysql.sql
手动连接clickhouse执行命令,或者执行sql文件
cat ./db.sql | clickhouse-client --port=9000 --multiline
cat ./mysql.sql | clickhouse-client --port=9000 --multiline2.7 clicktail拉取存量慢日志
clicktail进程启动后,默认只会从当前时间开始拉取增量慢日志数据,如果只需要增量,跳过该步骤,直接执行2.8步骤。如果也需要slow.log文件里存量数据,可以按照下面方法操作。(--backfill控制拉取全量)
[ root@mysql001:/data/app ]# clicktail --api_host=http://192.168.6.8:8123/ --dataset='clicktail.mysql_slow_log' --parser=mysql --mysql.user=clicktail_r --mysql.pass=123456 --file=/data/mysql/mysql57_3306/slowlog/slow.log --backfill --send_batch_size=5 --poolsize=5 clicktail进程可能会占用较大CPU,需要通过--send_batch_size=5 --poolsize=5等参数控制,避免引起线上事故。
2.8 启动clicktail持续拉取增量慢日志
[ root@mysql001:/etc/logrotate.d ]# cat /etc/systemd/system/clicktail_slow_3306.service
[Unit]
Description=for slow log to clickhouse
After=network.target
[Service]
ExecStart=/usr/bin/clicktail -c /etc/clicktail/clicktail_slow_3306.conf
KillMode=process
Restart=on-failure
User=root
Group=root
[Install]
Alias=clicktail_slow_3306 clicktail_slow_3306.service
systemctl start clicktail_slow_3306.service3 附录
clicktail安装参考:https://github.com/Altinity/clicktail
clicktail介绍:https://altinity.com/blog/2018/3/12/clicktail-introduction




