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':"",
- 'msgtype':"text",
- 'agentid':"",
- 'text':{
- 'content':message
- },
- 'safe':""
- },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 微信报警脚本
不知道是什么原因直接用Python脚本zabbix无法执行脚本,需要一个shell来启动 #! /bin/bash userid=$ content=$ python /data/zabbix/ale ...
- Zabbix微信报警触发
(1) 企业应用-创建应用 1.除了对个人添加微信报警之外,还可以添加不同管理组,接受同一个应用推送的消息, 成员账号,组织部门ID,应用Agent ID,CorpID和Secret, ...
- 通过脚本发送zabbix微信报警
实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点 1.申请一个微信公众号(企业号) 申请方法不多说,如果已申请请忽略 2.在微信企业 ...
- (五)zabbix微信报警
1.注册微信企业号 1)注册微信企业号 https://work.weixin.qq.com 2)通讯录添加用户 3)记住部门id 4)创建应用 5)点击刚创建的应用,记住Agentld和secret ...
- Zabbix 微信报警Python版(带监控项波动图片)
#!/usr/bin/python # -*- coding: UTF- -*- #Function: 微信报警python版(带波动图) #Environment: python import ur ...
- zabbix 微信报警
http://blog.csdn.net/wh211212/article/details/52735236 Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越 ...
- filebeat+logstash通过zabbix微信报警
一.安装软件: 1.在要收集日志的机器上安装filebeat: 1).下载安装: cd /usr/local/src wget https://artifacts.elastic.co/downloa ...
- zabbix微信报警
[root@LinuxS04 jiaoben]# ./weixin 联系人 baojing baojingok[root@LinuxS04 jiaoben]# pwd/usr/local/zabbix ...
- zabbix邮件报警脚本(Python)
#!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_ ...
随机推荐
- 如何利用阿里视频云开源组件,快速自定义你的H5播放器?
摘要: Aliplayer希望提供一种方便.简单.灵活的机制,让客户能够扩展播放器的功能,并且Aliplayer提供一些组件的基本实现,用户可以基于这些开源的组件实现个性化功能,比如自定义UI和自己A ...
- Your first HTML form
The first article in our series provides your very first experience of creating an HTML form, includ ...
- Java 内部类“覆盖"
Think in Java P269 如果子类中的内部类和父类中内部类一样,这好像子类内部类“覆盖”了父类的内部类,但其实没有代表着什么. public class BigEgg extends E ...
- 《JAVA设计模式》之访问者模式(Visitor)
在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要 ...
- Spring学习(五)--构建Spring Web应用程序
一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚 ...
- JavaWeb——servlet1
一.servlet简介 Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于 ...
- Day3---Python的time库的一些简单函数以及用法
time库的一些函数 time.time () : 获取当前时间戳,即计算机内部时间值,浮点数 >>>import time >>> time.time() 1 ...
- python学习三十七天函数的作用域查找顺序LEGB
python函数的作用域查找顺序LEGB,分别为 locals eclosing globals builtins .了解作用域的范围,可以更好的操作你想要的业务,分别介绍一下. 1,local ...
- P2172 [国家集训队]部落战争(最小路径覆盖)
P2172 [国家集训队]部落战争 每个点仅走一次:最小路径覆盖 套路地拆点,具体看代码中的$draw()$ 流量每增加1,意味着一支军队可以多走一格,代价减少1 最后答案即为总点数$-dinic() ...
- 分布式自增ID算法-Snowflake详解
1.Snowflake简介 互联网快速发展的今天,分布式应用系统已经见怪不怪,在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同的特性,比如像并 ...