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()

原文地址:https://www.cnblogs.com/sonnyBag/p/11332354.html

时间: 2024-08-22 09:19:32

Zabbix微信报警脚本及写触发记录的相关文章

zabbix 微信报警脚本

#! /bin/bash userid=$1 content=$2 python /data/zabbix/alertscripts/weixin.py $userid $content #!/usr/bin/env python # _*_ coding:utf8 _*_ import urllib2 import simplejson as json import sys class weChat: def __init__(self,url,Corpid,Secret): url = '%

zabbix微信报警设置

# Zabbix-Alert-WeChat # zabbix微信报警 ### 需要具备一下条件 * 注册微信企业号(团队类型) [点击注册](https://qy.weixin.qq.com/) #### 安装simplejson 3.8.2 ```bash wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.

通过脚本发送zabbix微信报警

实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点 1.申请一个微信公众号(企业号) 申请方法不多说,如果已申请请忽略 2.在微信企业号上新建应用 上传应用logo,填写应用名称,应用介绍等 应用创建完之后查看并启用应用,同时会生成应用的AgentId以及Secret,这个在后面步骤会有用 3.接口调用测试 点击:API文档-->开发者工具-->接口调试工具,找不到就直接点这个地址 http://work.weixin.qq.c

ZABBIX 微信报警 插件(python无图)

ZABBIX可以实现短信.邮件.微信等各种报警,这三种基本大家都很熟悉, 现在基于微信写py,感觉钉钉的团队是从微信出来的,变量都不改,太懒了,说可以实现微信报警苍老师说过:Life is short,you need python! 1 微信配置 2 程序配置 3 ZABBIX配置 4 效果展现 5 docker环境修改 1.1.1 部门设置 1.1.2 应用设置 1.1.3 权限管理 1.1 注册安装 3.1 报警媒介类型 3.2 配置用户 3.3 动作设置 1 微信配置 微信公众号官网:h

(五)zabbix微信报警

1.注册微信企业号 1)注册微信企业号 https://work.weixin.qq.com 2)通讯录添加用户 3)记住部门id 4)创建应用 5)点击刚创建的应用,记住Agentld和secret 6)微信关注这个企业号,获取更多尺寸关注 点击关注 7)测试向关注的用户发送信息 微信能够正常接收到消息 8)获取CorpID 2.python脚本 获取脚本文件目录位置 #grep alertscripts /etc/zabbix/zabbix_server.conf AlertScriptsP

zabbix 微信报警设置

#================ 报警方式一 使用微信官方API ========================= 待添加 #================报警方式二 ============================= #安装告警agent wget http://cdn.110monitor.com/open/download/alert-agent-4.0.1-RC2.tar.gz tar -xvf alert-agent-4.0.1-RC2.tar.gz cp -a aler

zabbix 微信报警

说明:zabbix发送报警时有三个参数,暂且用$1,$2,$3来表示,分别对应的是"接收人","主题","消息" 在zabbix3.0的报警媒介类型里,有个脚本参数设置,可设置成{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE},分别对应$1,$2,$3 以下是相关脚本,用python编写 #!/usr/bin/python import urllib import json import sys Cor

微信报警脚本

1 #!/bin/bash 2 #==================================================== 3 # Author: VizierBi 4 # Create Date: 2018-10-19 5 # Description:微信监控报警脚本 6 #==================================================== 7 CropID='wwaebf94b1310467a9' 8 Secret='W6ahrPd1vg

zabbix微信报警

1.申请微信企业号 微信申请企业号(点击申请) 1.1.通讯录添加企业成员 我们要提前把成员信息添加进组织部门,必填项+手机号或者微信号,这样别人扫描二维码的时候才能成功关注企业号. 注意:这里有两个我们要用到信息,一个组织部门的ID,一个部门成员的账号(账号是自己手动指定的,不同于微信号,最好是字母加数字) 部门ID 部门成员账号 2.1.应用中心创建应用 我们要在这里创建应用,因为要通过应用发送消息给部门成员. 注意:这里要记住一个值,应用ID 新建应用.jpg 选择应用类型.jpg 创建应