NASDIY

nagios 微信报警python3脚本

本脚本需要安装python3,请自行安装。本教程为使用centos6.7 x64系统下使用yum install nagios安装,如自己编译安装的请自己修改相应的路径。

1、创建微信调用python脚本

vim /usr/lib64/nagios/plugins/notify-service-by-weixin.py

import urllib.request
import json
import sys
def gettoken(corp_id,corp_secret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corp_id + '&corpsecret=' + corp_secret
    try:
        token_file = urllib.request.urlopen(gettoken_url)
    except urllib.error.HTTPError as e:
        print(e.code)
        print(e.read().decode("utf8"))
    token_data = token_file.read().decode('utf-8')
    token_json = json.loads(token_data)
    token_json.keys()
    token = token_json['access_token']
    return token
def senddata(access_token,notify_str):
    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
    notifydata = notify_str.split("separator")
    user = notifydata[0]
    cationtype = notifydata[1]
    desc = notifydata[2]
    alias = notifydata[3]
    address = notifydata[4]
    state = notifydata[5]
    datatime = notifydata[6]
    output = notifydata[7]
    content = '[大哭][大哭] Nagios 警报 [大哭][大哭] \n\n 类型 : ' + cationtype + '\n\n 服务名 : ' + desc + '\n 主机名 : ' + alias + '\nIP 地址 : ' + address + '\n 状态 : ' + state + '\n\n  时间 : ' + datatime + '\n\n  日志 :\n' + output + '\n'
    send_values = {
        "touser":user,
        "toparty":"1",                   
        "msgtype":"text",
        "agentid":"0",
        "text":{
            "content":content
            },
        "safe":"0"
        }
    send_data = json.dumps(send_values, ensure_ascii=False).encode(encoding='UTF8')
    send_request = urllib.request.Request(send_url, send_data)
    response = urllib.request.urlopen(send_request)
    msg = response.read()
    return msg
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)
notifystr = str(sys.argv[1])
corpid = '你的corpid'
corpsecret = '你公众号的corpsecret'
accesstoken = gettoken(corpid,corpsecret)
msg = senddata(accesstoken,notifystr)
print(msg)

其中 send_values 的值如下:

参数必须说明
touser成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
totag标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数
msgtype消息类型,此时固定为:text
agentid企业应用的id,整型。可在应用的设置页面查看
content消息内容
safe表示是否是保密消息,0表示否,1表示是,默认0

touser的值user是取的/etc/nagios/objects/contacts.cfg中联系人的alias的值,而contacts.cfg终alias的值需要设置为微信公众号中通讯录里的用户的账号才行。

或者使用toparty,将值设为公众号中要发送消息的组的id。

Image

其中的corpid 和 corpsecret 的值更改为你申请的公众号的值,具体步骤如下。

进入公众号,设置——权限管理——新建管理组——设置组名和管理员——设置权限

此处必须给消息应用设置发消息的权限:

点保存,然后即可看到你的corpid 和 corpsecret:

然后使用以下命令测试:

weixin.py "要发送的微信用户名separator警告separator服务名称separator主机名称separatorip地址separator主机状态separator19:00separator主机输出信息"

vim /usr/lib64/nagios/plugins/notify-host-by-weixin.py

复制上面文件的内容并修改一下地方:

user = notifydata[0]
cationtype = notifydata[1]
name = notifydata[2]
state = notifydata[3]
address = notifydata[4]
output = notifydata[5]
datatime = notifydata[6]
content = '[大哭][大哭] Nagios 警报 [大哭][大哭] \n\n 类型 : ' + cationtype + '\n\n 主机名 : ' + name + '\n 状态 : ' + state + '\nIP 地址 : ' + address + '\n\n 时间 : ' + datatime + '\n\n 日志 :\n' + output + '\n'
send_values = {
"touser":user,
"toparty":"1",
"msgtype":"text",
"agentid":"0",
"text":{
"content":content
},
"safe":"0"
}

2、与nagios对接

vim /etc/nagios/objects/commands.cfg 

在文件末尾增加以下内容:

###############################################################
# weixin #
###############################################################


 define command{
 command_name notify-host-by-weixin
 command_line /bin/python3 /usr/lib64/nagios/plugins/notify-host-by-weixin.py "$CONTACTALIAS
$separator$NOTIFICATIONTYPE$separator$HOSTNAME$separator$HOSTSTATE$separator$HOSTADDRESS$sep
arator$HOSTOUTPUT$separator$LONGDATETIME$"
 }


 define command{
 command_name notify-service-by-weixin
 command_line /bin/python3 /usr/lib64/nagios/plugins/notify-service-by-weixin.py "$CONTACTAL
IAS$separator$NOTIFICATIONTYPE$separator$SERVICEDESC$separator$HOSTALIAS$separator$HOSTADDRE
SS$separator$SERVICESTATE$separator$LONGDATETIME$separator$SERVICEOUTPUT$"
 }

vim /etc/nagios/objects/templates.cfg

修改其中define contact的下面内容:

 service_notification_commands   notify-service-by-email,notify-service-by-weixin    
 host_notification_commands      notify-host-by-email,notify-host-by-weixin

此处如果不需要邮件报警就将前面的email报警删掉,如果同时需要email和微信报警,则将微信命令添加在后面。

最后重启nagios服务即可。

service nagios restart


  • 评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.5.2 Zero Theme By

渝ICP备14007881号-1