一、Zabbix微信报警

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

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import urllib,json
  5. import urllib2
  6. import sys
  7. import time
  8. reload(sys)
  9. #print sys.getdefaultencoding()
  10. sys.setdefaultencoding('utf8')
  11. #print sys.getdefaultencoding()
  12. ############################
  13. #CorpId = '******9b5c9d******'
  14. #AgentId = '1000013'
  15. #Secret = '******7ln1_bRDLydnMBoCn9Cof7JqSiG7JuJ******'
  16. #AuthId = 60
  17. ############################
  18. class WeChat(object):
  19. __token_id = ''
  20. # init attribute
  21. def __init__(self,url):
  22. self.__url = url.rstrip('/')
  23. self.__corpid = '******9b5c9d******'
  24. self.__secret = '******7ln1_bRDLydnMBoCn9Cof7JqSiG7JuJ******'
  25.  
  26. # Get TokenID
  27. def authID(self):
  28. params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
  29. data = urllib.urlencode(params)
  30. content = self.getToken(data)
  31.  
  32. try:
  33. self.__token_id = content['access_token']
  34. #print('access_token: '+content['access_token'])
  35. except KeyError:
  36. raise KeyError
  37.  
  38. # Establish a connection
  39. def getToken(self,data,url_prefix='/'):
  40. url = self.__url + url_prefix + 'gettoken?'
  41. try:
  42. response = urllib2.Request(url + data)
  43. except KeyError:
  44. raise KeyError
  45. result = urllib2.urlopen(response)
  46. #print('result: ',result)
  47. content = json.loads(result.read())
  48. #print('content: ',content)
  49. return content
  50.  
  51. # Get sendmessage url
  52. def postData(self,data,url_prefix='/'):
  53. url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
  54. request = urllib2.Request(url,data)
  55. try:
  56. result = urllib2.urlopen(request)
  57. except urllib2.HTTPError as e:
  58. if hasattr(e,'reason'):
  59. print('reason',e.reason)
  60. elif hasattr(e,'code'):
  61. print('code',e.code)
  62. return 0
  63. else:
  64. content = json.loads(result.read())
  65. result.close()
  66. return content
  67.  
  68. # send message
  69. def sendMessage(self,touser,message):
  70. self.authID()
  71. data = json.dumps({
  72. 'touser':touser,
  73. 'toparty':"",
  74. 'msgtype':"text",
  75. 'agentid':"",
  76. 'text':{
  77. 'content':message
  78. },
  79. 'safe':""
  80. },ensure_ascii=False)
  81.  
  82. response = self.postData(data)
  83. print(response)
  84.  
  85. if __name__ == '__main__':
  86. a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
  87. f=open(r'/tmp/wechat_warning.log', 'a+')
  88. for i in sys.argv:
  89. f.write(i)
  90. f.write("\n")
  91. f.close()
  92. a.sendMessage(sys.argv[1],sys.argv[3])

二、写触发事件日志

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

  1. #!/usr/bin/python36
  2. import sys,time
  3. import pymysql
  4.  
  5. now=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
  6. f=open(r'/tmp/trigger_writing.log', 'a+')
  7. f.write("\n* * * * * * * * * * * * * * * * * * * * * * \n")
  8. f.write(now+" ")
  9. for line in sys.argv:
  10. f.write(line)
  11. f.write("\n")
  12. f.write("\n")
  13. f.close()
  14.  
  15. f=open(r'/tmp/trigger_writing.log', 'a+')
  16. print(sys.argv,file=f)
  17. arr=sys.argv
  18. need_arr =arr[3].split("\r\n")
  19. for i in range(len(need_arr)):
  20. if i >= 0:
  21. key = need_arr[i].split(':')
  22. if key[0] == 'ip_addr':
  23. ip_addr = key[1].strip()
  24. elif key[0] == 'host_name':
  25. host_name = key[1].strip()
  26. elif key[0] == 'host_port':
  27. host_port = key[1].strip()
  28. elif key[0] == 'item_id':
  29. item_id = key[1].strip()
  30. elif key[0] == 'item_name':
  31. if len(key) > 2 :
  32. item_name = key[1].strip()+':'+key[2].strip()
  33. else:
  34. item_name = key[1].strip()
  35. elif key[0] == 'item_key':
  36. if len(key) > 2:
  37. item_key = key[1].strip()+':'+key[2].strip()
  38. else:
  39. item_key = key[1].strip()
  40. elif key[0] == 'item_value':
  41. item_value = key[1].strip()
  42. elif key[0] == 'item_lastvalue':
  43. item_lastvalue = key[1].strip()
  44. elif key[0] == 'trigger_id':
  45. trigger_id = key[1].strip()
  46. elif key[0] == 'trigger_name':
  47. if len(key) > 2:
  48. trigger_name = key[1].strip()+':'+key[2].strip()
  49. else:
  50. trigger_name = key[1].strip()
  51. elif key[0] == 'trigger_severity':
  52. trigger_severity = key[1].strip()
  53. elif key[0] == 'trigger_status':
  54. trigger_status = key[1].strip()
  55. elif key[0] == 'trigger_value':
  56. trigger_value = key[1].strip()
  57. elif key[0] == 'event_age':
  58. event_age = key[1].strip()
  59. elif key[0] == 'event_date':
  60. event_date = key[1].strip()
  61. elif key[0] == 'event_time':
  62. event_time = key[1].strip()+':'+key[2].strip()+':'+key[3].strip()
  63. elif key[0] == 'event_id':
  64. event_id = key[1].strip()
  65. else:
  66. continue
  67.  
  68. value = "'"+ip_addr+"','"+host_name+"','"+host_port+"','"+item_id+"','"+item_name+"','"\
  69. +item_key+"','"+item_value+"','"+item_lastvalue+"','"+trigger_id+"','"+trigger_name+"','"\
  70. +trigger_severity+"','"+trigger_status+"','"+trigger_value+"','"+event_age+"','"\
  71. +event_date+"','"+event_time+"','"+event_id+"'"
  72.  
  73. 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 +")"
  74. #print(sql,file=f)
  75. f.write("\n"+sql+"\n")
  76. f.close()
  77.  
  78. # conn database
  79. db = pymysql.connect(host='192.168.0.201', port=3306, user='user', passwd='passwd', db='zabbix')
  80. # create cursor
  81. cursor = db.cursor()
  82. try:
  83. if cursor.execute(sql):
  84. print('ok')
  85. db.commit()
  86. except Exception as e:
  87. print(e.args)
  88. db.rollback()
  89. 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. 如何利用阿里视频云开源组件,快速自定义你的H5播放器?

    摘要: Aliplayer希望提供一种方便.简单.灵活的机制,让客户能够扩展播放器的功能,并且Aliplayer提供一些组件的基本实现,用户可以基于这些开源的组件实现个性化功能,比如自定义UI和自己A ...

  2. Your first HTML form

    The first article in our series provides your very first experience of creating an HTML form, includ ...

  3. Java 内部类“覆盖"

    Think in Java  P269 如果子类中的内部类和父类中内部类一样,这好像子类内部类“覆盖”了父类的内部类,但其实没有代表着什么. public class BigEgg extends E ...

  4. 《JAVA设计模式》之访问者模式(Visitor)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要 ...

  5. Spring学习(五)--构建Spring Web应用程序

    一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚 ...

  6. JavaWeb——servlet1

    一.servlet简介 Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于 ...

  7. Day3---Python的time库的一些简单函数以及用法

    time库的一些函数 time.time () :   获取当前时间戳,即计算机内部时间值,浮点数 >>>import time >>> time.time() 1 ...

  8. python学习三十七天函数的作用域查找顺序LEGB

    python函数的作用域查找顺序LEGB,分别为 locals  eclosing  globals  builtins .了解作用域的范围,可以更好的操作你想要的业务,分别介绍一下. 1,local ...

  9. P2172 [国家集训队]部落战争(最小路径覆盖)

    P2172 [国家集训队]部落战争 每个点仅走一次:最小路径覆盖 套路地拆点,具体看代码中的$draw()$ 流量每增加1,意味着一支军队可以多走一格,代价减少1 最后答案即为总点数$-dinic() ...

  10. 分布式自增ID算法-Snowflake详解

    1.Snowflake简介 互联网快速发展的今天,分布式应用系统已经见怪不怪,在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同的特性,比如像并 ...