设计背景
在linux端,GBase 8a由于缺少对sql进程的有效监控和跟踪,致使维护工作不便。本工具的设计宗旨即解决该类维护问题。
设计目的
(1) 实时监控集群所有节点上sql任务并发执行情况
(2) 监控信息可压缩存档,便于追溯
(3) 监控范围可调节
(4) 监控信息含有分类统计功能
(5) 监控信息按照详细和简单分类,简单用于排查问题,详细用于追溯
工具说明
(1)该脚本用于记录和实时监控数据库中正在执行的sql,包括sql的执行时间,执行状态,sql下发源头等信息。
(2)使用前赋予可执行权限。如: chmod +x always.sh chmod +x gcluster_process.sh
(3)该脚本只部署在集群主节点上(集群层)即可。
(4)用gbase用户新建目录 /opt/gbasetools/always
(5)将gcluster_process.sh,always.sh脚本和node_ip.list文件放在该目录下,在gcluster_process.sh脚本中修改登陆集群的用户和口令。
在node_ip.list中存放coor节点ip; 将always.sh 挂在后台执行即可: sh always.sh &
(6)脚本正常会生成 always_result.txt和always_result.txt.full两个文件。full中存放着完整的sql,便于追溯,不带full的日志尾部有sql截断
便于运维监控时使用。日常运维时直接tail -f always_result.txt即可,可作为日常运维集群的监控页面使用。
(7)显示结果中区分加载、非加载、普通sql的分类统计
(8)文件大小超过50万行或500MB会自动打包归档,并形成新的文件
工具详情
always.sh内容如下
#!/bin/bash while [ 1 ] do echo " `date +%F.%T`########################################################################################################" >> always_result.txt sh gcluster_process.sh | grep -v Sleep | grep -v "show full processlist" > tmp.gcluster_p.log # catch full processlist log echo " `date +%F.%T`########################################################################################################" >> always_result.txt.full cat tmp.gcluster_p.log | grep -viE 'Info$|event_scheduler.*Waiting for next activation' |sort -k 8,8nr >> always_result.txt.full cat tmp.gcluster_p.log| grep -v Info |sed s/"checking permissions"/" "/g | awk '{print $1,$2,$3,$8,$9,$10,$11,$12,substr($13,1,500),substr($14,1,500),$15,$16,$17,$18}' |sort -k 5,5nr >> always_result.txt echo non-load process number: `grep -v 'processlist' tmp.gcluster_p.log |grep -viE 'LOAD DATA INFILE' | grep -v Host | wc -l` >> always_result.txt echo load process number: `grep -iE 'LOAD DATA INFILE' tmp.gcluster_p.log| wc -l` >> always_result.txt echo sql-stmt number: `grep -iE 'insert|delete|select|update|drop|create' tmp.gcluster_p.log|grep -v 'LOAD DATA INFILE'| wc -l` >> always_result.txt sleep 10 if [ `cat always_result.txt|wc -l` -gt 500000 ] || [ `du -sk always_result.txt.full | awk '{print $1}'` -gt 500000 ] ;then tar cvfz `pwd`/logbakup/always_result_`date +%F.%H%M%S`.tar.gz always_result.txt tar cvfz `pwd`/logbakup/always_result_full_`date +%F.%H%M%S`.tar.gz always_result.txt.full echo >always_result.txt echo >always_result.txt.full fi done
gcluster_process.sh内容如下:
#!/bin/bash . /home/gbase/.gbase_profile cmd="$GCLUSTER_HOME/bin/gbase -ugbase -pgbase20110531" while read node_ip do $cmd -h $node_ip -P5258 -e "show full processlist" |sed 's/\\n/ /g'|sed 's/\\t/ /g'| while read line do dtime=`date +%Y-%m-%d' '%H:%M:%S` echo "#$dtime#HOST:$node_ip---------" "$line" done done<node_ip.list
node_ip.list 内容如下:
192.168.56.101 192.168.56.102