Nagios结合短信平台接口实现SMS短信告警

直接上代码。

#!/usr/bin/env python
#coding:utf-8

import urllib2
import urllib
import json
import uuid
import argparse

def url_request(url,values={},method='GET'):
    if method == 'GET':
        if len(values) != 0:
            url_values=urllib.urlencode(values)
            furl=url+'?'+url_values
        else:
            furl=url
        req=urllib2.Request(furl)
    elif method == 'POST':
        data=json.dumps(values,ensure_ascii=False)
        req=urllib2.Request(url,data)
        req.get_method=lambda: 'POST'
    else:
        pass
   
    try:
        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')
        response = urllib2.urlopen(req)
        result=json.loads(response.read())
    except urllib2.URLError as e:
        if hasattr(e, 'code'):
            print 'Error code:',e.code
        elif hasattr(e, 'reason'):
            print 'Reason:',e.reason
       
        result={}
    except:
        result={}

    return result

def send_text_message(content):
    content_data=content.split('-@@-')
    notify_type=content_data[0]
    if notify_type == 'host':
        type1=content_data[1]
        host_name=content_data[2]
        host_state=content_data[3]
        host_address=content_data[4]
        host_info=content_data[5]
        notify_contact=content_data[6]
        notify_content='** Nagios **\n\nNotification Type: '+ type1 + \
                        '\nHost: ' + host_name + \
                        '\nState: ' + host_state + \
                        '\nAddress: ' + host_address + \
                        '\nInfo: ' + host_info + '\n'
    elif notify_type == 'service':
        type1=content_data[1]
        service_desc=content_data[2]
        host_name=content_data[3]
        host_address=content_data[4]
        service_state=content_data[5]
        service_info=content_data[6]
        notify_contact=content_data[7]
        notify_content='** Nagios **\n\nNotification Type: '+ type1 + \
                        '\nService: ' + service_desc + \
                        '\nHost: ' + host_name + \
                        '\nAddress: ' + host_address + \
                        '\nState: ' + service_state + \
                        '\nInfo: ' + service_info + '\n'
    else:
        notify_content='Get nagios message notify info error.\n\nContent: %s' % content
        notify_contact='13800000000'
   
    url="http://192.168.1.250/sms.do"
    values={
          'loginname':'sijitao',
          'password':'www.sijitao.net',
          'content':notify_content,
          'mobileid':notify_contact,
          'flowid':uuid.uuid1(),
    }
   
    return url_request(url, values, method='GET')

def main():
    parser=argparse.ArgumentParser(description="Nagios notify by SMS")
    parser.add_argument("content",default=None,help="notify content,split with -@@-")
    args = parser.parse_args()
   
    content=args.content
    send_text_message(content)

if __name__ == "__main__":
    main()
这个代码比微信报警简单,send_text_message函数中调用request方法,给短信平台接口发起一个get请求。一个get请求完成后短信就发出去了。

脚本完成后还是一样,放到/usr/local/nagios/python中,在nagios的配置文件commands.cfg添加发送短信命令。例如:

define command{
command_name notify-host-by-sms
command_line /usr/local/nagios/python/NotifyBySMS.py "host-@@-$NOTIFICATIONTYPE$-@@-$HOSTNAME$-@@-$HOSTSTATE$-@@-$HOSTADDRESS$-@@-$HOSTOUTPUT$-@@-$CONTACTALIAS$"
}
define command{
command_name notify-service-by-sms
command_line /usr/local/nagios/python/NotifyBySMS.py "service-@@-$NOTIFICATIONTYPE$-@@-$SERVICEDESC$-@@-$HOSTALIAS$-@@-$HOSTADDRESS$-@@-$SERVICESTATE$-@@-$SERVICEOUTPUT$-@@-$CONTACTALIAS$"
}
templates.cfg模板文件中添加联系人模板:

define contact{
name sms-contact
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r,f,s
host_notification_options d,u,r,f,s
service_notification_commands notify-service-by-sms
host_notification_commands notify-host-by-sms
register 0
}
contacts.cfg联系人中添加微信通知联系人,例如:

define contact{
contact_name zhangnq-sms
use sms-contact
alias 13800000000
email admin@sijitao.net
}
最后在配置service的时候添加zhangnq-sms这个联系人后就可以通过短信平台发送报警邮件了

时间: 2024-10-21 16:05:39

Nagios结合短信平台接口实现SMS短信告警的相关文章

通用短信平台接口

之前看到很多网站和企业管理平台都有一个在线发短信的功能.自己就一直琢磨着要自己的网站上添加这样一个功能.昨天联系了一家短信发送代理商.试用了一下他们接口,还真不错.在这里我们不去条论它的商业价值了,我们简单的介绍一下这个接口的试用方法.   1.注册帐户  我使用的这个接口,是要在他们平台上注册的.平台地址:  http://ad.smsadmin.cn/  注册这个平台账号之后,它们会给你十条短信试用.还是挺人性化的,对于我们来说学到东西又不花钱,哈哈. 平台发送短信都是基于http协议的,因

如何开通短信平台,比如类似短信防伪那样的?另版块100分求解

问题描述 想给公司产品开通个短信查询服务,消费者139***购买了我们的产品后,根据产品上的一个查询码aaa,发送这个查询码aaa到指定的短信号如400**(就是我们想要开通的)什么的上面,那么我们短信平台400**就反馈给消费者139***该aaa相关的具体产品信息,有点类似短信防伪查询那样,请问我们怎样怎么做呢,找移动联通都说没有这样的业务,她们说是网站搞的这,和它们没有关系,竟是扯蛋请问如何开通怎样的服务呢,另外新浪以前有可以直接调用的webservice,现在也不可以用了,应该如何和新浪

谷歌在非洲地区战略:推动SMS短信搜索和SMS短信交易

北京时间6月30日凌晨消息,据国外媒体报道,著名科技博客作者埃里克·施恩菲尔德(Erick Schonfeld)今天撰文称,谷歌在非洲地区的战略是推动SMS短信搜索和通过SMS短信进行的交易. 施恩菲尔德写道:"谷歌不只是希望将世界上所有的信息组织到一起,同时也希望让世界所有人都能获得所有信息.从全球大多数人的角度来说,这意味着谷歌要通过普通手机来传递信息,而不是通过价格昂贵的iPhone或带有网络浏览器的Android手机.我所说的普通手机是指10美元就能买到的手机,这种手机除了语音和SMS短

java中用中国网建提供的SMS短信平台发送短信

接下来的项目需求中提到需要短信发送功能,以前没有做过,因此便在网上搜了一下.大体上说的都是有三种方法,分别是sina提供的webservice接口.短信mao和中国网建提供的SMS短信平台. 这三种方式,因为第一种和第三种都经过了别的平台转发,因此具有一定的安全隐患,第二种短信mao的方式相对可能要安全一些. 但是短信mao需要购买硬件设备,因此我便只好参考网上的文章先实现了用sms平台发送短信的功能. 这个功能说起来实际上很简单,java代码也很少,只是我在实现的过程中参照网上文章的代码和注释

Java通过SMS短信平台实现发短信功能 含多语言_java

Java通过SMS短信平台实现发短信功能  在项目中使用过发短信的功能,但那个由于公司内部的限制很麻烦,今天在网上找到一个简单的,闲来无事就把它记录如下: 本程序是通过使用中国网建提供的SMS短信平台实现的(该平台目前为注册用户提供5条免费短信,3条免费彩信,这足够用于我们测试用了.在使用前需要注册,注册地址为http://sms.webchinese.cn/reg.shtml),下面是程序源码:  /** * @Author dengsilinming * @Date 2012-9-18 *

电信开放平台重装发布模板短信API接口

背景:短信SP市场经过前几年的洗牌,市场秩序得到了较好的净化,但是,短信提醒业务的服务水平仍然参 差不齐,除了银行.房地产.汽车等高消费行业保持了较高的服务水准外,较高的准入门槛和僵化的呈现形式迫使市场上相当一部分中小企业甚至不得不采用传统的点对点手机短信方式进行产品的营销和宣传.近日,中国电信 天翼开放平台(http://open.189.cn)短信服务重装开放,特面向创业开发者.中小型企业推出了"模版短信"API能力接口.模板短信,即将自定义的不同短信内容封装成可适配不同营销场景的

应用开发流程设计之验证码短信API接口

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在互联网信息泛滥的今天,大量的不真实手机号码.无效的信息铺满网站,给企业对网站用户回访等带来诸多不遍,如何获取真实可靠的客户信息,显得尤为重要. 为了让网站自动验证客户联系手机号码的真实性,启科网络与中国移动. 联通.电信三大通信运行商合作,研发了一套大型的短信发送应用平台,通过短信接口网关发送手机验证码,即解决了手机号码的认证问题,可以用来

后台-我想开发个短信平台接收用户发来的手机短信,怎么做?

问题描述 我想开发个短信平台接收用户发来的手机短信,怎么做? 我想开发个短信平台接收用户发来的手机短信,短信内容是某种固定格式的.接收到用户的短信后,后台程序解析然后再回复相应的格式,这个怎么做,需要什么硬件,或者有类似的短信运营商提供二次开发的接口. 解决方案 1.购买短信号码,支持上下行 2.开发上下行功能,并根据并键字开发相应的业务罗辑 解决方案二: 这个从第三方短信平台处购买一个三网合一的号码 然后进行关键字回复的二次开发即可

求助:企业短信平台

问题描述 大家好,请大家帮忙.哪位前辈有关于"企业短信平台"的相关资源,例:银行短信提示业务.如果有,请发到我的qq邮箱吧,617265744@qq.com谢谢! 解决方案 解决方案二:亿美短信接口啊.去搜搜,网上有资源的.