使用第三方短信平台实现nagios短信报警(非飞信机器人)

参考:http://cwtea.blog.51cto.com/4500217/1437042/

一、nagios告警原理:

Nagios告警条件符合时,触发nagios配置文件templates.cfgcontact方法,里面定义好联系人组,告警周期,告警方式,告警命令等。所以要实现告警必须配置好templates.cfgcontact.cfgcommand.cfg三个文件。

 

二、短信告警原理:

         nagios原理,当符合告警条件时,会触发temlates.cfg中的告警条件,contact.cfg告警联系人和command.cfg中告警命令。所以就可以通过任意开发语言传递nagios告警内容到短信平台接口实现短信报警。(注:因防止骚扰短信,各大电信运营商会对短信内容提前报备格式,凡是不符合格式的短信都会被电信运营商拒绝掉,而短信平台商的用户后台系统会有格式报备表单,用户可以根据自己需要提前报备格式,一般会在1-2天内审核完毕)

 

三、使用推立方tui3.com实现短信报警

1. 注册推立方账号

2. 查看“产品配置”

API KEY :短信平台唯一认证凭证,注意保密

调用IP地址: 指定IP使用

短信格式备案:(最好使用英文,并且格式简单明确,否则审核不通过,推立方这边更严格,使用不方便灵活)

tui3_key3. 查看官方API文档,并选择一种语言实现接口调用程序

调用地址:
UTF8
http://tui3.com/api/send/?k=发送密钥&r=执行结果格式&p=短信产品id&t=接收手机号&c=发送内容
GBKhttp://tui3.com/api/send/?k=发送密钥&r=执行结果格式&p=短信产品id&t=接收手机号&cn=发送内容

 在/usr/local/nagios/libexec/新建 vi smstui3.py程序

PYTHON示例代码

 

# -*- coding: UTF-8 -*-

import urllib2, urllib

content =’t3test 1234′              #这是默认的短信格式

content1 =u’推立方测试: 1234′   #同上

data ={‘k’:’XXXXX’,                 #这里用字典实现url参数存储,k为API KEY

‘t’:’手机号’,                              # t 为 接受短信用户的手机号

‘p’:’1′,                                     # p 为 推立方的产品好 1:推信 2:推信DIY

‘r’:’xml’,                                  # r 为 返回结果的格式

‘cn’:content1,                          # cn 为发送的短信内容 cn默认GBK编码,c为UTF8

}

f = urllib2.urlopen(                   # 发送data内数据参数到推立方接口url

url = ‘http://www.tui3.com/api/send/’,

data = urllib.urlencode(data)

)

print f.read();                          #返回结果

返回结果代码如下:
0:正常
1:服务未开通
2:非法KEY
3:IP地址非法
4:无合法接收手机号码
5:有违禁内容,拒绝发送
6:短信格式未备案(实时短信)
7:发送短信内容不符合备案格式(实时短信)
8:余额不足
9:批量处理超过限额
10:参数不正确
11:发送过于频繁,超过频率限制
大于100:其它错误

4. 以上内容成功后只能证明短信内容和接口已经写对,但不能被nagios调用,需要再次修改。

# -*- coding: UTF-8 -*-

import requests

import sys

import time

content = sys.argv[1]                     #sys.argv[]是python传递命令行参数的变量,[0]是自身

# [1]是下一个参数。这个有点类似shell中$1。也是传递#nagios告警内容的关键所在

data = {

‘k’:’XXXXX’,                                   #这里用字典实现url参数存储,k为API KEY

‘t’:’手机号’,                              # t 为 接受短信用户的手机号

‘p’:’1′,                                     # p 为 推立方的产品好 1:推信 2:推信DIY

‘r’:’xml’,                                  # r 为 返回结果的格式

‘cn’:content1,                          # cn 为发送的短信内容 cn默认GBK编码,c为UTF8

}

r = request.get(‘http://www.tui3.com/api/send/’,params=data)

# 添加时间格式和日志格式

ltime = time.strftime(‘%Y-%m-%d %H:%M:%S’,time.localtime(time.time()))

date = ltime + “\t” + Content + “\t” + r.text + “\n”

f = open(‘/var/log/smstui3.log’,’a’)

#将发送结果写入smstui3.lgo

try:

f.write(date)

f.close()

except IOError,e:

sys.exit()

print f.read();                          #返回结果

#这样调用短信接口的程序就写好

5. 在nagios的command.cfg中添加调用命令

# 注:command_line 就是调用接口程序的关键行,后面“”中内容就是nagios告警内容,按照实际需要修改。

在末尾添加如下内容:

# ‘notify-host-by-smstui3’ command definition

define command{

command_name    notify-host-by-sms

command_line    /usr/bin/php  /usr/local/nagios/libexec/smstui3.php “主机报警 IP:$HOSTADDRESS$:$HOSTSTATE$ 信息:$HOSTOUTPUT$”

}

 

# ‘notify-service-by-smstui3’ command definition

define command{

command_name    notify-service-by-sms

command_line    /usr/bin/php  /usr/local/nagios/libexec/smstui3.php “服务报警 主机:$HOSTNAME$服务:$SERVICEDESC$ IP地址:$HOSTADDRESS$ 状态:$SERVICESTATE$ 信息:$SERVICEOUTPUT$”

}

6 template.cfg添加定义的通知命令

define contact{

name                                                 generic-contact          

service_notification_period           24×7                        

host_notification_period                 24×7                          

 service_notification_options        w,u,c,r,f,s                     

host_notification_options               d,u,r,f,s                      

service_notification_commands    notify-service-by-email,notify-service-by-sms

host_notification_commands          notify-host-by-email,notify-host-by-sms

 register                        0                 

  }

7.修改contact.cfg,添加特定人员,因为手机已经写入接口程序,不需要定义pager

8. 推立方短信价格:11条很贵地

tui3_jiage

        

 

 

 

 

 

 

 

四、使用短信宝smsbao.com实现短信报警

1. 短信宝接口格式

         http://api.smsbao.com/sms?u=USERNAME&p=PASSWORD&m=PHONE&c=CONTENT

注:短信宝url参数中PASSWORD需要MD5加密后才能调用接口

2. 使用PHP改写接口程序

<?php

$smsapi = “http://api.smsbao.com/”;

$user = “username”;

$pass = md5(“password”);

$content = $_SERVER[“argv”][1];

$phone = “phone number”;

$sendurl = $smsapi.”sms?u=”.$user.”&p=”.$pass.”&m=”.$phone.”&c=”.urlencode($content);

$result =file_get_contents($sendurl) ;

?>

3. 吐槽:短信宝用户后台比推立方功能更多更丰富,模板审核更容易。但同时,你会 发现不管什么格式的短信都会发送到短信宝,但是系统会自动拒绝发送。这样的话会计费的。还有最近后台系统有些问题哦。无图无真相,自己看!

smsbao.geshi短信格式界面更简洁方便

下面两图直接反应短信宝计费系统的特性

smsbao.request

 

 

 

smsbao.send

 买的多会便宜的

smsbao.jiage

发表评论

电子邮件地址不会被公开。