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,定义完成后就可以了。
正文完
微信搜一搜“奇悦电脑科技”或扫描二维码关注我们


