6-zabbix事件通知设置

熊 0 阅读 监控平台

通知设置过程中相关宏说明:

  • {HOST.HOST}/{HOSTNAME} : 主机名称 在触发器表达式中,可以用数字索引,来指向第一个,第二个,第三个主机,等等。例如 : {HOST.HOST<1-9>} 。过去使用 {HOSTNAME<1-9>},当前版本已弃用。

  • {HOST.NAME} : 可见主机名。这个宏可以和一个数字索引一起使用,例如 : {HOST.NAME<1-9>} 指向触发器表达式中的第1个、第2个、第3个等主机。

  • {HOST.PORT} : 主机端口

  • {ITEM.NAME} : 触发器表达式中导致通知的第N个监控项的名称。

  • {ALERT.MESSAGE} : 设置的通知内容

  • {ALERT.SENDTO} : 收件人媒介

  • {ALERT.SUBJECT} : 通知主题

  • {EVENT.DATE} : 触发器时间

  • {EVENT.DURATION} : 事件持续时间(发生问题和恢复事件之间的时差)*, 精确到秒 在问题恢复信息中有用

  • {EVENT.RECOVERY.TIME} : 恢复时间

  • {ITEM.VALUE} : 如果在触发器状态更改的上下文中使用,则解释为触发器表达式中第N个监控项的历史值(事件发生时),例如在展示事件或发送通知时。

    如果在没有触发器状态更改的上下文的情况下使用,触发器表达式中第N个监控项的最新值。例如,在弹出选择窗口中显示触发器列表时。在本例中工作方式与 {ITEM.LASTVALUE}相同。

1. 邮件通知

1.1 创建告警发件箱

  1. 邮箱开启SMTP

    image-20240319215845735
  2. 创建报警媒介的邮箱信息,这里创建的是报警的发件箱

    image-20240319220532696

1.2 指定用户收件箱

  1. 创建收件用户 ,这里需要注意,只有超级用户(Super admin role)采用接收邮件,使用告警媒介的权限

    image-20240319220723227
    image-20240319220810008
    image-20240319220906342
  2. 为新建用户添加报警媒介, 并添加用户收件箱

    image-20240319221834102
    image-20240319221915210
  3. 为admin用户添加收件箱

    image-20240319222041602

1.3 设置动作

  1. 创建新的动作

    image-20240319222154309
    image-20240319222256728
  2. 添加动作的新的操作

    默认标题 : 业务报警{TRIGGER.STATUS}
    消息内容 : 上海业务报警服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}
    image-20240319222354058
    image-20240319223149465
  3. 配置恢复操作, 当故障恢复之后,实现当故障恢复之后,发送邮件给对应的人

    image-20240319225607361

1.4 测试动作

  1. 关闭nginx服务, 使得zabbix页面有报警信息

  2. 查看首页, 有报警信息

    image-20240319223546581
  3. 等大概一分钟左右, 页面会提示按照设置好的步骤, 发送邮件

    image-20240319224048703
  4. 同时邮箱会收到两个报警邮件

    image-20240319224328745

1.3 邮件分级告警

分级报警主要的目的, 当在一定时间内报警没有处理成功,会将报警信息传给其他人去处理。主要实现方式是通过设置在不同步骤设置不同的发件人实现

  • 将步骤3-4 发邮件给admin用户

    image-20240319224948944
  • 设置完成之后会发现有两个操作

    image-20240319225034265

配置完成之后,前两个步骤 会发送给wangyi用户, 后面两个步骤会发送给admin用户

另外可以通过可以通过将邮件发送给不同的用户组实现针对公司部门邮件的发送

2. 短信通知

2.1 创建短信脚本

  1. 查看zabbix_server配置文件zabbix_server.conf

    vim /etc/zabbix/zabbix_server.conf

    找到AlertScriptsPath

    zabbix-alert-message-1
  2. 创建脚本

    vim /usr/lib/zabbix/alertscripts/sendSms.sh
    ​
    #!/bin/bash
    # 脚本的日志文件
    LOGFILE="/tmp/SMS.log"
    :>"$LOGFILE"
    exec 1>"$LOGFILE"
    exec 2>&1
    MOBILE_NUMBER=$1 # 手机号码
    MESSAGE_UTF8=$3 # 短信内容 $2没有用到
    XXD="/usr/bin/xxd"
    CURL="/usr/bin/curl"
    TIMEOUT=5
    # 短信内容要经过URL编码处理
    MESSAGE_ENCODE=$(echo "$MESSAGE_UTF8" | ${XXD} -ps | sed 's/\(..\)/%\1/g' | tr -d '\n')
    # Uid和Key的值需要自行修改
    # Uid 网站用户ID
    # Key 接口秘钥
    Uid="XXXXXXX"
    Key="XXXXXXX" #接口秘钥可以在网站中查询到
    # SMS API
    URL="http://sms.253.com/msg/send?un=${Uid}&pw=${Key}&rd=1&phone=${MOBILE_NUMBER}&msg=${MESSAGE_ENCODE}"
    # Send it
    set -x
    ${CURL} -s --connect-timeout ${TIMEOUT} "${URL}"

    或者

    #!/bin/sh
    #脚本的日志文件
    LOGFILE="/var/log/zabbix/zlsms.log"
    :>"$LOGFILE"
    exec 1>"$LOGFILE"
    exec 2>&1
    ​
    #用户名 查看用户名是登录用户中心->验证码短信->产品总览->APIID
    account="用户名"
    #密码 查看密码请登录用户中心->验证码短信->产品总览->APIKEY
    password="密码"
    #修改为您要发送的手机号
    mobile=$1
    #内容里的1234是变量。可以修改成任意4-8位数字
    content=$2
    echo "send sms:"
    curl --data "account=$account&password=$password&mobile=$1&content=$2" "http://106.ihuyi.com/webservice/sms.php?method=Submit"

    或者

    #!/bin/bash
    source   /etc/profile
    PHONE=$1
    SUBJECT=$2
    MESSAGE=$3
    /usr/bin/curl -X "POST" "https://sms.yunpian.com/v2/sms/single_send.json"   -H "content-type: application/x-www-form-urlencoded"  -d "apikey=API-KEY" -d "mobile=${PHONE}"  -d "text=${MESSAGE}"
    ​
    #echo $? >> /tmp/magedu_zabbix_sms.txt
    #echo $1  $3 >> /tmp/magedu_zabbix_sms.txt
  3. 修改脚本权限

    chown zabbix:zabbix /usr/lib/zabbix/alertscripts/sendSms.sh
  4. 验证脚本是否正确

    cd /usr/lib/zabbix/alertscripts/
    ./sendSms.sh 手机号xxxxx "hello"

2.2 zabbix web 后台配置

  1. 创建媒体类型

    zabbix-alert-message-2

    填写以上信息,点“添加”

    zabbix-alert-message-3
  2. 配置用户手机号

    以管理员“admin”用户为例

    zabbix-alert-message-4

    选“报警媒介”-“添加”,选择类型并填写收信的手机号,点“添加”

    zabbix-alert-message-5
  3. 配置告警动作

    创建动作

    zabbix-alert-message-6

    配置动作

    zabbix-alert-message-8

    “动作”-“条件”

    zabbix-alert-message-9

    “动作”-“操作”

    zabbix-alert-message-10

    “动作”-“操作”-“新的”

    zabbix-alert-message-11

2.3 测试

关闭客户端

zabbix-alert-message-12

如果收到短信证明OK了

3. 企业微信通知

3.1 企业微信配置

3.1.1 创建应用

  1. 注册企业微信,管理员需要写上自己的真实姓名,扫描以下的二维码,与微信关联真实姓名。

    image-20240320123442003
  2. 登陆企业微信,然后创建一个微信故障通知应用

    image-20240320124218778
    image-20240320124529321

  1. 收集应用的AgentID、Secret

    image-20240320124926420
  2. 收集企业ID

    image-20240320125141729

3.1.2 创建用户

  1. 在通讯录中创建新用户

    image-20240320125612473

3.2 zabbix server后台配置

简易教程 - 文档 - 企业微信开发者中心 (qq.com)

  1. 安装python脚本需要的命令。在指定的目录下/usr/lib/zabbix/alertscripts创建weixin.py脚本,在企业微信里找到agentid、企业ID以及企业秘钥

    #!/usr/bin/env python
    #coding:utf-8
    #Author:Zhang ShiJie
    import requests
    import sys
    import os
    import json
    import logging
     
     
    logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
    datefmt = '%a, %d %b %Y %H:%M:%S',
    filename = os.path.join('/tmp','weixin.log'), # 指定临时weixin的日志路径
    filemode = 'a')
     
    corpid='xx'  # 需要修改企业ID
    appsecret="xxx"  # 企业的secret秘钥
    agentid="xxx" # 修改agentid
    token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
    req=requests.get(token_url)
    accesstoken=req.json()['access_token']
     
     
    msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
    touser=sys.argv[1]
    subject=sys.argv[2]
    message=sys.argv[2] + "\n\n" +sys.argv[3]
     
     
    params={
    "touser": touser,
    "msgtype": "text",
    "agentid": agentid,
    "text": {
    "content": message
    },
    "safe":0
    }
     
     
    req=requests.post(msgsend_url, data=json.dumps(params))
    logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
  2. 安装python脚本需要的命令

    [root@zabbix-server ~]# yum install python3-pip
    [root@zabbix-server ~]# pip3 install requests
  3. 对weixin.py脚本加上执行权限,并将属组和属主加上

    [root@zabbix-server alertscripts]# pwd  # 将weixin.py脚本存放在此目录下
    /usr/lib/zabbix/alertscripts
    [root@zabbix-server alertscripts]# chmod +x weixin.py  # 加上执行权限
    [root@zabbix-server alertscripts]# chown zabbix.zabbix weixin.py  -R  # 将权限进行修改
    [root@zabbix-server alertscripts]# ll
    total 4
    -rwxr-xr-x 1 zabbix zabbix 981 Dec 25 02:55 weixin.py
  4. 对weixin.py脚本进行测试

    [root@zabbix-server alertscripts]``# python weixin.py 姓名账号 "这是主题" "这是内容"
    [root@zabbix-server alertscripts]``# python weixin.py 姓名账号 "这是主题" "这是内容11"
    [root@zabbix-server alertscripts]``# python weixin.py 姓名账号 "这是主题" "这是内容 linux"
  5. 此处很关键,由于手动推送的脚本生成的临时文件/tmp/weixin.log是root权限的数据,我们启动的zabbix--server服务器都是zabbix 用户启动的,需要我们将/tmp/weixin.log文件的属组和属主改为zabbix用户,或者删除即可。

    [root@zabbix-server alertscripts]# ll /tmp/weixin.log
    -rw-r--r-- 1 root root 914 Feb 28 09:20 /tmp/weixin.log
    [root@zabbix-server alertscripts]# rm -rf /tmp/weixin.log  #删除临时log文件
     
    [root@zabbix-server alertscripts]# chown zabbix.zabbix  /tmp/weixin.log  -R  # 改为zabbix用户
  6. 手动推送脚本成功后,此时手机上就可以收到,微信故障报警通知

    1769223-20200227125255034-554491420

3.3 zabbix server页面配置

3.3.1 创建nginx监控

这里在linux系统上配置nginx服务、监听nginx状态以及监听nginx的80端口

  1. 创建主机群组

    1769223-20200228092726504-1522377205
  2. 创建主动模式的proxy代理

    1769223-20200228093452021-1228840426
  3. 创建监控nginx模板

    1769223-20200228100005078-1291473669
  4. 全克隆一个监控主动模式的proxy代理模板,因为默认的监控项里边的监控项原型、网络部分都是被动模式,需要将选项改为主动模式,时间间隔设置为5s,生产中设置为5m,

    1769223-20200228100151457-1705873188
  5. 创建主机,添加的主动模式代理的proxy代理模板

    1769223-20200228093229261-1241297443
  6. 开始关联主机模板

    1769223-20200228100907284-561115453
  7. 在上面创建的Linux_nginx模板没有应用集、监控项、触发器等信息,需要在下面进行添加,第一步先创建应用集。

    1769223-20200228101158515-678686346
  8. 创建监控项,这里只创建了监听nginx的80端口

    1769223-20200228101512655-1447730469
  9. 创建触发器,这里只做了监听nginx的80端口监听,其他的同理一样的操作。

    1769223-20200228102028052-861855344

    监控的agent主机是默认五分钟内不可用就会触发触发器,表达式含义是 : 在5分钟之内的agent.ping不等于1就触发报警

    1769223-20200228110006100-1578901187
  10. 创建监控nginx图形

    1769223-20200228102227884-1098558642
  11. 此时可以看到监控的nginx主机配置正常

    1769223-20200228104453230-1662203997
  12. 查看nginx监控图形

    1769223-20200228104817190-244035798

3.3.2 zabbix创建触发报警

  1. 创建报警媒介类型,脚本参数如下 :

    {ALERT.SENDTO}  # 发给谁
    {ALERT.SUBJECT}  # 主题
    {ALERT.MESSAGE} # 信息
    1769223-20200228102611247-1852134083
  2. 创建用户

    1769223-20200228102759555-330356068
  3. 修改VIP的用户权限,改为超级管理员,其他创建的用户也一样。

    1769223-20200228102833426-293600315
  4. 对创建的用户(VIP)全部都加上报警媒介。

    1769223-20200228103009944-810689381
  5. 创建动作

    1769223-20200228103252866-1208215358
  6. 在动作里添加操作。

    默认标题 : 业务报警{TRIGGER.STATUS}
    消息内容 : 上海业务报警服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}
    1769223-20200228103721200-726732726
  7. 在动作里添加恢复操作,用来提醒自己,业务已经恢复。

    默认标题 : 业务报警{TRIGGER.STATUS}
    消息内容 : 上海业务报警服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}
    1769223-20200228104110890-2121238843

3.3.3 测试结果

  1. 在被监控端停掉nginx服务和zabbix-agent服务

    [root@node1 ~]# nginx -s stop
    [root@node1 ~]# systemctl stop zabbix-agent
  2. 查看此时的报警信息。

    1769223-20200228110432792-104654035
  3. 查看此时的企业微信发送的报警信息

    1769223-20200228112912668-137491101
  4. 恢复此时的nginx服务及zabbix-agent服务,查看企业微信发送的恢复消息

    1769223-20200228113008146-2040501103

4. 钉钉通知

4.1 钉钉操作

  1. 创建群聊,把需要收到报警的人员都拉到这个群 :

    20201120151941516
    20201120151948256
    2020112015195696
  2. 创建钉钉机器人

    20201120152021904
    20201120152028548
    20201120152036670
    20201120152042250
    20201120152049370
    20201120152056576
    20201120152103756

    点击“设置说明”可以查看钉钉服务端API说明。

4.2 脚本配置

  1. 查看zabbix-server脚本存放的位置 :

    [root@controlnode ~]# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf
     
    AlertScriptsPath=/usr/lib/zabbix/alertscripts
  2. 创建钉钉报警脚本:

    [root@controlnode ~]# cd /usr/lib/zabbix/alertscripts/
     
    [root@controlnode alertscripts]# vim dingding.py
    
    #!/usr/bin/python
     
    #-*- coding: utf-8 -*-
     
    #zabbix钉钉报警
     
     
    import requests,json,sys,os,datetime
     
    webhook="https://oapi.dingtalk.com/robot/send?access_token=feb43aea482d9da72e781d92dbfc074f701642a166f31194ff347954f500a404"
     
    #说明 : 这里改为自己创建的机器人的webhook的值
     
    user=sys.argv[1]
     
    #发给钉钉群中哪个用户
     
    text=sys.argv[3]
     
    #发送的报警内容
     
    data={
     
        "msgtype": "text",
     
        "text": {
     
            "content": text
     
        },
     
        "at": {
     
            "atMobiles": [
     
                user
     
            ],
     
            "isAtAll": False
     
        }
     
    }
     
    #钉钉API固定数据格式
     
    headers = {'Content-Type': 'application/json'}
     
    x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
     
    if os.path.exists("/var/log/zabbix/dingding.log"):
     
        f=open("/var/log/zabbix/dingding.log","a+")
     
    else:
     
        f=open("/var/log/zabbix/dingding.log","w+")
     
    f.write("\n"+"--"*30)
     
    if x.json()["errcode"] == 0:
     
        f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))
     
        f.close()
     
    else:
     
        f.write("\n"+str(datetime.datetime.now()) + "    " + str(user) + "    " + "发送失败" + "\n" + str(text))
     
        f.close()
     
  3. 赋予脚本执行权限和创建日志文件 :

    • 脚本赋予可执行权限 :

      [root@controlnode alertscripts]# chmod +x dingding.py
    • 创建日志文件 :

      [root@controlnode alertscripts]# touch /var/log/zabbix/dingding.log
       
      [root@controlnode alertscripts]# chown zabbix.zabbix /var/log/zabbix/dingding.log
  4. 手动测试脚本是否可以正常发送消息 :

    • 测试命令:

      [root@controlnode alertscripts]# ./dingding.py qichangjun0110 test "这是条告警测试信息,请忽略"

      参数说明 :

      • `qichangjun0110 , 钉钉群中任意一个人员的钉钉号。

        如何查看自己的钉钉号 :

        20201120152517504
      • test : 这里因脚本中没有设置接收参数,所以无实际意义,仅仅起到变量占位的作用。

      • "这是条告警测试信息,请忽略" : 这是具体的告警信息,告警信息必须包含“安全设置” 中自己设置的“自定义关键词”,否则无法发送告警信息,我这里设置的告警关键字是"告警"。

        20201120152534800

        注意 : 该脚本要求至少python2.6.6版本,且具有requests模块,否则会报如下错误

        Traceback (most recent call last):
         
          File "./dingding.py", line 4, in <module>
         
            import requests,json,sys,os,datetime
         
        ImportError: No module named requests

        解决办法如下 :

        yum install python-pip -y
        pip install --upgrade pip
        pip install requests
    • 钉钉群收到报警信息 :

      20201120152755732
    • 在ZabbixServer上查看发送消息日志 :

      [root@controlnode alertscripts]# cat /var/log/zabbix/dingding.log

4.3 zabbix web 界面设置 :

触发器触发"动作"——>特定的"报警媒介"——>单个用户的账号或用户组中用户的账号

  1. 创建报警媒介 :

    20201120152855760
    20201120152948204

    脚本参数 :

    {ALERT.SENDTO} : 对应脚本中的,user=sys.argv[1](发给钉钉群中哪个用户)。

    {ALERT.SUBJECT} : 代表发送的信息的标题,在"报表"的"动作日志"中可以看到。

    {ALERT.MESSAGE} : 对应脚本中的,text=sys.argv[3](发送的报警内容)。

  2. 创建报警动作,将报警发送给Admin用户 :

    • 创建动作

      20201120153000400
    • 添加触发器,添加上文环境准备的触发器

      20201120153023156
    • 分别添加告警操作和恢复操作

      20201120153034670
    • 添加告警操作

      20201120153043610
      "主题"对应"钉钉告警"媒介中的:{ALERT.SUBJECT}
      
      "消息"对应"钉钉告警"媒介中的:{ALERT.MESSAGE}
      
      主题:
      故障名称(触发器名称):{EVENT.NAME}
      消息:
      告警主机:{HOSTNAME1}
      告警时间:{EVENT.DATE} {EVENT.TIME}
      告警等级:{TRIGGER.SEVERITY}
      告警信息: {TRIGGER.NAME}
      告警项目:{TRIGGER.KEY1}
      问题详情:{ITEM.NAME}:{ITEM.VALUE}
      当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
      事件ID:{EVENT.ID}
    • 点击添加

      20201120153408110
  3. 给Admin用户添加报警媒介:

    2020112015344346
    20201120153450852

    "收件人"对应"钉钉告警"中的:{ALERT.SENDTO}

    特别注意:这里只需要添加钉钉群里的任何一个成员的钉钉账号即可,即添加一个收件人,这样在机器人群里成员都能看到告警信息.

    如果添加多个收件人,则机器人群里就会发送多个告警信息,一个收件人发一条信息.

    20201120153503390

4.4 报警测试

  1. httpd服务停止告警:

    停止httpd服务:

    [root@controlnode alertscripts]# systemctl stop httpd

    服务故障告警信息:

    20201120153832636
  2. httpd 服务恢复告警:

    启动httpd服务:

    [root@controlnode alertscripts]# systemctl start httpd

    服务恢复告警信息:

    20201120153925212


参考链接

zabbix短信报警提醒配置详细教程-琼杰笔记 (zhangqiongjie.com)

Zabbbix之十二------Zabbix实现微信报警通知及创建聚合图形 - 一叶知秋~~ - 博客园 (cnblogs.com)

Zabbix5.0钉钉告警实战_zabbix 钉钉告警-CSDN博客