技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]

技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]作者:xuty 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、概述 之前在社区发了一篇故障分析 | 有效解决 MySQL 行锁等待超时问题文…

技术分享 | MySQL 监控利器之 Pt-Stalk


一、概述

之前在社区发了一篇故障分析 | 有效解决 MySQL 行锁等待超时问题文档,主要介绍了下行锁超时的监控方法,下方评论中有人提到了 pt-stalk 工具也可以监控行锁超时,因为个人没怎么用过这个工具,所以下意识的就去 google 了一下。因为没找到有介绍具体监控输出的文档,就以为这个工具没法监控行锁等待,最后果断被打脸了。

技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]

以上是个小插曲,个人在本地测试了下 pt-stalk 的监控输出后,发现其监控项远远比我预测的多,用起来也比较方便,所以在这里分享下这个工具。

二、介绍

首先介绍下 pt-stalk,它是 Percona-Toolkit 工具包中的一个工具,说起 PT 工具包大家都不陌生,平时常用的 pt-query-digestpt-online-schema-change 等工具都是出自于这个工具包,这里就不多介绍了。

pt-stalk 的主要功能是在出现问题时收集 OS 及 MySQL 的诊断信息,这其中包括:

  1. OS 层面的 CPU、IO、内存、磁盘、网络等信息;
  2. MySQL 层面的行锁等待、会话连接、主从复制,状态参数等信息。

而且 pt-stalk 是一个 Shell 脚本,对于我这种看不懂 perl 的人来说比较友好,脚本里面的监控逻辑监控命令也可以拿来参考,用于构建自己的监控体系。

技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]

三、使用

接着我们来看下如何使用这个工具。

pt-stalk 通常以后台服务形式监控 MySQL 并等待触发条件,当触发条件时收集相关诊断数据。

触发条件相关的参数有以下几个:

  • function:
  • 默认为 status,代表监控 SHOW GLOBAL STATUS 的输出;
  • 也可以设置为 processlist,代表监控 show processlist 的输出;
  • variable:
    • 默认为 Threads_running,代表 监控参数,根据上述监控输出指定具体的监控项;
  • threshold:
    • 默认为 25,代表 监控阈值,监控参数超过阈值,则满足触发条件;
    • 监控参数的值非数字时,需要配合 match 参数一起使用,如 processlist 的 state 列;
  • cycles:
    • 默认为 5,表示连续观察到五次满足触发条件时,才触发收集;

连接参数:host、password、port、socket。

其他一些重要参数:

  • iterations:该参数指定 pt-stalk 在触发收集几次后退出,默认会一直运行。
  • run-time:触发收集后,该参数指定收集多长时间的数据,默认 30 秒。
  • sleep:该参数指定在触发收集后,sleep 多久后继续监控,默认 300 秒。
  • interval:指定状态参数的检查频率,判断是否需要触发收集,默认 1 秒。
  • dest:监控数据存放路径,默认为 /var/lib/pt-stalk
  • retention-time :监控数据保留时长,默认 30 天。
  • daemonize:以后台服务运行,默认不开启。
  • log:后台运行日志,默认为 /var/log/pt-stalk.log
  • collect:触发发生时收集诊断数据,默认开启。
    • collect-gdb:收集 GDB 堆栈跟踪,需要 gdb 工具。
    • collect-strace:收集跟踪数据,需要 strace 工具。
    • collect-tcpdump:收集 tcpdump 数据,需要 tcpdump 工具。

下面是一段 Percona 官方贴的伪代码,逻辑也比较清晰,大家可以看下:

while true; do
   if --variable from --function > --threshold; then
      cycles_true++
      if cycles_true >= --cycles; then
         --notify-by-email
         if --collect; then
            if --disk-bytes-free and --disk-pct-free ok; then
               (--collect for --run-time seconds) &
            fi
            rm files in --dest older than --retention-time
         fi
         iter++
         cycles_true=0
      fi
      if iter < --iterations; then
         sleep --sleep seconds
      else
         break
      fi
   else
      if iter < --iterations; then
         sleep --interval seconds
      else
         break
      fi
   fi
done
rm old --dest files older than --retention-time
if --collect process are still running; then
   wait up to --run-time * 3 seconds
   kill any remaining --collect processes
fi

代码100分

四、使用场景

下面是几个我个人可以想到的关于 pt-stalk 的使用场景:

4.1 场景一

后台运行 pt-stalk 监视 SHOW GLOBAL STATUS 中的 Threads_connected 状态值,即如果 客户端连接数 连续 5 次超过 1000,则触发收集主机和 MySQL 的性能与状态信息。

代码100分pt-stalk  --function status --variable Threads_connected --threshold 2500 --daemonize --user=root --password=######
4.2 场景二

后台运行 pt-stalk 监视 SHOW GLOBAL STATUS 中的 Threads_running 状态值,即如果活跃线程数连续 5 次超过 500,则触发收集主机和 MySQL 的性能与状态信息。

pt-stalk  --function status --variable Threads_running --threshold 500 --daemonize --user=root --password=######
4.3 场景三

非后台模式下立即收集主机和 MySQL 的性能与状态信息 60s,等待 180s 自动退出,无需任何触发条件,主要用于临时保留问题场景信息,便于事后分析。

代码100分pt-stalk --no-stalk --run-time=60 --iterations=1 --user=root --password=Gepoint

技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]

五、监控输出

接着来看下 pt-stalk 可以监控些什么信息,如下图所示:

技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]

从上图可见输出文件有很多,基本从文件名字就可以知道内容是什么,且大多数文件都是以命令来命名的,这里就不一一介绍了。

有些比较重要的监控项我用红标指示了,对于排查问题帮助比较多。

对于本文最开始所说的 pt-stalk 也可以监控行锁等待信息,其实就是依赖于 lock-waitstransactions 2 个监控文件。

我们来看下其内容:

首先是 lock-waits 日志,其实与我之前的后台监控脚本输出有点类似,不过这里信息更加丰富。

技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]

然后是 transactions ,记录了所有活动事务的详细信息,更加利于分析行锁等待情况。

技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]

虽然 lock-waitstransactions 2 个监控文件详细的记录了阻塞情况,但还是存在那个问题,如果原因是 事务挂起,还是需用借用 general_log 分析整个事务。

六、pt-sift

在学习 pt-stalk 的时候,发现 PT 工具包里专门有个工具用于分析 pt-stalk 采集的数据,那就是 pt-sift

pt-sift 可以根据之前 pt-stalk 监控采集的数据进行汇总性的展示,使用比较简单,下面是其输出示例:

技术分享 | MySQL 监控利器之 Pt-Stalk[通俗易懂]

七、小结

pt-stalk 工具个人感觉还不错,尤其是其丰富的监控项,与其特有的触发式监控机制。

对于没有部署监控系统,但为了临时排查解决 MySQL 问题的环境非常有效。

最后对于 pt-stalk 再总结两点:

  1. pt-stalk 适合在 MySQL 本地环境运行,远程运行则无法收集到对应的主机信息。

  2. 触发条件貌似是单一的,无法选择多个,也算是一个明显的弊端。

附录:

https://www.percona.com/doc/percona-toolkit/LATEST/pt-stalk.html https://www.percona.com/doc/percona-toolkit/LATEST/pt-sift.html https://www.orczhou.com/index.php/2012/06/mysql-troubleshooting-with-pt-stakl/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8296.html

(0)
上一篇 2023-03-04
下一篇 2023-03-04

相关推荐

  • Python表达式的匹配方法

    Python表达式的匹配方法正则表达式是一种符合特定规则的文本,可以用来搜索、替换、分割等操作。在Python中,我们可以使用re模块来使用正则表达式。

    2024-02-08
    95
  • Python占位符

    Python占位符Python是一种高级编程语言,具有简单易学和可读性强的特点,因此在各种应用中得到了广泛的应用。Python占位符是Python中的一个重要部分,它提供了一种简单的方法来处理字符串,将变量嵌入到字符串中。

    2024-07-30
    30
  • python之包(Python 常用包)

    python之包(Python 常用包)   Python之所以受欢迎不光是因为它简单易学,更重要的是它有成千上万的宝藏库。这些库相当于是已经集成好的工具,只要安装就能在Python里使用。它们可以处理各式各样的问题,无需你再造轮子,而且随着社区的不断更新维护,有些库越来越强大,几乎能媲美企业级应用。那么这些工具库怎么下载安装呢?它们被放在一个统一的“仓库”里,名叫PyPi(Python Package Index),所有的库安装都是从这里调度。有了仓库之后,还需要有管理员,pip就是这样一个角色。

    2023-10-29
    122
  • 荣耀30s性价比如何_荣耀20颜色识图

    荣耀30s性价比如何_荣耀20颜色识图     今天带大家来了解一下我个人十分喜欢的荣耀30S。荣耀30S是今年荣耀的开年5G诚意之作,首发超强性能麒麟820 5G SoC,拥有高颜值的同时还配备6400W高清四摄和40W快充等的强劲功…

    2023-02-19
    148
  • 内建质量,你真的了解么?「建议收藏」

    内建质量,你真的了解么?「建议收藏」内建质量定义 内建质量作用在开发过程中,要求软件生命周期之间参与的各个角色都需要实时的对软件的质量负责。确保软件在交付到下一环节前已经有了基础的质量保证。其核心目的就是减少因为质量问题导致的返工,而…

    2023-02-26
    156
  • 优化交易策略,提升Formax机器的效益

    优化交易策略,提升Formax机器的效益Formax机器是一个专为外汇市场交易而设计的智能交易软件。用户可以通过该软件进行外汇交易,并且利用机器智能来进行交易的优化和提升。本文将从以下几个方面介绍如何优化交易策略,提升Formax机器的效益。

    2024-02-29
    91
  • 使用正则表达式进行文本匹配和替换

    使用正则表达式进行文本匹配和替换正则表达式是一种匹配文本的强大工具,可以用来在文本中查找、替换、分割等操作。在Python中,可以用re模块来操作正则表达式,实现文本的匹配和替换。本文将详细介绍使用正则表达式进行文本匹配和替换的相关内容。

    2024-03-28
    74
  • Sqlite—数据库管理与表管理

    Sqlite—数据库管理与表管理创建数据库 [root@localhost ~]# sqlite3 testDB.db

    2022-12-22
    151

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注