设为首页 收藏本站
查看: 1166|回复: 0

[经验分享] [置顶]zabbix通过lykchat发送告警信息配置过程

[复制链接]

尚未签到

发表于 2018-1-2 09:42:57 | 显示全部楼层 |阅读模式
#! /usr/bin/python  # coding:utf-8
  # -*- coding : utf-8 -*-
  import sys, time, requests
  SEND_MESS_ID_LIST = re.split("," , sys.argv[1])
  # web页面的发送者可以同时支持多个微信号,通过逗号分割。在web页面的管理-用户-用户中配置
  VAR_LIST = sys.argv[3:]
  EVENT_MESSAGE = {}
  for VAR in VAR_LIST :
  VAR = str(VAR).replace("\r\n" , "")
  DICT = eval(VAR)
  EVENT_MESSAGE.update(DICT)
  # 参数过来的是数组,所以需要转化为字典
  IP = EVENT_MESSAGE["IP"]
  HOST = EVENT_MESSAGE["Host"]
  TRIGGER = EVENT_MESSAGE["Trigger"]
  STATUS = EVENT_MESSAGE["Status"].lower()
  TRIGGER_ID = EVENT_MESSAGE["Trigger_ID"]
  ITEM_NAME = EVENT_MESSAGE["Item_Name"]
  ITEM_KEY = EVENT_MESSAGE["Item_Key"]
  EVENT_ID = EVENT_MESSAGE["Event_ID"]
  ITEM_VALUE = EVENT_MESSAGE["Item_Value"]
  EVENT_AGE = EVENT_MESSAGE["Event_Age"]
  EVENT_DATETIME = EVENT_MESSAGE["Event_Date"].replace(r"." , "-")
  TRIGGER_LEVEL = EVENT_MESSAGE["Trigger_Level"]

  if TRIGGER_LEVEL == "Not>  TRIGGER_LEVEL = "Not_classified"
  if STATUS == "ok" :
  STATUS_CN = "恢复"
  else :
  STATUS_CN = "故障"
  SEND_MESSAGE_LEVEL = ["High" , "Disaster"]
  # 通过短信发送的报警信息的事件级别列表
  SEND_MAIL_LEVEL = ["Warning" , "Average" , "High" , "Disaster"]
  # SEND_MAIL_LEVEL = ["Not_classified" , "Information" , "Warning" , "Average" , "High" , "Disaster"]
  # 通过邮件发送的报警信息的事件级别列表
  TRIGGER_LEVEL_LIST = {"Not_classified" : "未定义" , "Information" : "通知" , "Warning" : "警告" , "Average" : "一般严重" , "High" : "严重" , "Disaster" : "灾难"}
  TRIGGER_LEVEL_CN = TRIGGER_LEVEL_LIST[TRIGGER_LEVEL]
  # 警告级别的中文
  MESSHEADER_QINZHUI_LIST = {"Not_classified" : "注意" , "Information" : "注意" , "Warning" : "处理" , "Average" : "尽快处理" , "High" : "立即处理" , "Disaster" : "立即处理灾难"}
  MESSHEADER_QINZHUI = MESSHEADER_QINZHUI_LIST[TRIGGER_LEVEL]
  # 告警信息标题前缀
  TIMEARRAY = time.strptime(EVENT_DATETIME, "%Y-%m-%d %H:%M:%S")
  EVENT_TIMESTAMP = int(time.mktime(TIMEARRAY))
  NOW_TIMESTAMP = time.time()
  NOW_TIMESTAMP = re.split("\." , str(NOW_TIMESTAMP))[0]
  NOW_DATETIME = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(NOW_TIMESTAMP)))
  NOW_TIME = time.strftime("%H:%M", time.localtime(int(NOW_TIMESTAMP)))
  # 转化时间
  EVENT_TIEM = time.strftime("%H:%M", time.localtime(EVENT_TIMESTAMP))
  # 故障发送时间
  TIME_INTERVAL = int(NOW_TIMESTAMP) - int(EVENT_TIMESTAMP)
  # 这次故障时间和现在时间差
  if IP == "127.0.0.1" :
  IP_END = ""
  else :
  IP_END = "-" + re.split("\." , IP)[-1]
  def send_lykchat(SEND_MESS_ID) :
  TRIG_MESS = HOST.replace(" " , "") + r"的" + TRIGGER.replace(" " , "")
  VALUE_MESS = ITEM_VALUE.replace(" " , "")
  if STATUS == "ok" :
  SEND_CONTEXT = TRIG_MESS + r"在" + NOW_TIME + r"恢复,故障持续" + str(TIME_INTERVAL / 60) + "分钟" + r",值为" + VALUE_MESS
  else :
  SEND_CONTEXT = MESSHEADER_QINZHUI + ":" + TRIG_MESS + r"在" + EVENT_TIEM + r"发生" + TRIGGER_LEVEL_CN + r"故障,已持续" + str(TIME_INTERVAL / 60) + "分钟" + r"值为" + VALUE_MESS
  SEND_CONTEXT = SEND_CONTEXT + "\nIP地址 : " + IP + "\n"
  SEND_CONTEXT = SEND_CONTEXT + r"主机名 : " + HOST + "\n"
  SEND_CONTEXT = SEND_CONTEXT + r"故障级别 : " + TRIGGER_LEVEL_CN + "\n"
  SEND_CONTEXT = SEND_CONTEXT + r"发生时间 : " + EVENT_DATETIME + "\n"
  SEND_CONTEXT = SEND_CONTEXT + r"持续时长 : " + str(TIME_INTERVAL / 86400) + "天" + str((TIME_INTERVAL % 86400) / 3600) + "小时" + str((TIME_INTERVAL % 3600) / 60) + "分钟" + str(TIME_INTERVAL % 60) + "秒\n"
  SEND_CONTEXT = SEND_CONTEXT + r"目前状态 : " + STATUS_CN + "\n"
  SEND_CONTEXT = SEND_CONTEXT + r"触发器名 : " + TRIGGER + "\n"
  SEND_CONTEXT = SEND_CONTEXT + r"当前值 : " + ITEM_VALUE + "\n"
  SEND_CONTEXT = SEND_CONTEXT + r"发送时间:  " + NOW_DATETIME + "\n\n"
  # 发送邮件正文
  try :
  url = 'http://127.0.0.1/sendmsg?username=zabbix&pwd=123456&friendfield=1&friend=' + str(SEND_MESS_ID) + '&content=' + str(SEND_CONTEXT)
  requests.get(url)
  except :
  pass
  for SEND_MESS_ID in SEND_MESS_ID_LIST :
  send_lykchat(SEND_MESS_ID)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430728-1-1.html 上篇帖子: 基于sendmail的简单zabbix邮件报警 下篇帖子: Zabbix使用Pycurl模块监控web页面状态
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表