nowsms短信彩信框架的admin页面有提供一个xml页面,该页面详细显示modem的各个状态。然后结合nagios,可以很好的监控modem状态。该xml地址类似如:http://192.168.0.115:8800/admin/xmlstatus?username=sijitao&password=sijitao。
如果对python如何解析xml不是很清楚的可以参考这个网址:http://www.runoob.com/python/python-xml.html。
脚本内容
脚本中暂时只需要获取smscstatus中的status,显示ok说明modem接收发送正常,脚本类似如下。
#!/usr/bin/env python #coding:utf-8 import urllib2 from xml.dom.minidom import parse import sys import argparse parser=argparse.ArgumentParser(description="check nowsms status script.") parser.add_argument("-H",dest="host",help="Host name argument for servers using host headers") parser.add_argument("-P",dest="port",default=8800,help="nowsms http port ,default 8800.") parser.add_argument("-u",dest="username",help="nowsms admin username") parser.add_argument("-p",dest="password",help="nowsms admin user's password") args=parser.parse_args() if not args.host or not args.port or not args.username or not args.password : print "Critical - Invalid command,please check." sys.exit(2) url='http://%s:%s/admin/xmlstatus?username=%s&password=%s' % (args.host,args.port,args.username,args.password) req=urllib2.Request(url) req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") try: response=urllib2.urlopen(req,timeout=5) DOMTree = parse(response) except: print "Critical - nowsms admin status get error." sys.exit(2) nowsms = DOMTree.documentElement smsc = nowsms.getElementsByTagName("SMSCStatus") for s in smsc: #print s.getElementsByTagName('Name')[0].childNodes[0].data status = s.getElementsByTagName('Status')[0].childNodes[0].data if status != 'OK': detail=s.getElementsByTagName('StatusDetail')[0].childNodes[0].data print "%s - %s" % (status,detail) sys.exit(2) else: print "%s - nowsms is ok." % status sys.exit(0)
脚本部署
1、复制上面的脚本内容,保存到nagios服务端,一般保存在/usr/local/nagios/libexec目录。
2、修改commands.cfg,添加command命令。端口,用户名密码也可以使用参数,因为我这边几台都一样所以就写在command中了。
3、添加service,定义完成后就可以了。