1 背景
业务经常需要通过MySQL慢日志来排查SQL问题。需求主要是:让dba提供一段时间内慢日志明细和慢日志统计。
早期的处理方式是:登录数据库服务器,1)下载慢日志文件发给开发,作为明细;2)通过pt-query-digest命令,生成一段时间内的慢日志报表,作为统计;
随着业务线的扩展,管理的自建MySQL实例数量越来越多,业务主库和只读从库的数量达到200+。随之而来的,通过慢查询日志来解决业务问题的需求越来越多。
原来的处理方式太耽误时间,尤其碰到慢日志文件较大的时候(每天会对日志文件进行切割,但有的实例慢日志文件仍然很大)。
2 痛点&诉求
后来的解决方法是:通过rsyslog+kafka,将慢日志明细写入到ELK,开发可以通过数据库对应的主机名来筛选明细。
虽然kibana上可以定制可视化的查询(Visualize),以及将可视化查询通过看板(Dashboard)展示,但是有两个问题:1)定制工作量大;2)没办法实现慢查询统计功能,比如将select * from t1 where id=1 和 select * from t1 where id=2作为一个语句:select * from t1 where id=?来统计次数;
第二个解决方法是:利用https://github.com/hhyo/Archery自带的慢查询功能(pt-query-digest命令,需要把慢日志写入表中),但是问题是:1)改造工作量大;2)大量查询的话,可能会影响别的功能使用。

3 思路
后来有幸看到一篇文章:https://cloud.tencent.com/developer/article/1986852

开始研究clicktail(不再维护,用的人较少,但是能拿来用,有开发能力的大佬可以忽略。。。),https://github.com/Altinity/clicktail
clicktail介绍:https://altinity.com/blog/2018/3/12/clicktail-introduction
就是通过clicktail,将慢日志写入clickhouse,clickhouse展示慢查询统计和明细:https://www.percona.com/blog/2018/02/28/analyze-raw-mysql-query-logs-clickhouse/
4 架构
web展示的话,用的公司现有的redash(vue大佬可以忽略)。
链路就是: mysql+clicktail+clickhouse+redash
5 展示

明细和统计,是参考阿里云rds控制台上的功能搞的。

后面会抽时间将整个的部署都形成文章。
ClickHouse集群部署文档:https://www.modb.pro/db/452026
Clicktail部署文档:https://www.modb.pro/db/509227
Redash部署文档:
ClickHouse分析MySQL慢查询文档:https://www.modb.pro/db/511068
ClickHouse常用操作:https://www.modb.pro/db/512383
Clicktail部署拉取MySQL慢日志及常见问题:https://www.modb.pro/db/509227
Clicktail部署拉取MySQL审计日志及常见问题:https://www.modb.pro/db/549081




