Python调用第三方接口实现nagios短信报警   

公司有需求,需要短信报警,所以才有了如下的东西。

第三方:smsbao.com 收费是1分钱一条,买的多当然就更便宜,我们买的是700元/10000条。

缺点:

1、发送内容只能有70字节,超过了就会拆分成多条短信。所以得对发送内容进行优化。

2、发送信息的号码不同

优点:

1、通过http接口,所好进行调整

2、信息一般在1-3秒之内发送完毕

nagios commands.cgf内容如下:

vim /usr/local/nagios/etc/objects/commands.cfg

# 'notify-host-by-smsbao' command definition
define 
command
{
        
command_name    notify-host-by-smsbao
        
command_line    
/usr/local/nagios/libexec/smsbao
.py 
"主机报警 IP:$HOSTADDRESS$:$HOSTSTATE$ 信息:$HOSTOUTPUT$"
        
}
 
# 'notify-service-by-smsbao' command definition
define 
command
{
        
command_name    notify-service-by-smsbao
        
command_line    
/usr/local/nagios/libexec/smsbao
.py 
"服务报警 主机:$HOSTNAME$服务:$SERVICEDESC$ IP地址:$HOSTADDRESS$ 状态:$SERVICESTATE$ 信息:$SERVICEOUTPUT$"

        }

smsbao.py 代码如下:

调用方式:

#./smsbao.py "发送信息的内容"

#!/usr/bin/python
#coding:utf8
#exp #python smsbao.py "发送一个测试监控信息"
 
import 
requests,sys,time
import 
sys
import 
time
 
#coding is Error so
default_encoding 
= 
'utf-8'
if 
sys.getdefaultencoding() !
= 
default_encoding:
    
reload
(sys)
    
sys.setdefaultencoding(default_encoding)
 
#get localtime 2014-7-11 10:01:01 
ltime 
= 
time.strftime(
'%Y-%m-%d %H:%M:%S'
,time.localtime(time.time()))
 
#u:username p:password c:content m:Phone
Content 
= 
str
(sys.argv[
1
])
payload 
= 
{
    
'u'
:
'zwhset'
,
    
'p'
:
'password_md5'
,
    
'm'
:
'you phone'
,
    
'c'
:Content
}
 
#send msmbao message to phone
= 
requests.get(
'http://www.smsbao.com/sms'
,params
=
payload)
date 
= 
ltime 
+ 
"\t" 
+ 
Content 
+ 
"\t" 
+ 
r.text 
+ 
"\n"
 
= 
open
(
'smsbao.log'
,
'a'
)
#write log to smsbao.log
try
:
    
f.write(date)
    
f.close()
except 
IOError,e:
    
sys.exit()

短信图:

wKiom1O_cXeg2YCBAAEVumJ9qII669.jpg

smsbao后台短信日志

wKioL1O_cirQn-sJAADWLuuqk7o372.jpg        

原文链接:http://cwtea.blog.51cto.com/4500217/1437042/