本帖最后由 monicazhang 于 2017-9-15 11:57 编辑  
 
 前言         本篇文章介绍目前常用的告警方式,以及对功能实现做讲解。本篇文章中出现的代码片段可以回复"监控脚本"获取完整代码。  
 
   0x01 E-Mail 邮件告警方式  
    邮件告警方式是Zabbix最常见的告警方式,是每个初学者必须掌握的告警方式。在这,笔者分享邮件告警方式花样玩法——附带数据图  
 ▲ 效果展示图 
  
  
 ▲ 功能实现思路  
    zabbix告警传入item.ky参数,利用item.key获取当前的性能图 。最后构建邮件文本内容加入性能图片。  
  
▲ 性能图  
通过分析性能图有以下发现:  
zabbix/chart.php?period=864000& \ 
        stime=20180317191110&itemids%5B0%5D=25464& \  
        type=0&updateProfile=1&profileIdx=web.item.graph& \ 
        profileIdx2=25464&width=1778&sid=37a0a2403c5192c8& \ 
        screenid=&curtime=1490613155473 
 
period       # zabbix数据时间范围stime        # 开始时间itemids[0]   # item.keytype         # 图表类型profiledx    # 项类型width        # 图表宽度sid          # 用户sid 
 必须的参数有: "period"  : "3600"               # 一小时内的性能图"itemids[0]" : itemID            # item的id"type" : "0"                     # 图表类型"profileIdx" : "web.item.graph"  # 项"width"  : "700"                 # 宽度 
  仔细观察这些参数,发现变化的只有item id 其他都是可以不变的,而item.ky是在告警的时候可以直接传入的。  
▲ Actions  
告警动作里的配置: 
 HOST.HOST1:{HOST.HOST1}|HOST.IP1:{HOST.IP1}|EVENT.DATE:{EVENT.DATE}|EVENT.TIME:{EVENT.TIME}|TRIGGER.SEVERITY:{TRIGGER.SEVERITY}|TRIGGER.NAME:{TRIGGER.NAME}|ITEM.KEY1:{ITEM.KEY1}|ITEM.NAME1:{ITEM.NAME1}|ITEM.VALUE1:{ITEM.VALUE1}|ITEM.ID:{ITEM.ID}|TRIGGER.STATUS:{TRIGGER.STATUS} 
 
▲ 指定item.key获取性能图功能实现 
  
代码片段展示 import requestsmyRequests = requests.Session() 
def GetGraph(itemID,pName=None):    try: 
        """ 
        获取性能图,首先需要登录 
        通过分析,可以直接Post/Get方式登录 
        """        loginUrl = "http://%s/zabbix/index.php" % HOST        loginHeaders={             
        "Host":HOST,             
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",        } 
         
        # 构建登录所需的信息        playLoad = {             
        "name":USER,             
        "password":PASSWD,             
        "autologin":"1",             
        "enter":"Sign in",        } 
         
        # 请求登录         res = myRequests.post(loginUrl,headers=loginHeaders,data=playLoad) 
        """ 
        登入状态后,在POST数据中加入itemid 
        """        testUrl = "http://%s/zabbix/chart.php" % HOST        testUrlplayLoad = {             
            "period" :"3600",             
            "itemids[0]" : itemID,             
            "type" : "0",             
            "profileIdx" : "web.item.graph",             
            "width" : "700",        }        testGraph = myRequests.get(url=testUrl,params=testUrlplayLoad) 
                # 返回图片源码,直接保存到本地        IMAGEPATH = os.path.join('/tmp', pName)        f = open(IMAGEPATH,'wb')        f.write(testGraph.content)        f.close()                return pName     
            except Exception as e:         
        print e         
        return False 
 
    finally:        myRequests.close() 
  
 
 0x02 Phone Call  电话告警方式  
      现在有许多语音通知接口厂商,所以想要实现电话告警,骚一贼!(so easy)。很多小伙伴没有部署有几个原因: 
  
Q : 增加成本/费用 A : 有这个想法,首先你得先了解接口厂商收费标准。正常请求没有接听是不需要收费的,也就是说:收到电话时掐掉电话是不需要收费的。     笔者接口厂商十块钱余额用了一年,这十块钱还是新用户注册送的...hahahaha. 这种做法显然对厂商十分不利,但是我有不接听的理由:1) 政策限制,由于政策限制,现在无法长语音转文本,通常是很有限字数,给的信息十分有限。2) 转换慢, 我们请求的时候是需要先把文本转换成语音,接着再拨打电话将这段语音推送出去的。现在文本转语音已经有限制,需要审核通过才能发送。即使有厂商不用审核,这转换过程也是非常慢的。 3) 收到响声就已经处于备战状态。当你收到这个电话号码打来时,意味着你已经拿起手机,知道有故障。那这个时候,你完全可以看邮件/微信上面显示的告警内容。  
Q : 大半夜收到电话 A : 电话告警只限最紧急的故障,平常一些普通级别的告警不建议使用电话通知方式,频繁收到紧急严重的故障问题,那你考虑的不应该是告警了,而是这套系统本身。故障是客观存在的,遇到故障一味更改告警阈值或告警方式,却忽略最根本的问题,有问题在,才会有告警,不解决问题,这告警一直在。再者就是一个对工作态度的问题了。  
 
▲ 功能实现思路  
    根据严重级别分类触发电话告警脚本,回复"监控脚本"获取脚本。  
 
 
 0x03 SMS  短信告警方式  
    短信告警同样采用接口厂商提供的API接口,收取费用标准一般是3-5分钱/次。适用于中等到严重级别的告警。 
  
▲ 功能实现思路  
    根据严重级别分类触发短信告警脚本,回复"监控脚本"获取脚本。  
 ▲ 效果展示图  
 
 
 0x04 Wechat  微信公众号告警方式  
    微信告警方式也作为常用的告警方式,需要申请微信公众号。  
▲ 功能实现思路:  
     根据严重级别分类触发微信告警脚本,回复"监控脚本"获取脚本。  
 ▲ 效果展示图  
  
  
  
  
 0x05 Other 其他告警方式  
    一些其他的有趣告警,例如:QQ 、微信号、RTX、钉钉等告警方式都需要通过自己写脚本去请求接口完成,这里不做演示。QQ/微信都是通过分析网页版去模拟请求,RTX与钉钉有自己的接口。 
  
▲ Github上相关的项目 QQ    [  /pandolia/qqbotWechat]pandolia/qqbotWechat[/url] [  /liuwons/wxBotRTX]liuwons/wxBotRTX[/url]  [  /rainfiel/rtx]rainfiel/rtx[/url] 
... 
▲ 效果展示图  
 RTX  
  
  
 
 总结  ………………………………  
各种告警方式对比:  
 
 
 
原创: 运维大部队  |