前言:最近生产上业务卡顿,怀疑是程序连数据库有问题,现需要部署监控,获取各服务与数据库的连接数,输出格式为key:vaule。
一、传统模式
代码语言:javascript复制#!/bin/bash
XDB1=10.11.11.116
XDB2=10.11.11.117
FLOW_PS=`ps -ef|grep flow|grep -v grep|awk {'print $2'}`
OUT_PS=`ps -ef|grep out|grep -v grep|awk {'print $2'}`
SETT_PS=`ps -ef|grep sett|grep -v grep|awk {'print $2'}`
TASK_PS=`ps -ef|grep task|grep -v grep|awk {'print $2'}`
WEB_PS=`ps -ef|grep web|grep -v grep|awk {'print $2'}`
TOM_PS=`ps -ef|grep apache-tomcat|grep -v grep|awk {'print $2'}`
FLOW_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $FLOW_PS|wc -l`
FLOW_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $FLOW_PS|wc -l`
OUT_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $OUT_PS|wc -l`
OUT_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $OUT_PS|wc -l`
SETT_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $SETT_PS|wc -l`
SETT_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $SETT_PS|wc -l`
TASK_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $TASK_PS|wc -l`
TASK_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $TASK_PS|wc -l`
WEB_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $WEB_PS|wc -l`
WEB_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $WEB_PS|wc -l`
TOM_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $TOM_PS|wc -l`
TOM_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $TOM_PS|wc -l`
echo "flow116:$FLOW_CNT116"
echo "flow117:$FLOW_CNT117"
echo "out116:$OUT_CNT116"
echo "out117:$OUT_CNT117"
echo "sett116:$SETT_CNT116"
echo "sett117:$SETT_CNT117"
echo "task116:$TASK_CNT116"
echo "task117:$TASK_CNT117"
echo "web116:$WEB_CNT116"
echo "web117:$WEB_CNT117"
echo "apache-tomcat116:$TOM_CNT116"
echo "apache-tomcat117:$TOM_CNT117"
一共6个服务,2个数据库,输出为“服务名” “数据库标签” “连接数”
运行结果:
二、循环
代码语言:javascript复制#!/bin/bash
xdb="10.11.11.116 10.11.11.117"
for ps in flow out sett task web apache-tomcat
do
num=`ps -ef|grep $ps|grep -v grep|awk {'print $2'}`
for db in $xdb
do
cnt=`netstat -anlp|grep ESTABLISHED|grep $db|grep $num|wc -l`
tip=`echo $db|cut -d . -f 4`
echo "${ps}${tip}:${cnt}"
done
done
进程名为第一个循环,数据库名为第二个循环,tip用来区分不同数据库
运行结果:
三、总结
两种不通的方式可以得到相同的结果。传统方式直接明了、通俗易懂,但是略显臃肿;对比之下循环方式简洁优雅。
更多请点击: shell专题