• (1.4)zabbix3.4 实现邮件/微信报警


    【1】利用QQ邮箱直接在web界面配置邮件服务器

    【1.1】配置报警媒介

    我这边用到的是常用的QQ个人邮箱(要是腾讯企业邮箱的话,可以直接用账户密码去填写下面的用户名称和密码)

    如下图所示,管理--->报警媒介类型--->Email

    名称:随便起

    SMTP服务器:smtp.exmail.qq.com

    端口:25(腾讯企业版邮箱用465)

    SMTP电邮:XXXX@qq.com

    用户名称:XXXX@qq.com,这里的用户名称是你的发件人用户,密码的话要使用IMAP/SMTP的授权码当做密码,而不是QQ密码。

    QQ授权码获取具体见(https://jingyan.baidu.com/article/3ea51489a135f752e71bba5b.html)文中的【1】【2】步骤。

      

    【1.2】配置报警动作

    配置--->动作--->触发器

    创建一个触发器来发邮件报警

    操作:

    默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

    消息内容:

    告警主机:{HOSTNAME1}
    告警时间:{EVENT.DATE}{EVENT.TIME}
    告警等级:{TRIGGER.NAME}
    告警项目:{TRIGGER.KEY1}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID:{ENET.ID}

    恢复操作:

    默认标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

    消息内容:

    告警主机:{HOSTNAME1}
    告警时间:{EVENT.DATE}{EVENT.TIME}
    告警等级:{TRIGGER.NAME}
    告警项目:{TRIGGER.KEY1}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID:{ENET.ID}

    确认操作:

    默认标题:已确认: {TRIGGER.NAME}

    消息内容:

    {USER.FULLNAME} 已经确认的问题 {ACK.DATE} {ACK.TIME} 以下消息:
    {ACK.MESSAGE}

    目前的问题状态是{EVENT.STATUS}

      

    【1.3】配置接收用户的报警媒介

    最后配置报警媒介,也就是触发报警条件,要下发邮件通知道哪个邮箱里面

    点击那个小头像,然后进入到用户基本资料,选择报警媒介进行设置

    可以自己选择严重性级别,设置完启用了以后,报警功能就设置完成了!

      

      

    【2】在Server端配置邮件服务器

    【2.1】基本环境与流程

    实验环境:Zabbix监控服务器、客户端都已经部署完成,被监控主机已添加完成,Zabbix监控运行正常。服务器,selinux,已经关闭

    zabbix端  :ip 10.10.251.48   hostname=zabbix-server-server

    被监控端: ip 10.10.251.58   hostname=zabbix-agent-centos65

    实现目的:被监控端检测到数据达到触发器预设值后,会自动发送报警邮件到指定的邮箱,报警结束后,会发邮件说明,

    大致流程

    (1)server端安装邮件服务器,并且测试

    (2)被监控端自定义key,并且在web端添加items,action,并且测试是否可以正常报警,

    (2)去web端添加邮件触发动作,和需要发送报警内容。设置邮件间隔时间间隔(测试设置时间间隔要短,有错误时,改正后方便确认,)。

    【2.2】server端安装邮件服务器

    yum install mailx sendmail -y  

    需要修改默认配置文件

    vi /etc/mail.rc    本次使用163邮箱测试

    set sendcharsets=iso-8859-1,utf-8                      #指定字符集
    set from=xxxxxxxxxxx@163.com        #邮箱号
    set smtp=smtp.163.com:25              #smtp邮件服务器,端口默认25
    set smtp-auth-user=xxxxxxxxxxxx@163.com      # 发邮件的用户名
    set smtp-auth-password=xxxxxxxxxx         #发邮件的密码

    修改完成后测试是否可以发送邮件

    echo "zabbix test mail" |mail -s "zabbix" 88930869@qq.com  发送zabbix(主题),"zabbix test mail"(内容)给这个88930869@qq.com 邮箱

    【2.3】编辑web端,添加邮件触发

    管理===>报警媒介类型===>按照自己实际情况填写

    管理===>用户===>报警媒介===>编辑===>按照自己实际情况填写

    【2.4】自定义监控项让其报警

    监控项:服务器登陆人数不能超过三人,超过三人报警

    需要在agent端修改

    vim /etc/zabbix/zabbix_agentd.con

    systemctl restart zabbix-agent

    server端测试是否可以获取到key

    沟通主机没有问题,可以正常获取到服务器登陆人数

    【2.5】在web端添加监控项

      

    2)添加触发条件

      

    3)触发器和邮件报警关联

      

    触发报警后操作

      

    【2.6】测试邮件报警

      

      

    【3】配置微信报警

    【3.1】基本环境及基本流程

    说明:脚本参考别的博客,- - 反正不是自己写的

    实验环境:Zabbix监控服务器、客户端都已经部署完成,被监控主机已添加完成,Zabbix监控运行正常。服务器,selinux,已经关闭

    zabbix端  :ip 10.10.251.48   hostname=zabbix-server-server

    被监控端: ip 10.10.251.58   hostname=zabbix-agent-centos65

    实现目的:被监控端检测到数据达到触发器预设值后,会自动发送报警邮件到指定的微信,报警结束后,会发邮件说明,

    大致流程

    (1)获取微信重要的信息corpid(企业id),corpsecret, 部门id,参考https://www.cnblogs.com/kumarhua/p/7645399.html来获取信息。

    (2)获取Access_Token: 根据自己的corpid和corpsecret获取AccessToken,这个像微信发送的接口,一定确认过去正确

    (3)添加微信调用脚本,附加3个参数,报警时会自动发送微信

    (2)去web端添加卫星触发动作,和需要发送报警内容。设置邮件间隔时间间隔(测试设置时间间隔要短,有错误时,改正后方便确认,)。

    【3.2】获取微信接口,写微信调用脚本

    1)AccessToken说明

      

    2)写微信脚本,在server端确认脚本路径

      

    3)需要安装simplejson(python脚本中需要用到)

    wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
    tar zxvf simplejson-3.8.2.tar.gz ; cd simplejson-3.8.2
    python setup.py build
    python setup.py install
    
    

    4)vi  /usr/lib/zabbix/alertscripts/wechat.py

    #!/usr/bin/python
    #_*_coding:utf-8 _*_
    
    
    import urllib,urllib2
    import json
    import sys
    import simplejson
    
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    
    def gettoken(corpid,corpsecret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
    
    
    print  gettoken_url
        try:
            token_file = urllib2.urlopen(gettoken_url)
        except urllib2.HTTPError as e:
            print e.code
            print e.read().decode("utf8")
            sys.exit()
        token_data = token_file.read().decode('utf-8')
        token_json = json.loads(token_data)
        token_json.keys()
        token = token_json['access_token']
        return token
    
    def senddata(access_token,user,subject,content):
    
        send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
        send_values = {
            "touser":"xxxxxxx",   #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
            "toparty":"x",        #企业号中的部门id。
            "msgtype":"xxxx",     #消息类型。
            "agentid":"xxxx",  #企业号中的应用id。
            "text":{
                "content":subject + '
    ' + content
               },
            "safe":"0"
            }
    #    send_data = json.dumps(send_values, ensure_ascii=False)
        send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
        send_request = urllib2.Request(send_url, send_data)
        response = json.loads(urllib2.urlopen(send_request).read())
        print str(response)
    
    if __name__ == '__main__':
        user = str(sys.argv[1])     #zabbix传过来的第一个参数
        subject = str(sys.argv[2])  #zabbix传过来的第二个参数
        content = str(sys.argv[3])  #zabbix传过来的第三个参数
    
        corpid =  'xxxxxx'     #企业号的标识(上文中提到获取位置)
        corpsecret = 'xxxxxx'    #管理组凭证密钥(上文中提到获取位置)
        accesstoken = gettoken(corpid,corpsecret)
        senddata(accesstoken,user,subject,content)

    5)测试脚本是否可以正常发到微信,

     

      

    看到这个就成功了

    【3.3】配置web端报警

     管理==》报警媒介类型==》类型选择(脚本)==》添加三个参数

      

     配置==》动作==》操作==》通过微信发送

      

    【3.4】测试微信报警

      

    【2】【3】参考转发自:https://www.cnblogs.com/zdoubly/p/9230586.html

    微信、邮件、钉钉参考:https://www.cnblogs.com/wangchengshi/p/10925502.html

  • 相关阅读:
    [网络流24题] 最小路径覆盖问题
    [P2664] 树上游戏
    [ZROI #316] ZYB玩字符串
    [Codeforces #172] Tutorial
    [网络流24题]方格取数
    Python 全栈开发:python函数进阶
    Python 全栈开发:python函数基础
    Python 全栈开发:python文件处理
    Python 全栈开发:python字符编码
    Python 全栈开发:python字典dict
  • 原文地址:https://www.cnblogs.com/gered/p/12621387.html
Copyright © 2020-2023  润新知