pt-stalk
1. 概述
在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息。另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人为的抓住现场,收集数据。这正是pt-stalk所解决的问题。
2. 收集的性能和状态数据
让pt-stalk后台运行(--daemonize),并监视SHOW GLOBAL STATUS中的Threads_connected状态值,如果该值超过10,则触发收集主机和MySQL的性能、状态信息。pt-stalk会每隔一秒检查一次状态值,如果连续5次满足触发条件,则开始收集。
pt-stalk --collect-tcpdump --function status \
--variable Threads_connected --threshold 2500 \
--dest /data/dbdata/pt-stalk --iterations 10 \
--daemonize -- --user=root -ptest
使用pt-sift进行监控文件分析(man pt-sift查看使用方法):
pt-sift /data/dbdata/pt-stalk/2016_08_22_15_50_19-tcpdump
3. 参数
※ –function:设置触发条件,包括status、processlist、自定义脚本,详细见触发条件部分
※ –dest:设置collect信息的存储目录,默认/var/lib/pt-stalk/。
说明:设置–dest /u01/mysql选项到mysql目录之后,pt-stalk在清理超过期限的日志时,会暴力的将该目录下所有修改时间超过一定日期的文件全部删掉,因此在设置dest目录时必须慎重(如果设置最好是一个独立的目录,而不是跟mysql或者其他设置在同一个目录)。–dest默认值是查看pt-stalk的源码(默认pt-stalk将收集的数据放在目录/var/lib/pt-stalk下):
※ –iterations:该参数指定pt-stalk在收集几次故障现场后就退出。默认pt-stalk会一直运行。
※ –run-time:触发收集后,该参数指定收集多长时间的数据。默认是30秒,比如show processlist会连续收集30次。
※ –sleep:为防止一直触发收集数据,该参数指定在某次触发后,必须sleep一段时候才继续观察并触发收集。默认是300秒
※ –interval:默认情况pt-stalk会每隔一秒检查一次状态数据,判断是否需要触发收集。该参数指定间隔时间,默认是1秒。
※ –cycles:默认情况pt-stalk只有连续观察到五次状态值满足触发条件时,才触发收集。该参数控制,需要连续几次满足条件,收集被触发,默认是5次。
※ –verbose:设置log的输出级别,默认是2;第一次运行可以设置为3,方便观察情况0(Errors)、1(Warnings)、2(Matching triggers and collection info)、3(Non-matching triggers)
※ –plugin:和–function参数类似,可以指定一个包含before_collect、after_collect等函数的shell脚本。
※ --log指定一个你希望的log目录和文件,默认我们可以通过文件/var/log/pt-stalk.log,查看pt-stalk的运行状态
4. 触发条件
三种触发条件,通过参数function设置:
※ status
–function status –variable Threads_connected –threshold 2500,表示MySQL状态值Threads_connected超过2500时触发数据收集。常用的触发条件还可以使用Threads_running等。
※ processlist
–function processlist –variable State –match statistics –threshold 10,表示,show processlist中State列的值为statistics的线程数超过10则触发收集。
※ 自定义脚本
5. 参考文档
http://www.tuicool.com/articles/JjUNji
http://www.orczhou.com/index.php/2012/06/mysql-troubleshooting-with-pt-stakl/