一、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微信报警脚本及写触发记录的更多相关文章

  1. zabbix 微信报警脚本

    不知道是什么原因直接用Python脚本zabbix无法执行脚本,需要一个shell来启动 #! /bin/bash userid=$ content=$ python /data/zabbix/ale ...

  2. Zabbix微信报警触发

    (1)         企业应用-创建应用 1.除了对个人添加微信报警之外,还可以添加不同管理组,接受同一个应用推送的消息, 成员账号,组织部门ID,应用Agent ID,CorpID和Secret, ...

  3. 通过脚本发送zabbix微信报警

    实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点 1.申请一个微信公众号(企业号) 申请方法不多说,如果已申请请忽略 2.在微信企业 ...

  4. (五)zabbix微信报警

    1.注册微信企业号 1)注册微信企业号 https://work.weixin.qq.com 2)通讯录添加用户 3)记住部门id 4)创建应用 5)点击刚创建的应用,记住Agentld和secret ...

  5. Zabbix 微信报警Python版(带监控项波动图片)

    #!/usr/bin/python # -*- coding: UTF- -*- #Function: 微信报警python版(带波动图) #Environment: python import ur ...

  6. zabbix 微信报警

    http://blog.csdn.net/wh211212/article/details/52735236 Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越 ...

  7. filebeat+logstash通过zabbix微信报警

    一.安装软件: 1.在要收集日志的机器上安装filebeat: 1).下载安装: cd /usr/local/src wget https://artifacts.elastic.co/downloa ...

  8. zabbix微信报警

    [root@LinuxS04 jiaoben]# ./weixin 联系人 baojing baojingok[root@LinuxS04 jiaoben]# pwd/usr/local/zabbix ...

  9. zabbix邮件报警脚本(Python)

    #!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_ ...

随机推荐

  1. 前端每日实战:6# 视频演示如何用纯 CSS 绘制一颗闪闪发光的璀璨钻石

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/qYqwQp 可交互视频教程 此视频是可以交 ...

  2. Ubuntu查看端口使用情况,使用netstat命令:

    https://www.cnblogs.com/fly-book/p/9827128.html

  3. mysql 8.X.X版本多个ip限制访问

    随笔记录,由于客户要求数据库不同ip访问,查了很多,多数都是ip段或者所有ip可以访问: select user,host from user;可以查看某些用户可以访问的ip:但只能设置一个用户一条记 ...

  4. Jexus web server V5.1 安装配置要点

    一.Jexus简介:Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux/unix操作系统之上,以支持ASP.NET为核心功能的高性能WEB服务器.Jex ...

  5. Git - 暂存区及撤销修改

    1. 暂存区 每个 Git 仓库中,都有一个隐藏目录 .git 用于存放 Git 仓库的相关信息,包括暂存区(称为 stage).自动创建的 master 分支以及指向 master 分支的 HEAD ...

  6. hihoCoder 1014 : Trie树(字典树)

    传送门 Description 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小 ...

  7. 图解Http阅读笔记(一)

    1.网络基础 TCP/IP 1.1TCP /IP 协议族   计算机与网络设备要相互通信,双方就必须基于相同的方法.比如,如何探测到通信目标.由哪一边先发起通信.使用哪种语言进行通信.怎样结束通信等规 ...

  8. F Find the AFei Numbers

    链接:https://ac.nowcoder.com/acm/contest/338/F来源:牛客网 题目描述 AFei loves numbers. He defines the natural n ...

  9. C# Winform 窗体界面”假死”后台线程阻塞 解决办法–BeginInvoke

    原文:C# Winform 窗体界面"假死"后台线程阻塞 解决办法–BeginInvoke 这个方法可以用在任何后台任务耗时较长,造成界面“假死”界面控件不更新的情况. 比如要要执 ...

  10. JQuery的链式编程与隐式迭代

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...