Lynx TiDB 慢日志收集工具

作者: 小龙虾爱大龙虾 原文来源: https://tidb.net/blog/7247e68f

简介

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. 将 https://github.com/harry1129/tidb-slowquery-lynx/tree/main/grafana 中带的面板导入到 Grafana

Create =》Import

Grafana 面板展示

SQL 聚合面板展示

单条 SQL 面板展示

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gin 源码概览 - 路由

本文基于gin 1.1 源码解读 https://github.com/gin-gonic/gin/archive/refs/tags/v1.1.zip 1. 注册路由 我们先来看一段gin代码,来看看最终得到的一颗路由树长啥样 func TestGinDocExp(t *testing.T) {engine : gin.Default()engine.GET("/api/user", f…

docker 基础语法学习,K8s基础语法学习,零基础学习

下面是关于Docker和Kubernetes的基础语法学习资料,包括一些关键概念和示例代码。 Docker 基础语法 1. 安装 Docker 首先,你需要安装 Docker。以下是不同操作系统上的安装指南: Windows/Mac: 下载并安装 Docker Desktop。 Linux: 根据你的…

【逆境中绽放:万字回顾2024我在挑战中突破自我】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 一、引言二、个人成长与盘点情感与心理成长学习与技能提升其它荣誉 三、年度创作历程回顾创作内容概…

职场沟通与行为

职场沟通与行为 引言 在职场上,你是否曾遇到过困惑的沟通?是否对同事的行为有过疑虑?这不仅是个别现象,而是我们这个时代工作文化中的普遍问题。许多职场的摩擦,来自沟通不畅或是行为不当。那么,如何才能…

【Linux 重装】Ubuntu 启动盘 U盘无法被识别,如何处理?

背景 U盘烧录了 Ubuntu 系统作为启动盘,再次插入电脑后无法被识别 解决方案(Mac 适用) (1)查找 USB,(2)格式化(1)在 terminal 中通过 diskutil list 查看是…

中职网络建设与运维ansible服务

ansible服务 填写hosts指定主机范围和控制节点后创建一个脚本,可以利用简化脚本 1. 在linux1上安装系统自带的ansible-core,作为ansible控制节点,linux2-linux7作为ansible的受控节点 Linux1 Linux1-7 Yum install ansible-core -y Vi /etc/ansible/hosts 添加…

数据库服务体系结构

1. 数据库服务应用配置 服务进行配置有什么作用? 实现服务运行启动 实现某些功能 应用配置有三种方式? 利用编译安装进行配置 编写配置文件信息 ,.默认的配置文件: /etc/my.cnf 利用启动命令参数配置信息,mysqld_safe --skip-grant-tables --…

Langchain+FastApi+Vue前后端Ai对话(超详细)

一、引入 首先可以先看下作者的文章 FastApi相关文章:创建最简单FastApi的项目Vue相关文章:最简单的aixos二次封装Langchain相关文章:如何使用LangSmith跟踪deepseek模型 二、后端搭建 1 项目文件结构 routers:存放api接口se…

如何在不暴露MinIO地址的情况下,用Spring Boot与KKFileView实现文件预览

在现代Web应用中,文件预览是一项常见且重要的功能。它允许用户在不上传或下载文件的情况下,直接在浏览器中查看文件内容。然而,直接将文件存储服务(如MinIO)暴露给前端可能会带来安全风险。本文将介绍如何在不暴露MinI…

简历_使用优化的Redis自增ID策略生成分布式环境下全局唯一ID,用于用户上传数据的命名以及多种ID的生成

系列博客目录 文章目录 系列博客目录WhyRedis自增ID策略 Why 我们需要设置全局唯一ID。原因:当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题。 问题:id的规律性太明显、…

Jira中bug的流转流程

Jira中bug的状态 1. 处理Bug的流程2. bug状态流转详述bug的状态通常包括 1. 处理Bug的流程 2. bug状态流转详述 bug的状态通常包括 未解决 1. 测试人员创建一个bug,填写bug的详细信息,如概要、bug级别、复现步骤、现状、预期结果等 2. 定位bug&#x…

Linux的几个基本指令

文章目录 一、几个基本指令1、ls 指令注意! 2、pwd命令3、touch 指令4、mkdir 指令注意!注意! 5、cd 指令注意! 6、cp 指令 今天我们学习Linux下的几个基本指令,本篇是在Xshell环境下执行的。 一、几个基本指令 1、…

软件工程师欧以宁:引领无人机导航与物联网安全的技术革新

在科技日新月异的今天,软件工程师欧以宁凭借卓越的技术能力和前瞻性的创新思维,成为了无人机自主导航和物联网安全领域的佼佼者。作为一名深耕技术前沿的专家,欧以宁不仅推动了无人机导航技术的突破性进展,还为智能家居和物联网的安全架构提供了全新的解决方案。她的研究成果,以…

数据库基础练习1(创建表,设置外键,检查,不为空,主键等约束)安装mysql详细步骤

安装MySQL详细步骤 1. 下载 MySQL 安装程序 访问 MySQL 官方网站:MySQL Downloads。在下载页面,选择 "MySQL Community (GPL) Downloads"。在 "MySQL Community Server" 部分,根据你的操作系统(Windows&…

laravel中请求失败重试的扩展--Guzzle

背景 开发过程中,跟外部接口对接时,很常见的要考虑到失败重新的情况,这里记录一下我用的失败重试的情况, 重试方法 1、使用 Laravel 的 HTTP 客户端和异常处理 结合异常处理和重试逻辑 use Illuminate\Support\Facades\Http;…

ThinkPHP 8的一对多关联

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…

工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率

项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件,拥有多种属性,是机器视觉系统中的核心部件,具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …

java使用poi-tl自定义word模板导出

文章目录 概要整体架构流程创建word模板核心代码导出结果 概要 在软件开发领域,自定义Word模板的使用是导出格式化数据的一种常见做法。poi-tl(Apache POI Template Language)作为一款基于广受认可的Apache POI库的Word模板引擎,…

IDEA2023版中TODO的使用

介绍:TODO其实本质上还是注释,只不过加上了TODO这几个字符,可以让使用者快速找到。 注意:在类、接口等文件中,注释是使用// 即:// TODO 注释内容 在配置文件中,注释是使用# 即:# TO…

项目练习:若依管理系统字典功能-Vue前端部分

文章目录 一、情景说明二、若依Vue相关代码及配置1、utils代码2、components组件3、api接口代码4、Vuex配置5、main.js配置 三、使用方法1、html部分2、js部分 一、情景说明 我们在做web系统的时候,肯定会遇到一些常量选择场景。 比如,性别:…