Lynx TiDB 慢日志收集工具,帮你更好的分析慢日志
欢迎在测试环境试用
简介
lynx 工具可以定时将 TiDB 集群的慢查询收集并持久化到后端数据库中,然后通过 grafana 查询展示出来,这可以帮助我们更好的分析慢查询日志。
背景
尽管 TiDB 提供了慢查询日志和 SQL 语句分析功能,并在 Dashboard 上提供了直观的查询界面,但在实际使用中仍存在一些局限性:
- 早期版本 SQL 语句分析功能数据存储在内存中,当 TiDB Server 发生 Out-of-Memory (OOM) 时,数据会丢失,导致无法查询到相关数据。
- SQL 语句分析功能存储的 SQL 类别有限,当 SQL 语句数量较多时,旧的记录可能会驱逐,从而无法查询到想要的数据。
- 慢查询日志以单条语句的形式存在,当 TiDB 集群繁忙时,短时间会产生大量慢查询记录,界面返回的行数过多,不利于分析。
- 慢查询日志底层存储在日志文件中,跨长时间段查询慢查询日志时,不仅速度较慢,还可能导致 TiDB Server OOM。
- 慢查询日志界面无法自定义查询,无法满足复杂的分析需求。
- 慢查询日志导出的 Excel 格式混乱,无法直接发送给应用研发团队。
- 等等 。。。
特点
- 支持多 TiDB 版本,适用于 TiDB v6.0 及以上版本。
- 根据时间窗口采集慢查询数据,有效降低对目标 TiDB 集群的压力。
- 同一集群中,具有相同 SQL 指纹和计划指纹的 SQL 语句和执行计划只收集一次,节约了存储空间,同时也降低了对采集目标集群的压力。
- 可以灵活自定义 Grafana 面板,例如查找执行计划中包含隐式转换的 SQL 语句(计划中包含
cast
关键字)。 - 通过 Grafana 可以方便地将慢查询数据导出为 Excel 格式,还可以开发脚本定期自动将数据通过邮件发送给相关人员。
- lynx 收集的慢日志适合分析因执行计划不佳导致的查询慢的问题。然而,对于那些时快时慢的查询情况(可能是由于传入参数不同或集群运行状态变化引起的),TiDB Dashboard 的慢查询日志功能可能更为合适,因为同一执行计划 lynx 只采集一次执行计划。
- 与慢查询日志一样,Lynx 无法获取低于慢查询阈值的语句信息。
下载地址
https://github.com/harry1129/tidb-slowquery-lynx/releases/tag/v1.0.0
部署lynx
准备后端存储库
后端存储库用于存储收集到的慢查询日志,可以是 Mysql 数据库或 TiDB 数据库,数据库需手工创建,用户权限需要对数据库有所有权限,程序会自动创建表结构。示例:
create database test;
create user u1 dientified by "u1";
grant all privileges on test.* to u1;
准备配置文件config.toml
[global]
time_window_minutes = 60 #采集窗口,单位(分钟),建议设置 30 ~ 60,与定时任务配置同样窗口,窗口会自动
#后端存储库
[database]
host = "localhost"
port = 4000
user = "root"
password = ""
db_name = "test"
max_idle_conns = 2
max_open_conns = 10
conn_max_lifetime = 600 #单位(秒)
[target_dbs]
cluster1.host = "196.128.1.1"
cluster1.port = 4000
cluster1.user = "root1"
cluster1.password = ""
cluster2.host = "196.128.1.2"
cluster2.port = 4000
cluster2.user = "root"
cluster2.password = ""
cluster3.host = "196.128.1.4"
cluster3.port = 4000
cluster3.user = "root"
cluster3.password = ""
目标数据库的采集用户最少需要以下权限
-- 查询 information_schema.schema 时需要看到所有的数据库名
GRANT SHOW DATABASES ON . TO 'xxxx'@'%';
-- 查询 information_schema.cluster_slow_query 时需要看到所有用户的慢查询
GRANT DASHBOARD_CLIENT ON . TO 'xxxx'@'%';
添加定时执行任务
这里定时执行时间要与 time_window_minutes 一样
crontab -e
*/30 * * * * /your/path/lynx -c /your/path/config.toml -l /your/path/lynx.log
添加 grafana 面板
- 在 Grafana 上配置 mysql 数据源
Configuration =》 data sources =》Add data source =》Mysql
- 将 tidb-slowquery-lynx/grafana at main · harry1129/tidb-slowquery-lynx · GitHub 中带的面板导入到 Grafana
Create =》Import
Grafana 面板展示
SQL 聚合面板展示
单条 SQL 面板展示
总结
Lynx 工具通过定时收集和持久化 TiDB 集群的慢查询日志,配合 Grafana 提供了直观的查询和展示功能,提供了更高效、更灵活的 TiDB 慢日志分析手段。解决了 TiDB 慢查询日志分析中的一些常见问题,帮助数据库管理员和开发人员更好地优化数据库性能。