查看: 25007|回复: 13

[原创] WebLogic监控脚本 在AIX测试通过

[复制链接]
论坛徽章:
0
发表于 2009-1-9 14:36 | 显示全部楼层 |阅读模式
客户系统上线,监控WebLogic性能5天,实在无聊,写了一个shell供大家参考!
有问题可以联系我!

显示样式
Time ServerName ListenAddress Port State Admin Sockets Request Thread Idle
20090109141554 coreServer01 141.16.30.35 7003 RUNNING false 45 1220581 100 100
20090109141601 coreServer02 141.16.30.45 7003 RUNNING false 45 1038718 100 98
20090109141607 coreServer03 141.16.30.35 7005 RUNNING false 42 615836 100 99
20090109141614 coreServer04 141.16.30.45 7005 RUNNING false 18 668750 100 100
20090109141620 coreServer05 141.16.30.35 7007 RUNNING false 16 663218 25 24
20090109141627 coreServer06 141.16.30.45 7007 RUNNING false 21 623847 100 96
20090109141633 coreServer07 141.16.30.35 7009 RUNNING false 16 685265 100 100
20090109141640 coreServer08 141.16.30.45 7009 RUNNING false 14 657722 100 99
20090109141646 jsdshxzg 141.16.30.35 7001 RUNNING true 17 31384 25 25
Time PoolName minNum maxNum serverName status Active High Total Waiting WaitingHigh
20090109141649 zghx_131 30 100 coreServer01 Running 0 13 30 0 0
20090109141653 zghx_131 30 100 coreServer02 Running 0 37 119 0 8
20090109141656 zghx_131 30 100 coreServer03 Running 1 14 30 0 0
20090109141700 zghx_131 30 100 coreServer04 Running 0 10 30 0 0
20090109141704 zghx_131 30 100 coreServer05 Running 1 20 30 0 0
20090109141707 zghx_131 30 100 coreServer06 Running 1 7 30 0 0
20090109141711 zghx_131 30 100 coreServer07 Running 1 7 30 0 0
20090109141714 zghx_131 30 100 coreServer08 Running 1 7 30 0 0


  1. #!/usr/bin/ksh
  2. # The shell script is for monitoring WebLogic Server runtime infomation.
  3. # Author : roger ling
  4. # Email : [email]iamroger.[email]ling@gmail.com[/email][/email]
  5. # MSN : [email]iamroger.[email]ling@hotmail.com[/email][/email]

  6. # help function
  7. help()
  8. {
  9. cat <<EOF
  10. mws -- Monitor WebLogic Server Status by roger
  11. USAGE: mws.sh [-h] [-s] [-p] admin_url weblogic_user weblogic_password [interval] [count]
  12. OPTIONS: -h help text.
  13. -s[servername1,servername2] for runtime state of server,
  14. -p[poolname1,poolname2] for connection pool state of server,
  15. EXAMPLE: mws.sh t3://localhost:7001 weblogic weblogic
  16. EOF
  17. exit 0;
  18. }

  19. while [ -n "$1" ]; do
  20. case $1 in
  21. -h) help; shift 1;; # function help called.
  22. -s*) s_mon_flag=true; s_ser_name=`echo $1 | sed -e 's/^\(..\)//g'`; shift 1;;
  23. -p*) p_mon_flag=true; p_poo_name=`echo $1 | sed -e 's/^\(..\)//g'`; shift 1;;
  24. -*) echo "error : no such option $1. -h for help"; exit 0;;
  25. *) break;;
  26. esac
  27. done

  28. if [ $# -lt 3 ]; then
  29. help && exit 0;
  30. fi

  31. # get command line parameters
  32. admin_url=$1
  33. weblogic_user=$2
  34. weblogic_password=$3
  35. interval=$4
  36. count=$5

  37. # get domain
  38. get_domain()
  39. {
  40. [ -z "$domain" ] && domain=`java -cp /bea/bea/weblogic81/server/lib/weblogic.jar weblogic.Admin -url $admin_url -username $weblogic_user -password $weblogic_password GET -pretty -type Server -property Parent | awk '/^\t/' | awk 'NR==1{print $2}'`
  41. return 0;
  42. }

  43. # get server list
  44. get_server_list()
  45. {
  46. [ -z "$server_list" ] && server_list=`java -cp /bea/bea/weblogic81/server/lib/weblogic.jar weblogic.Admin -url $admin_url -username $weblogic_user -password $weblogic_password GET -pretty -type Server -property Name -property ListenAddress -property ListenPort | grep -v MBeanName | grep -v -e '^[\-]' | sed -e 's/ //g' -e 's/^ //g' | awk -F':' '{print $1" "$2}' | awk '
  47. BEGIN{
  48. }
  49. {
  50. for (i=1; i<=NF; i++) {
  51. a[NR,i]=$i;
  52. }
  53. }
  54. END{
  55. for(i=1;i<=NR;i=i+3) {
  56. printf("%s %s %s\n", a[i+2,2], a[i,2], a[i+1,2]);
  57. }
  58. }
  59. ' | sort -kn1`;
  60. return 0;
  61. }

  62. monitor_server()
  63. {
  64. get_domain;
  65. get_server_list;

  66. echo "Time\t\tServerName\tListenAddress\tPort\tState\tAdmin\tSockets\tRequest\tThread\tIdle" && echo ${server_list} | awk '{for (i=1; i<=NF; i=i+3) printf("%s %s %s\n", $i, $(i+1), $(i+2))}' |
  67. while read line; do
  68. serverName=`echo $line | awk '{print $1}'`;
  69. if [ $s_ser_name <> "" ]; then
  70. isInclusive=`echo $s_ser_name | grep $serverName | wc -l` && [ $isInclusive -le 0 ] && continue;
  71. fi
  72. serverIP=`echo $line | awk '{print $2}'`;
  73. serverPort=`echo $line | awk '{print $3}'`;
  74. serverRuntime=`echo $line | awk '{print "java -cp /bea/bea/weblogic81/server/lib/weblogic.jar weblogic.Admin -url t3://"$2":"$3" -username '"$weblogic_user"' -password '"$weblogic_password"' GET -pretty -type ServerRuntime -property State -property AdminServer -property OpenSocketsCurrentCount"}' | sh | awk '/^\t/' | awk -F'\t' '{print $2}' | sed -e 's/ //g' | awk -F':' '
  75. BEGIN{
  76. }
  77. {
  78. for (i=1; i<=NF; i++) {
  79. a[NR,i]=$i;
  80. }
  81. }
  82. END{
  83. for(i=1;i<=NR;i=i+4) {
  84. printf("%s %s %s %s\n", a[i+2,2], a[i,2], a[i+1,2], a[i+3,2]);
  85. }
  86. }
  87. '`;
  88. serverRuning=`echo $serverRuntime | awk '{print $1}'`;
  89. serverAdmin=`echo $serverRuntime | awk '{print $2}'`;
  90. serverSocket=`echo $serverRuntime | awk '{print $3}'`;
  91. serverQueue=`echo $line | awk '{print "java -cp /bea/bea/weblogic81/server/lib/weblogic.jar weblogic.Admin -url t3://"$2":"$3" -username '"$weblogic_user"' -password '"$weblogic_password"' GET -pretty -mbean '"$domain"':Location="$1",Name=weblogic.kernel.Default,ServerRuntime="$1",Type=ExecuteQueueRuntime -property ExecuteThreadCurrentIdleCount -property ExecuteThreadTotalCount -property ServicedRequestTotalCount"}' | sh | awk '/^\t/' | awk -F'\t' '{print $2}' | sed -e 's/ //g' | awk -F':' '
  92. BEGIN{
  93. }
  94. {
  95. for (i=1; i<=NF; i++) {
  96. a[NR,i]=$i;
  97. }
  98. }
  99. END{
  100. for(i=1;i<=NR;i=i+4) {
  101. printf("%s %s %s\n", a[i+1,2], a[i,2], a[i+2,2]);
  102. }
  103. }
  104. '`;
  105. serverIdle=`echo $serverQueue | awk '{print $1}'`;
  106. serverTotal=`echo $serverQueue | awk '{print $2}'`;
  107. serverRequests=`echo $serverQueue | awk '{print $3}'`;
  108. echo `date +"%Y%m%d%H%M%S"`"\t"$serverName"\t"$serverIP"\t"$serverPort"\t"$serverRuning"\t"$serverAdmin"\t"$serverSocket"\t"$serverRequests"\t"$serverIdle"\t"$serverTotal
  109. done
  110. }

  111. monitor_pool()
  112. {
  113. get_domain;
  114. get_server_list;

  115. [ -z "$pool_list" ] && pool_list=`java -cp /bea/bea/weblogic81/server/lib/weblogic.jar weblogic.Admin -url $admin_url -username $weblogic_user -password $weblogic_password GET -pretty -type JDBCConnectionPool -property Name -property InitialCapacity -property MaxCapacity -property Targets | awk '/^\t/' | tr -d '\t' | sed -e 's/ //g' | awk -F':' '{print $1" "$2}' | awk '{for (i=1; i<=NF; i=i+3) printf("%s %s %s\n", $i, $(i+1), $(i+2))}' | awk '
  116. BEGIN{
  117. }
  118. {
  119. for (i = 1; i <= NF; i++) {
  120. a[NR,i] = $i;
  121. }
  122. }
  123. END{
  124. for (i = 1; i <= NR; i=i+4) {
  125. printf("%s %s %s %s\n", a[i+2,2], a[i,2], a[i+1,2], a[i+3,2]);
  126. }
  127. }
  128. '`

  129. echo "Time\t\tPoolName\tminNum\tmaxNum\tserverName\tstatus\tActive\tHigh\tTotal\tWaiting\tWaitingHigh" &&
  130. echo $pool_list | awk '{for (i=1; i<=NF; i=i+4) printf("%s %s %s %s\n", $i, $(i+1), $(i+2), $(i+3))}' | sort |
  131. while read line; do
  132. poolName=`echo $line | awk '{print $1}`;
  133. if [ $p_poo_name <> "" ]; then
  134. isInclusive=`echo $p_poo_name | grep $poolName | wc -l` && [ $isInclusive -le 0 ] && continue;
  135. fi
  136. minNum=`echo $line | awk '{print $2}`;
  137. maxNum=`echo $line | awk '{print $3}`;
  138. target=`echo $line | awk '{print $4}`;
  139. for line1 in `echo ${target} | sed -e 's/,/ /g`; do
  140. echo $line1;
  141. done | sort -kn1 | uniq |
  142. while read line2; do
  143. echo ${server_list} | awk '{for (i=1; i<=NF; i=i+3) printf("%s %s %s\n", $i, $(i+1), $(i+2))}' | grep $line2 |
  144. while read line3; do
  145. serverName=`echo $line3 | awk '{print $1}'`;
  146. serverIP=`echo $line3 | awk '{print $2}'`;
  147. serverPort=`echo $line3 | awk '{print $3}'`;
  148. poolInfo=`java -cp /bea/bea/weblogic81/server/lib/weblogic.jar weblogic.Admin -url t3://$serverIP:$serverPort -username $weblogic_user -password $weblogic_password GET -pretty -mbean $domain:Location=$serverName,Name=$poolName,ServerRuntime=$serverName,Type=JDBCConnectionPoolRuntime -property ActiveConnectionsCurrentCount -property ActiveConnectionsHighCount -property ConnectionsTotalCount -property State -property WaitingForConnectionCurrentCount -property WaitingForConnectionHighCount | awk '/^\t/' | tr -d '\t' | sed 's/ //g' | awk -F':' '
  149. BEGIN{
  150. }
  151. {
  152. for (i = 1; i <= NF; i++) {
  153. a[NR,i] = $i;
  154. }
  155. }
  156. END{
  157. for (i = 1; i <= NR; i=i+6) {
  158. printf("%s %s %s %s %s %s\n", a[i+3,2], a[i,2], a[i+1,2], a[i+2,2], a[i+4,2], a[i+5,2]);
  159. }
  160. }
  161. '`
  162. poolStat=`echo $poolInfo | awk '{print $1}'`
  163. poolACCC=`echo $poolInfo | awk '{print $2}'`
  164. poolACHC=`echo $poolInfo | awk '{print $3}'`
  165. poolCTC=`echo $poolInfo | awk '{print $4}'`
  166. poolWFCC=`echo $poolInfo | awk '{print $5}'`
  167. poolWFCHC=`echo $poolInfo | awk '{print $6}'`
  168. echo `date +"%Y%m%d%H%M%S"`"\t"$poolName"\t"$minNum"\t"$maxNum"\t"$serverName"\t"$poolStat"\t"$poolACCC"\t"$poolACHC"\t"$poolCTC"\t"$poolWFCC"\t"$poolWFCHC
  169. done
  170. done
  171. done
  172. }

  173. wcount=1;
  174. [ -z "$interval" ] && interval=0;
  175. [ -z "$count" ] && count=1;
  176. while [ $wcount -le $count ]; do
  177. [ "$s_mon_flag" = "true" ] && monitor_server;
  178. [ "$p_mon_flag" = "true" ] && monitor_pool;

  179. wcount=$wcount+1;
  180. sleep $interval;
  181. done

复制代码

[ 本帖最后由 jx_lpt 于 2009-1-9 14:48 编辑 ]

mws.rar

2.12 KB, 下载次数: 383

论坛徽章:
0
发表于 2009-1-21 10:39 | 显示全部楼层
谢谢!

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
186
授权会员
日期:2008-07-27 22:25:202014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14版主4段
日期:2015-02-26 02:21:03慢羊羊
日期:2015-03-04 14:51:35
发表于 2009-1-23 17:58 | 显示全部楼层
支持原创~

使用道具 举报

回复
论坛徽章:
0
发表于 2009-6-4 17:11 | 显示全部楼层
./mws.sh t3://10.110.12.32:1200 weblogic weblogic


这么写不对么?我执行后什么都看不见呢?

请指教啦

使用道具 举报

回复
认证徽章
论坛徽章:
5
2011新春纪念徽章
日期:2011-02-18 11:43:35ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:09
发表于 2010-1-25 21:38 | 显示全部楼层
输出不知道去哪里了

使用道具 举报

回复
论坛徽章:
2
ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:24
发表于 2010-2-6 12:32 | 显示全部楼层
不错,而且这个程序,稍微修改一下weblogic帐号,密码,跟classpath,在各个版本上,都可以运行

使用道具 举报

回复
认证徽章
论坛徽章:
0
发表于 2010-2-25 15:11 | 显示全部楼层
命令执行后没有输出啊

使用道具 举报

回复
论坛徽章:
2
2010新春纪念徽章
日期:2010-03-01 11:20:05优秀写手
日期:2014-03-12 06:00:13
发表于 2010-2-28 12:38 | 显示全部楼层
这个监控脚本是可以监控weblogic的serverstate和healthstate,但是脚本中运行的welogic.admin太耗资源,如果在同一台机器上部署了多个域就更明显。我用perl为nagios写了weblogic监控脚本(http://www.itpub.net/thread-1264284-1-1.html),原理相同,但运行起来速度很慢,返回数据需要2.5秒左右,其中90%的时间都是在处理脚本中的weblogic.admin命令。我的系统跑在vmware esx上,可能和这个也有关系。
后来想改用snmp监控weblogic serverstate和healthstate,但在snmp的所有OID中找不到healthstate的oid,这个问题正在解决中,详细请看http://www.itpub.net/thread-1272621-1-1.html

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2007-10-11 17:52:042010新春纪念徽章
日期:2010-03-01 11:08:37ITPUB社区OCM联盟徽章
日期:2014-08-11 09:13:02
发表于 2010-3-11 10:53 | 显示全部楼层
适用于WEBLOGIC 什么版本

使用道具 举报

回复
认证徽章
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
发表于 2010-8-29 12:42 | 显示全部楼层
好长的脚本,lz厉害啊,谢谢分享。。。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时9.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表