今天要介绍的是Percona中的pt-stalk工具。
有些问题间歇性的发生,监控信息也许根本来不及采集信息,MySQL的锁定或活动的高峰通常没有留下任何数据来分析。
Pt-stalk 会监测一个触发条件,然后收集相关信息,该工具会将信息写入到 指定的日志文件,默认以时间格式区分。对于show global status中的信息,往往用Threads_running
语法:pt-stalk [OPTIONS] [-- MYSQL OPTIONS]
使用选项:
--collect : default:yes 收集系统信息.
--collect-gdb 收集GDB的跟踪信息。可能会是MySQL处于冻结的状态。(在线上的话,慎用)
--collect-oprofile 收集oprofile信息,通过打开一个oprofile session实现。
--collect-strace 通过附加一个 strace来收集server信息。可能运行很慢, 这个不能和--collect-gdb 同时使用。
--collect-tcpdump 抓取MySQL SERVER 监听接口的数据包。可以使用pt-query-digest进行解码。
--config‘’,‘’ 逗号分隔的选项,如果使用的话,必须放在第一位.
--cycles = 默认为5,在触发器在被触发几次后再开始收集信息。
--daemonize 作为一个守护进程运行
--dest 检测数据存放的位置。默认为 /var/lib/pt-stalk
--disk-bytes-free 默认100m ,如果磁盘空间小于100M的话,就不会收集信息。 如果 在–dest中有以前收集的数据信息,那么这次收集就会根据上次的结果大小来判断自己此次收集数据的大小
--disk-pct-free :默认是5 ,当磁盘空间小于5%时,就不会收集信息。
--function 指定触发器的数据源The default value watches SHOW GLOBAL STATUS,当然也可以监控processlist 这个 , 后面可以跟选项 -variables 和-threshold
使用 status 时,指定触发器的数据来源于SHOW GLOBAL STATUS, --variables 来定义哪个staus值来出发trigger。
如: --function status --variable Threads_connected --threshold 2500
Processlist 触发器的数据来源于: show full processlist 这个时候应该使用 –variable 和 –match
如:--function processlist --variable Status --match statistics –threshold 10
--interval: 默认情况pt-stalk会每隔一秒检查一次状态数据,判断是否需要触发收集。该参数指定间隔时间,默认是1秒
--iterations:该参数指定pt-stalk在收集几次故障现场后就退出。默认pt-stalk会一直运行
--retention-time 收集信息文件保留的天数,默认30天
--sleep: 为防止一直触发收集数据,该参数指定在某次触发后,必须sleep一段时候才继续观察并触发收集。默认是300秒
--threshold 默认是25 触发的阀值
--variable 默认为Threads_running
--run-time: 触发收集后,该参数指定收集多长时间的数据。默认是30秒(大部分情况下不需要修改)
--function 参数 传入 bash shell 脚本,结果必须要输出一个数字
--plugin 参数可以自定义 一些动作
pt-stalk 还支持自定义拓展脚本:
举例:
为方便测试,在测试机上如下:
/usr/local/bin/pt-stalk --function status --variable Threads_running --threshold 1 --cycles=1 --daemonize -- --socket=/tmp/mysql.sock
pt-stalk作为 守护进程运行,当Threads_running 为1的时候触发触发器,开始收集,保存位置为/var/lib/pt-stalk
日志信息: /var/log/pt-stalk.log
2012_08_29_20_27_03 Check results: Threads_running=1, matched=no, cycles_true=0 2012_08_29_20_27_04 Check results: Threads_running=1, matched=no, cycles_true=0 2012_08_29_20_27_05 Check results: Threads_running=1, matched=no, cycles_true=0 2012_08_29_20_27_06 Check results: Threads_running=1, matched=no, cycles_true=0 2012_08_29_20_27_07 Check results: Threads_running=1, matched=no, cycles_true=0 2012_08_29_20_27_08 Check results: Threads_running=1, matched=no, cycles_true=0 2012_08_29_20_27_09 Check results: Threads_running=1, matched=no, cycles_true=0
收集的日志:
2012_08_29_20_34_54-df 2012_08_29_20_34_59-iostat-overall 2012_08_29_20_35_03-mpstat-overall 2012_08_29_20_35_07-output 2012_08_29_20_35_11-slabinfo 2012_08_29_20_35_15-vmstat-overall 2012_08_29_20_34_54-disk-space 2012_08_29_20_34_59-lock-waits 2012_08_29_20_35_03-mutex-status1 2012_08_29_20_35_07-pmap 2012_08_29_20_35_11-sysctl 2012_08_29_20_34_54-diskstats 2012_08_29_20_34_59-log_error 2012_08_29_20_35_03-mysqladmin 2012_08_29_20_35_07-processlist 2012_08_29_20_35_11-top 2012_08_29_20_35_17-disk-space