Skip to content

Zabbix 告警

管理 —> 报警媒介类型 —> 创建报警媒介类型

内置邮箱告警

获取163邮箱授权码

登录邮箱 —>设置 —> 开启POP3/SMTP服务 —> 点击新增授权码

创建媒介类型

管理 —> 报警媒介类型 —> 创建媒体类型

  • 名称:自定义如:163邮箱告警
  • 类型:电子邮件
  • SMTP服务器:smtp.163.com
  • SMTP服务器端口:25
  • SMTP HELO:163.com
  • SMTP电邮:你的邮箱名如:zabbix@163.com
  • 安全链接:无
  • 认证:用户名和密码
  • 用户名称:你的邮箱名如:zabbix@163.com
  • 密码:申请的授权码

告警用户

可以自定义创建用户然后点进用户进入详情选择报警媒介

  • 类型:脚本邮件告警选择之前创建的媒介类型
  • 收件人:zabbix@qq.com

创建动作

配置 —> 动作 —> Trigger actions —> 创建动作

动作

  • 名称:自定义
  • 条件:这里设置的是触发条件
    • 类型:触发器
    • 操作者:=
    • 触发器:选择之前创建的

操作

  • 默认操作步骤持续时间:单位s、h、d

  • 操作:

    • Send to user groups:通知的用户组

    • Send to users:通知的用户

    • 自定义消息内容:勾选

      • 主题:

        bash
        故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
      • 消息:

        bash
        告警主机:{HOSTNAME1}
        告警时间:{EVENT.DATE} {EVENT.TIME}
        告警等级:{TRIGGER.SEVERITY}
        告警信息: {TRIGGER.NAME}
        告警项目:{TRIGGER.KEY1}
        问题详情:{ITEM.NAME}:{ITEM.VALUE}
        当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
        事件ID:{EVENT.ID}
      • 条件:默认即可

  • 恢复操作:

    • Send to user groups:通知的用户组

    • Send to users:通知的用户

    • 自定义消息内容:勾选

      • 主题:

        bash
        故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}恢复
      • 消息:

        bash
        告警主机:{HOSTNAME1}
        告警时间:{EVENT.DATE} {EVENT.TIME}
        告警等级:{TRIGGER.SEVERITY}
        告警信息: {TRIGGER.NAME}
        告警项目:{TRIGGER.KEY1}
        问题详情:{ITEM.NAME}:{ITEM.VALUE}
        当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
        事件ID:{EVENT.ID}
      • 条件:默认即可

外置脚本邮箱告警

获取邮箱授权码

QQ邮箱

设置 —> 安全设置 —> 生成授权码

配置文档:https://wx.mail.qq.com/list/readtemplate?name=app_intro.html#/agreement/authorizationCode

网易邮箱

登录邮箱 —>设置 —> 开启POP3/SMTP服务 —> 点击新增授权码

设置邮箱服务

bash

cat >> /etc/mail.rc << EOF

set from=zabbix@qq.com
set smtp="smtps://smtp.qq.com:465"
set smtp-auth-user=zabbix@qq.com
set smtp-auth-password=zaaxkopruooibcjj
EOF

echo "邮件内容内容" | mail -s "邮件主题" zabbix@qq.com
  • from:发送邮箱地址
  • smtp:发送邮件服务器
  • smtp-auth-user:邮箱名
  • smtp-auth-password:授权码

设置Zabix告警脚本

bash
# 指定脚本路径
cat >> /usr/local/zabbix/etc/zabbix_server.conf << EOF
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
EOF

# 告警脚本
cat > /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh << "EOF"
#export.UTF-8
to=$1
subject=$2
content=$3

# 发送邮件
/usr/bin/mail -s "$subject" "$to" << EOF
$content
EOF
EOF

chmod +x /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh

创建媒介类型

管理 —> 报警媒介类型 —> 创建媒体类型

  • 名称:自定义如:脚本邮件告警
  • 类型:脚本
  • 脚本名称:sendmail.sh
  • 脚本参数:

告警用户

可以自定义创建用户然后点进用户进入详情选择报警媒介

  • 类型:脚本邮件告警选择之前创建的媒介类型
  • 收件人:zabbix@qq.com

创建动作

配置 —> 动作 —> Trigger actions —> 创建动作

动作

  • 名称:自定义
  • 条件:这里设置的是触发条件
    • 类型:触发器
    • 操作者:=
    • 触发器:选择之前创建的

操作

  • 默认操作步骤持续时间:单位s、h、d

  • 操作:

    • Send to user groups:通知的用户组

    • Send to users:通知的用户

    • 自定义消息内容:勾选

      • 主题:

        bash
        故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
      • 消息:

        bash
        告警主机:{HOSTNAME1}<br/>
        告警时间:{EVENT.DATE} {EVENT.TIME}<br/>
        告警等级:{TRIGGER.SEVERITY}<br/>
        告警信息: {TRIGGER.NAME}<br/>
        告警项目:{TRIGGER.KEY1}<br/>
        问题详情:{ITEM.NAME}:{ITEM.VALUE}<br/>
        当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}<br/>
        事件ID:{EVENT.ID}<br/>
      • 条件:默认即可

  • 恢复操作:

    • Send to user groups:通知的用户组

    • Send to users:通知的用户

    • 自定义消息内容:勾选

      • 主题:

        bash
        故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}恢复
      • 消息:

        bash
        告警主机:{HOSTNAME1}<br/>
        告警时间:{EVENT.DATE} {EVENT.TIME}<br/>
        告警等级:{TRIGGER.SEVERITY}<br/>
        告警信息: {TRIGGER.NAME}<br/>
        告警项目:{TRIGGER.KEY1}<br/>
        问题详情:{ITEM.NAME}:{ITEM.VALUE}<br/>
        当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}<br/>
        事件ID:{EVENT.ID}<br/>
      • 条件:默认即可

钉钉告警

钉钉配置

先到钉钉创建告警群然后添加机器人获取机器人Webhook地址

创建钉钉告警脚本

bash
dnf install python-requests python -y

cat > /usr/local/zabbix/share/zabbix/alertscripts/dingding.py << "EOF"
#!/usr/bin/env python
# coding:utf-8

import requests
import json
import sys
import os
import datetime

webhook = "https://oapi.dingtalk.com/robot/send?access_token=6007688587fae00c68d6edd10794fd2422fd8e68b3464d024fb6db7f37d730cc"

def main():
    if len(sys.argv) < 4:
        print("Usage: script.py <user> <text>")
        sys.exit(1)
    
    user = sys.argv[1]
    subject = sys.argv[2]
    content = sys.argv[3]

    text = f"{subject}\n{content}"

    data = {
        "msgtype": "text",
        "text": {"content": text},
        "at": {"atMobiles": [user], "isAtAll": False}
    }

    headers = {'Content-Type': 'application/json'}
    
    try:
        response = requests.post(url=webhook, data=json.dumps(data), headers=headers)
        response.raise_for_status()
        
        log_message = f"\n{datetime.datetime.now()} {user} "
        
        if response.json().get("errcode") == 0:
            log_message += "发送成功"
        else:
            log_message += "发送失败"
        
        log_message += f"\n{text}"
        
        # 使用with语句自动处理文件关闭
        with open("/tmp/dingding.log", "a+") as f:
            f.write("\n" + "--" * 30)
            f.write(log_message)
            
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    main()
EOF

# 为脚本增加执行权
chmod +x /usr/local/zabbix/share/zabbix/alertscripts/dingding.py
# 测试脚本
python /usr/local/zabbix/share/zabbix/alertscripts/dingding.py 13800138000 "测试主题" "测试内容"

创建媒介类型

管理 —> 报警媒介类型 —> 创建媒体类型

  • 名称:自定义如:钉钉告警
  • 类型:脚本
  • 脚本名称:dingding.py
  • 脚本参数:

告警用户

可以自定义创建用户然后点进用户进入详情选择报警媒介

  • 类型:钉钉告警选择之前创建的媒介类型
  • 收件人:可以是钉钉账号或手机号

创建动作

配置 —> 动作 —> Trigger actions —> 创建动作

动作

  • 名称:自定义
  • 条件:这里设置的是触发条件
    • 类型:触发器
    • 操作者:=
    • 触发器:选择之前创建的

操作

  • 默认操作步骤持续时间:单位s、h、d

  • 操作:

    • Send to user groups:通知的用户组

    • Send to users:通知的用户

    • 自定义消息内容:勾选

      • 主题:

        bash
        故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
      • 消息:

        bash
        告警主机:{HOSTNAME1}
        告警时间:{EVENT.DATE} {EVENT.TIME}
        告警等级:{TRIGGER.SEVERITY}
        告警信息: {TRIGGER.NAME}
        告警项目:{TRIGGER.KEY1}
        问题详情:{ITEM.NAME}:{ITEM.VALUE}
        当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
        事件ID:{EVENT.ID}
      • 条件:默认即可

  • 恢复操作:

    • Send to user groups:通知的用户组

    • Send to users:通知的用户

    • 自定义消息内容:勾选

      • 主题:

        bash
        故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}恢复
      • 消息:

        bash
        告警主机:{HOSTNAME1}
        告警时间:{EVENT.DATE} {EVENT.TIME}
        告警等级:{TRIGGER.SEVERITY}
        告警信息: {TRIGGER.NAME}
        告警项目:{TRIGGER.KEY1}
        问题详情:{ITEM.NAME}:{ITEM.VALUE}
        当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
        事件ID:{EVENT.ID}
      • 条件:默认即可