使用shell脚本检测数据库连接访问情况(r10笔记第98天)

Posted 杨建荣的学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用shell脚本检测数据库连接访问情况(r10笔记第98天)相关的知识,希望对你有一定的参考价值。

最近要迁移几套环境,涉及的数据库有Oracle,mysql,数量还不少,能够达到的目标就是整合后的服务器缩减幅度达到70%,这样一种迁移场景,就涉及到很多的网络连接情况,如果本身业务优先级高,涵盖的是全局业务,那么这个影响就会无限放大。所以对于网络连接情况的监控也尤为重要。
    其实对于这方面的内容,严格来说,DBA能够根据防火墙信息列表筛查到对应的应用服务器IP,然后交由负责的专人来负责跟进就可以了,但是这个时候因为重重原因,我要ipositive一些。这件事情就希望我能够有自己的信息,不至于到了后面,数据库迁移过去了,应用连不上去,然后大家再花一些时间来确认是之前就如此,还是因为修改不当导致。其实这种事情想想就挺闷的。
    那么我就positive一些,怎么样得到客户端的数据库连接情况呢,这个过程中就要重点关注数据库的连接情况,一种思路就是查看监听日志,另外一种思路就是抓取网络的访问情况。
我们两者结合一下,可以提前收集这些访问的信息。
简单想想,刷开膀子来干,脚本内容如下:

function get_conn_info
{
ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print $2}'`
DB_LISTEN_PORT=`grep -i PORT $ORACLE_HOME/network/admin/listener.ora|awk -F\( '{print $5}'|sed -e 's/PORT//g' -e 's/=//g' -e 's/)//g'`
for TMP_PORT in $DB_LISTEN_PORT
do
netstat -nalp|grep ESTABLISHED|awk '{print $5 "  " $4}'|grep $TMP_PORT|awk -F: '{print $4}'| sort|uniq|sed /^[[:space:]]*$/d|awk -v TMP_PORT=$TMP_PORT '{print $1" "TMP_PORT}'
done
}


get_conn_info  > conn_info.lst
while true
do
get_conn_info  > tmp_conn_info.lst
sdiff conn_info.lst tmp_conn_info.lst|grep \> |awk '{print $2" "$3}' >> diff.lst
sleep 60
done

我们从$ORACLE_HOME/network/admin下分析listener.ora,得到一个端口列表,比如1521,1522,1523等
然后拿着这些端口信息去和网络访问中的记录去做匹配,如果有匹配的记录,就记录下来,如果有新增的信息记录,就写入一个临时文件,把结果整合起来,这样得到的列表就是一个持续更新的IP信息列表,当然这个频率我根据目前的业务情况做了改变,很多连接都是长连接,有部分是短连接,所以我就把这个频率做了调整。目前是1分钟收集一次。
查看得到的连接信息列表,这样哪个端口访问的,哪台服务器都是一目了然。
$ less conn_info.lst
10.11.1.158 1522
10.11.128.169 1523
10.11.133.82 1523
10.11.2.140 1525
10.11.2.145 1526

以上是关于使用shell脚本检测数据库连接访问情况(r10笔记第98天)的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本:监控HTTP服务的状态(测试返回码)

shell脚本检测服务

怎么用js脚本判断自动检测网络连接是不是正常?

兄弟连 企业shell笔试题 16-31

错误 R10(引导超时)Heroku 与 python 脚本

shell 脚本检测某网段中监听80端口 有多少