【运维指南】Lynx TiDB 慢日志收集工具,帮你更好的分析慢日志

Lynx TiDB 慢日志收集工具,帮你更好的分析慢日志
欢迎在测试环境试用

简介

lynx 工具可以定时将 TiDB 集群的慢查询收集并持久化到后端数据库中,然后通过 grafana 查询展示出来,这可以帮助我们更好的分析慢查询日志。

背景

尽管 TiDB 提供了慢查询日志和 SQL 语句分析功能,并在 Dashboard 上提供了直观的查询界面,但在实际使用中仍存在一些局限性:

  1. 早期版本 SQL 语句分析功能数据存储在内存中,当 TiDB Server 发生 Out-of-Memory (OOM) 时,数据会丢失,导致无法查询到相关数据。
  2. SQL 语句分析功能存储的 SQL 类别有限,当 SQL 语句数量较多时,旧的记录可能会驱逐,从而无法查询到想要的数据。
  3. 慢查询日志以单条语句的形式存在,当 TiDB 集群繁忙时,短时间会产生大量慢查询记录,界面返回的行数过多,不利于分析。
  4. 慢查询日志底层存储在日志文件中,跨长时间段查询慢查询日志时,不仅速度较慢,还可能导致 TiDB Server OOM。
  5. 慢查询日志界面无法自定义查询,无法满足复杂的分析需求。
  6. 慢查询日志导出的 Excel 格式混乱,无法直接发送给应用研发团队。
  7. 等等 。。。

特点

  1. 支持多 TiDB 版本,适用于 TiDB v6.0 及以上版本。
  2. 根据时间窗口采集慢查询数据,有效降低对目标 TiDB 集群的压力。
  3. 同一集群中,具有相同 SQL 指纹和计划指纹的 SQL 语句和执行计划只收集一次,节约了存储空间,同时也降低了对采集目标集群的压力。
  4. 可以灵活自定义 Grafana 面板,例如查找执行计划中包含隐式转换的 SQL 语句(计划中包含 cast 关键字)。
  5. 通过 Grafana 可以方便地将慢查询数据导出为 Excel 格式,还可以开发脚本定期自动将数据通过邮件发送给相关人员。
  6. lynx 收集的慢日志适合分析因执行计划不佳导致的查询慢的问题。然而,对于那些时快时慢的查询情况(可能是由于传入参数不同或集群运行状态变化引起的),TiDB Dashboard 的慢查询日志功能可能更为合适,因为同一执行计划 lynx 只采集一次执行计划。
  7. 与慢查询日志一样,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 面板

  1. 在 Grafana 上配置 mysql 数据源

Configuration =》 data sources =》Add data source =》Mysql

  1. tidb-slowquery-lynx/grafana at main · harry1129/tidb-slowquery-lynx · GitHub 中带的面板导入到 Grafana

Create =》Import

Grafana 面板展示

SQL 聚合面板展示

单条 SQL 面板展示

总结

Lynx 工具通过定时收集和持久化 TiDB 集群的慢查询日志,配合 Grafana 提供了直观的查询和展示功能,提供了更高效、更灵活的 TiDB 慢日志分析手段。解决了 TiDB 慢查询日志分析中的一些常见问题,帮助数据库管理员和开发人员更好地优化数据库性能。

7 个赞

1 个赞

感谢大佬分享,很不错的工具

想法不错,但是好像grafana展示sql还是看着不太爽

不是让你在 grafana 上做优化 SQL,哪个有问题,复制出来看吧 :grinning:

:+1::+1::+1:感谢大佬分享

龙虾大佬威武!

功能不错,给开发展示方便多了

点赞,感谢分享

太牛了,tidb的社区就是强大

咦?专栏 文章和论坛联动?

太强了 :wave:,Lynx 工具通过定时收集和持久化 TiDB 集群的慢查询日志,配合 Grafana 提供了直观的查询和展示功能,感谢分享。

感谢大佬分享,点赞+收藏

感谢大佬分享,很不错的工具

不错,社区的力量

看着不错

必须不错 :grinning:

感谢分享,我会认真考虑生产环境中lynx工具的应用

1 个赞