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服务 —> 点击新增授权码
设置邮箱服务
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告警脚本
# 指定脚本路径
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地址
创建钉钉告警脚本
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}条件:默认即可
