使用WSDL登陆Netscaler取得设备状态数据,wsdlnetscaler,nagios插件,监控C
使用WSDL登陆Netscaler取得设备状态数据,wsdlnetscaler,nagios插件,监控C
nagios插件,监控Citrix 负载均衡设备 Netscaler运行状态
很不完善,希望大家指出问题
#!/bin/env python'''check_netscaler requires SUDS, SOAP client for Python.You can get suds from here. https://fedorahosted.org/suds/yum install python-sudsOUTPUT:OK | Average CPU usage 37%, Memory usage 14.05% ; Current HTTP connections 4416, HTTP responses 4397-v'''__author__ = "Sun.qingyun"__license__ = "GPL"__version__ = "0.0.1"__maintainer = ""__email__ = "sun.qingyun@staff.zol.com.cn"__status__ = "Develment"import sysimport stringfrom optparse import OptionParserfrom suds.client import Clientfrom suds.xsd.doctor import Importfrom suds.xsd.doctor import ImportDoctorusage = """\\n Nagios Plugin for Check NetScaler Status \\n%usage: prog [options] arg -H netscalerip -u username -p password -w warning -c critical [-v|-vv]"""parser = OptionParser(usage)parser.add_option('-H', '--hostname', dest='hostname', action='store', type='string', help='netscaler IPAddress or the netscaler hostname')parser.add_option('-u', '--username', dest='username', action='store', type='string', help='Your username')parser.add_option('-p', '--password', dest='password', action='store', type='string', help='Your password')parser.add_option('-w', '--warning', dest='warning', action='store', type='int', default=75, help='Threshold warning Percent default:75')parser.add_option('-c', '--critical', dest='critical', action='store', type='int', default=90, help='Threshold Critical Percent default:90')parser.add_option('-t', '--timeout', dest='timeout', action='store', type='int', help='Timeout seconds while connecting Netscaler')parser.add_option('-v', '--verbose', dest='verbose', action='count', help='Increase Output Verbosity Example:-v -vv')(options, args) = parser.parse_args()NShostname = options.hostnameNSusername = options.usernameNSpassword = options.passwordNScheckwarning = options.warningNScheckcritical = options.criticalNScheckverbose = options.verboseNStimeout = options.timeout * 1000exitval = { "OK" : 0, "WARNING" : 1, "CRITICAL" : 2, "UNKNOWN" : 3 }NSurl = 'http://' + NShostname + '/api/NSStat.wsdl'NSapi = 'http://' + NShostname + '/soap/'imp = Import('http://schemas.xmlsoap.org/soap/encoding/')imp.filter.add("urn:NSConfig")d = ImportDoctor(imp)client = Client(NSurl, doctor=d, location=NSapi, timeout=NStimeout)def main(): NSlogged = client.service.login(username=NSusername, password=NSpassword) if NSlogged.rc == 0: NSsystemstatus = getSystem() NShttpconnstatus = getHTTPConns() if (isinstance(NSsystemstatus, dict) and isinstance(NShttpconnstatus, dict)): NScpumasterusage = int(NSsystemstatus['mastercpuusage']) NScpuslaveusage = int(NSsystemstatus['slavecpuusage']) NScpunumbers = int(NSsystemstatus['numcpus']) NScpuusage = NSsystemstatus['rescpuusage'] NSmemtotal = NSsystemstatus['memsizemb'] NSmeminuse = NSsystemstatus['memuseinmb'] NSmemusage = str(round(float(NSmeminuse) / float(NSmemtotal) * 100, 2)) NSsysteminfo = 'Average CPU usage ' + str(NScpuusage) + '%, Memory usage ' + NSmemusage + '%' NShttpconnsrate = NShttpconnstatus['httprequestsrate'] NShttpresporate = NShttpconnstatus['httpresponsesrate'] NSconnsinfo = 'Current HTTP connections ' + str(NShttpconnsrate) + ', HTTP responses ' + str(NShttpresporate) NScheckmessage = NSsysteminfo + ' ; ' + NSconnsinfo NSexitstatus = NScpucompare(NScpuusage) else: NSexitstatus = "UNKNOWN" else: NScheckmessage = NSsystemstatus = NShttpconnstatus = "Error during login" NSexitstatus = "UNKNOWN" client.service.logout() if NScheckverbose >= 1: NScheckoutput = NSexitstatus + ' | ' + str(NSsystemstatus) + str(NShttpconnstatus) else: NScheckoutput = NSexitstatus + ' | ' + NScheckmessage print NScheckoutput sys.exit(exitval[NSexitstatus])def getSystem(): NSsystem = client.service.statsystem() if NSsystem.rc == 0: NSsystemstatus = {} NSsystemstatus = dict(NSsystem.List[0]) else: NSsystemstatus = "Error during get system status" return NSsystemstatusdef getHTTPConns(): NShttpconns = client.service.statprotocolhttp() if NShttpconns.rc == 0: NShttpconnstatus = {} NShttpconnstatus = dict(NShttpconns.List[0]) else: NShttpconnstatus = "Error during get http connections status" return NShttpconnstatusdef NScpucompare(cpu): if cpu >= NScheckcritical: exitstatus = "CRITICAL" elif cpu >= NScheckwarning: exitstatus = "WARNING" else: exitstatus = "OK" return exitstatusif __name__ == '__main__': main()#该片段来自于http://byrx.net
评论关闭