背景:前台的8台web,某些服务总是时不时的就起独占,然后最后只能通过重启服务来解决,既然都是人为的去重启,那就想着zabbix检测到了以后,通过触发告警后,执行动作来进行重启服务


机器明细:10.100.100.108(zabbi服务器)、10.100.100.146(weblogic服务)

在这里,每次探测weblogic独占,会使用wlst,会吃机器资源,因为资源紧缺,所以探测就不放agent 上了,准备着是放在 108 上的 agent自定义脚本,然后108 远程去探测 146 的服务独占,话不多说,直接上脚本了


108机器上:

zabbix 怎么监控weblogic自服务的独占_zabbix

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()



zabbix 怎么监控weblogic自服务的独占_zabbix_02


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}'

zabbix 怎么监控weblogic自服务的独占_weblogic独占_03

看清楚这个地方, 是到 146 的控制台的,146 上的筛选器要给108开权限,不然你探测不过去的,然后控制台的账号mima也别填错


zabbix 怎么监控weblogic自服务的独占_zabbix_04


然后这里就可以开始配置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自服务的独占_weblogic独占_05

zabbix 怎么监控weblogic自服务的独占_bash_06


配置了,记得手动去执行一下,我这里遇到个zabbix到weblogic环境变量的问题,所以我是直接sudo 去执行脚本, /etc/sudoers 里给zabbix配置下就可以了


zabbix 怎么监控weblogic自服务的独占_weblogic独占_07


然后根据这种监控项往zabbix放就可以了,


zabbix 怎么监控weblogic自服务的独占_zabbix_08



图形自己选吧,累了累了。。。。。。