Zabbix微信报警脚本及写触发记录

Posted sonnybag

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zabbix微信报警脚本及写触发记录相关的知识,希望对你有一定的参考价值。

一、Zabbix微信报警

默认路径:/usr/lib/zabbix/scripts/weixin.py

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

import urllib,json
import urllib2
import sys
import time
reload(sys)
#print sys.getdefaultencoding()
sys.setdefaultencoding(utf8)
#print sys.getdefaultencoding()
############################
#CorpId = ‘******9b5c9d******‘
#AgentId = ‘1000013‘
#Secret = ‘******7ln1_bRDLydnMBoCn9Cof7JqSiG7JuJ******‘
#AuthId = 60
############################
class WeChat(object):
        __token_id = ‘‘
        # init attribute
        def __init__(self,url):
                self.__url = url.rstrip(/)
                self.__corpid = ******9b5c9d******
                self.__secret = ******7ln1_bRDLydnMBoCn9Cof7JqSiG7JuJ******

        # Get TokenID
        def authID(self):
                params = corpid:self.__corpid, corpsecret:self.__secret
                data = urllib.urlencode(params)
                content = self.getToken(data)

                try:
                        self.__token_id = content[access_token]
                        #print(‘access_token: ‘+content[‘access_token‘])
                except KeyError:
                        raise KeyError

        # Establish a connection
        def getToken(self,data,url_prefix=/):
                url = self.__url + url_prefix + gettoken?
                try:
                        response = urllib2.Request(url + data)
                except KeyError:
                        raise KeyError
                result = urllib2.urlopen(response)
        #print(‘result: ‘,result)
                content = json.loads(result.read())
        #print(‘content: ‘,content)
                return content

        # Get sendmessage url
        def postData(self,data,url_prefix=/):
                url = self.__url + url_prefix + message/send?access_token=%s % self.__token_id
                request = urllib2.Request(url,data)
                try:
                        result = urllib2.urlopen(request)
                except urllib2.HTTPError as e:
                        if hasattr(e,reason):
                                print(reason,e.reason)
                        elif hasattr(e,code):
                                print(code,e.code)
                        return 0
                else:
                        content = json.loads(result.read())
                        result.close()
                return content

        # send message
        def sendMessage(self,touser,message):
                self.authID()
                data = json.dumps(
                        touser:touser,
                        toparty:"60",
                        msgtype:"text",
                        agentid:"1000013",
                        text:
                                content:message
                        ,
                        safe:"0"
                ,ensure_ascii=False)

                response = self.postData(data)
                print(response)


if __name__ == __main__:
        a = WeChat(https://qyapi.weixin.qq.com/cgi-bin)
    f=open(r/tmp/wechat_warning.log, a+)
    for i in sys.argv:
            f.write(i)
        f.write("\n")
    f.close()
        a.sendMessage(sys.argv[1],sys.argv[3])

二、写触发事件日志

/usr/lib/zabbix/scripts/trigger.py

#!/usr/bin/python36
import sys,time
import pymysql

now=time.strftime(%Y-%m-%d %H:%M:%S,time.localtime())
f=open(r/tmp/trigger_writing.log, a+)
f.write("\n* * * * * * * * * * * * * * * * * * * * * * \n")
f.write(now+" ")
for line in sys.argv:
    f.write(line)
    f.write("\n")
f.write("\n")
f.close()

f=open(r/tmp/trigger_writing.log, a+)
print(sys.argv,file=f)
arr=sys.argv
need_arr =arr[3].split("\r\n")
for i in range(len(need_arr)):
    if i >= 0:
        key = need_arr[i].split(:)
        if key[0] == ip_addr:
            ip_addr = key[1].strip()
        elif key[0] == host_name:
            host_name = key[1].strip()
        elif key[0] == host_port:
            host_port = key[1].strip()
        elif key[0] == item_id:
            item_id = key[1].strip()
        elif key[0] == item_name:
            if len(key) > 2 :
                item_name = key[1].strip()+:+key[2].strip()
            else:
                item_name = key[1].strip()
        elif key[0] == item_key:
            if len(key) > 2:
                item_key = key[1].strip()+:+key[2].strip()
            else:
                item_key = key[1].strip()
        elif key[0] == item_value:
            item_value = key[1].strip()
        elif key[0] == item_lastvalue:
            item_lastvalue = key[1].strip()
        elif key[0] == trigger_id:
            trigger_id = key[1].strip()
        elif key[0] == trigger_name:
            if len(key) > 2:
                trigger_name = key[1].strip()+:+key[2].strip()
            else:
                trigger_name = key[1].strip()
        elif key[0] == trigger_severity:
            trigger_severity = key[1].strip()
        elif key[0] == trigger_status:
            trigger_status = key[1].strip()
        elif key[0] == trigger_value:
            trigger_value = key[1].strip()
        elif key[0] == event_age:
            event_age = key[1].strip()
        elif key[0] == event_date:
            event_date = key[1].strip()
        elif key[0] == event_time:
            event_time = key[1].strip()+:+key[2].strip()+:+key[3].strip()
        elif key[0] == event_id:
            event_id = key[1].strip()
        else:
            continue

value = ""+ip_addr+"‘,‘"+host_name+"‘,‘"+host_port+"‘,‘"+item_id+"‘,‘"+item_name+"‘,‘"        +item_key+"‘,‘"+item_value+"‘,‘"+item_lastvalue+"‘,‘"+trigger_id+"‘,‘"+trigger_name+"‘,‘"        +trigger_severity+"‘,‘"+trigger_status+"‘,‘"+trigger_value+"‘,‘"+event_age+"‘,‘"        +event_date+"‘,‘"+event_time+"‘,‘"+event_id+""

sql = "insert into sp_zbx_trigger (ipaddress,hostname,hostport,itemid,itemname,itemkey,itemvalue,itemlastvalue,triggerid,triggername,triggerseverity,triggerstatus,triggervalue,eventage,eventdate,eventtime,eventid) values " + "(" + value +")"
#print(sql,file=f)
f.write("\n"+sql+"\n")
f.close()

# conn database
db = pymysql.connect(host=192.168.0.201, port=3306, user=user, passwd=passwd, db=zabbix)
# create cursor
cursor = db.cursor()
try:
    if cursor.execute(sql):
        print(ok)
        db.commit()
except Exception as e:
        print(e.args)
        db.rollback()
db.close()

 

以上是关于Zabbix微信报警脚本及写触发记录的主要内容,如果未能解决你的问题,请参考以下文章

zabbix 定义触发器,并使用邮件,微信消息报警。

配置Zabbix3.4及4.0版本通过企业微信报警(全网最详细)

zabbix的各种报警机制实战

Zabbix--03 邮件报警微信报警

zabbix4添加配置微信报警通知

通过脚本发送zabbix微信报警