使用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

评论关闭