背景:前台的8台web,某些服务总是时不时的就起独占,然后最后只能通过重启服务来解决,既然都是人为的去重启,那就想着zabbix检测到了以后,通过触发告警后,执行动作来进行重启服务
机器明细:10.100.100.108(zabbi服务器)、10.100.100.146(weblogic服务)
在这里,每次探测weblogic独占,会使用wlst,会吃机器资源,因为资源紧缺,所以探测就不放agent 上了,准备着是放在 108 上的 agent自定义脚本,然后108 远程去探测 146 的服务独占,话不多说,直接上脚本了
108机器上:
python脚本拿来调用远程weblogic服务,当然本机108 上,wlst这种不能少,一会shell脚本会用到的,108上,脚本都是weblogic 的用户和属组,需要初始weblogic 的变量才能使用(在这里我遇到了一个大坑,如果weblogic上有的子服务没有起的话,到了weblogic 的domain控制台 cd 过去会报错的,这个会影响到zabbix的探测,也就是zabbix 拿不到整数的值了,除了那个独占数,还拿到了一堆报警字符串,所以对python脚本得整改下,加入个try except,这样就可以绕过 cd 到挂了的服务上面去了)
cat domain.py
#!/bin/python
import sys
username=sys.argv[1]
password=sys.argv[2]
#url='t3://10.104.120.146:9001'
url=sys.argv[3]
def Getstate():
#global ListenAddress,ServerName,ServerState,ServerHealth,ThreadCount,HoggingThreadCount,HeapFree,LSTARTTIME,FILENAME
#HoggingThreadCount=""
for server in serverlist:
domainRuntime()
ServerName=server.getName()
#print(ServerName)
try:
cd('/ServerRuntimes/'+server.getName())
except WLSTException:
print("服务shutdown")
#print("")
else:
cd('/ServerRuntimes/'+server.getName()+'/ThreadPoolRuntime/ThreadPoolRuntime')
#ServerState = cmo.getState()
#print(ServerState)
HoggingThreadCount=cmo.getHoggingThreadCount()
#print(str(HoggingThreadCount))
#cd('/ServerRuntimes/'+server.getName()+'/ThreadPoolRuntime/ThreadPoolRuntime')
#cd('/ServerRuntimes/web_9711_jspt/ThreadPoolRuntime/ThreadPoolRuntime')
#HoggingThreadCount=cmo.getHoggingThreadCount()
print("服务名" + ServerName + " 独占数是" + str(HoggingThreadCount) )
if __name__ == '__main__':
from wlstModule import *#@UnusedWildImport
#import sys, re, os
#import java
from java.util import Date
from java.text import SimpleDateFormat
connect(username,password, url)
#DomainVersion=cmo.getDomainVersion()
#print(DomainVersion)
serverlist=cmo.getServers()
Getstate()
disconnect()
exit()
cat check_web_146.sh
#!/bin/bash
export Weblogic_wlst_PATH=/u01/weblogic/Oracle/Middleware/wlserver_10.3/common/bin
#Get the Server Configration Information
#Get the Domain Configration Information
$Weblogic_wlst_PATH/wlst.sh /home/weblogic/domain.py weblogic hlwsb6666 t3://10.104.120.146:9001
#$Weblogic_wlst_PATH/wlst.sh /home/weblogic/domain.py weblogic hlwsb6666 t3://10.104.120.146:9001 | grep "web_9801_wsbsfwt" |awk -F ':' '{print $2}'
#$Weblogic_wlst_PATH/wlst.sh /home/weblogic/domain.py weblogic hlwsb6666 t3://10.104.120.147:9001 | grep "web_9801_wsbsfwt" |awk -F ':' '{print $2}'
#$Weblogic_wlst_PATH/wlst.sh /home/weblogic/domain.py weblogic gxbw6666 t3://10.104.120.154:9001 | grep "web_9801_wsbsfwt" |awk -F ':' '{print $2}'
看清楚这个地方, 是到 146 的控制台的,146 上的筛选器要给108开权限,不然你探测不过去的,然后控制台的账号mima也别填错
然后这里就可以开始配置agent自定义脚本了,如下
#!/bin/bash
# 检测weblogic 10.104.120.146 服务 web_9801_wsbsfwt 的独占信息
function web_9801_wsbsfwt_146_Hogging {
sudo sh /home/weblogic/check_web_146.sh | grep "web_9801_wsbsfwt" |awk -F ':' '{print $2}'
}
# 检测weblogic 10.104.120.146 服务 web_9804_wsbsfwt 的独占信息
function web_9804_wsbsfwt_146_Hogging {
sudo sh /home/weblogic/check_web_146.sh | grep "web_9804_wsbsfwt" |awk -F ':' '{print $2}'
}
# 执行function
$1
配置了,记得手动去执行一下,我这里遇到个zabbix到weblogic环境变量的问题,所以我是直接sudo 去执行脚本, /etc/sudoers 里给zabbix配置下就可以了
然后根据这种监控项往zabbix放就可以了,
图形自己选吧,累了累了。。。。。。