监控行业

注册

 

发新话题 回复该主题

MySQL监控利器之PtStalk爱 [复制链接]

1#
哪里医院治疗白癜风好 http://www.ykhongye.com/m/

作者:xuty

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

一、概述

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

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

二、介绍

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

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

1.OS层面的CPU、IO、内存、磁盘、网络等信息;

2.MySQL层面的行锁等待、会话连接、主从复制,状态参数等信息。

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

三、使用

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

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

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

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

其他一些重要参数:

iterations:该参数指定pt-stalk在触发收集几次后退出,默认会一直运行。run-time:触发收集后,该参数指定收集多长时间的数据,默认30秒。sleep:该参数指定在触发收集后,sleep多久后继续监控,默认秒。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官方贴的伪代码,逻辑也比较清晰,大家可以看下:

whiletrue;doif--variablefrom--function--threshold;thencycles_true++ifcycles_true=--cycles;then--notify-by-emailif--collect;thenif--disk-bytes-freeand--disk-pct-freeok;then(--collectfor--run-timeseconds)firmfilesin--destolderthan--retention-timefiiter++cycles_true=0fiifiter--iterations;thensleep--sleepsecondselsebreakfielseifiter--iterations;thensleep--intervalsecondselsebreakfifidonermold--destfilesolderthan--retention-timeif--collectprocessarestillrunning;thenwaitupto--run-time*3secondskillanyremaining--collectprocessesfi

四、使用场景

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

4.1场景一

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

pt-stalk--functionstatus--variableThreads_connected--threshold--daemonize--user=root--password=######

4.2场景二

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

pt-stalk--functionstatus--variableThreads_running--threshold--daemonize--user=root--password=######

4.3场景三

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

pt-stalk--no-stalk--run-time=60--iterations=1--user=root--password=Gepoint

五、监控输出

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

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

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

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

我们来看下其内容:

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

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

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

六、pt-sift

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

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

七、小结

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

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

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

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

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

关于爱可生

爱可生成立于年,依托于融合、开放、创新的数据处理技术和服务能力,为大型行业用户的特定场景提供深度挖掘数据价值的解决方案。

公司持续积累的核心关键技术,覆盖到分布式数据库集群、云数据平台、数据库大体量运管平台、海量数据集成于存储、清洗与治理、人工智能分析挖掘、可视化展现、安全与隐私保护等多个领域。

公司已与多个行业内的专业公司建立了长期伙伴关系,不断促进新技术与行业知识相结合,为用户寻求新的数据驱动的价值增长点。公司已在金融、能源电力、广电、政府等行业取得了众多大型用户典型成功案例,获得了市场的认可和业务的持续增长。

分享 转发
TOP
发新话题 回复该主题