实现邮件报警
网页版邮箱中开启 POP3/SMTP/IMAP
mportant;"/>
生成授权码并记录
Server端安装配置邮件服务器
1、Yum安装邮件服务器
1 2 | yum -y install mailx dos2unix mailx -V |
2、 编辑邮件配置
1 2 3 4 5 | vim /etc/mail.rc set bsdcompat set from=S13467005509 @163 .com smtp=smtp. 163 .com set smtp-auth-user=S13467005509 @163 .com smtp-auth-password=上面生成的授权码 set smtp-auth=login |
3、测试是否有效
1 | echo "blingbling" | mail -s "test mail" S13467005509 @163 .com |
邮箱中查看结果
4、引用邮件脚本
1 2 3 4 5 6 7 8 9 10 | vim /usr/local/zabbix/etc/zabbix_server.conf AlerScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts #结尾插入 vim /usr/local/zabbix/share/zabbix/alertscripts/mail.sh #!/bin/bash #export.UTF- 8 bt=$ 2 #定义发件标题和收件人 sjr=$ 1 FILE=/tmp/mailtmp.txt #定义文件路径 echo "$3" >$FILE /usr/bin/dos2unix -k $FILE #使用 dos2unix 命令转换字符,避免收到邮件不显示正常邮件内容而出现 ATT00001.bin 的错误;<br>/bin/mail -s "$bt" "$sjr" <$FILE #执行邮件发送命令 |
5、增加权限并测试
1 2 3 4 5 6 | chmod 777 /usr/local/zabbix/share/zabbix/alertscripts/mail.sh chown zabbix.zabbix /usr/local/zabbix/share/zabbix/alertscripts/mail.sh touch /tmp/mailtmp.txt chmod 777 /tmp/mailtmp.txt chown zabbix.zabbix /tmp/mailtmp.txt sh /usr/local/zabbix/share/zabbix/alertscripts/mail.sh S13467005509 @qq .com "blingbling" "bingbing" #前者标题,后者内容 |
实现钉钉报警
注册企业版钉钉并进入
钉钉中新建自定义机器人
记录所需webhook
server端 添加钉钉消息发送脚本
1、下载相关依赖
1 2 | yum -y install python-pip<br>pip -V pip install requests |
2、添加脚本及权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | vim /usr/local/zabbix/share/zabbix/alertscripts/Email.dingding.py #!/usr/bin/env python #coding:utf- 8 #zabbix 钉钉报警 import requests,json,sys,os,datetime webhook= "https://oapi.dingtalk.com/robot/send?access_token=4b974339e84a3dfba612a4dae75461797f036566df6c558e47c35ce6bbc28ded" user=sys.argv[ 1 ] text=sys.argv[ 3 ] data={ "msgtype" : "text" , "text" : { "content" : text }, "at" : { "atMobiles" : [ user ], "isAtAll" : False } } headers = { 'Content-Type' : 'application/json' } x=requests.post(url=webhook,data=json.dumps(data),headers=headers) if os.path.exists( "/tmp/zabbix_dingding.log" ): f=open( "/tmp/zabbix_dingding.log" , "a+" ) else : f=open( "/tmp/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() chmod +x /usr/local/zabbix/share/zabbix/alertscripts/Email.dingding.py |
3、测试
1 | python /usr/local/zabbix/share/zabbix/alertscripts/Email.dingding.py 13467005509 test zabbix”blingbling“ #前者脚本类型,zabbix 机器人关键字 后者内容 |
实现微信报警
注册企业版微信并登陆网页后台
1、我的企业中记录企业ID
添加告警应用
记录Agenttid及Secret
添加部门
1、添加子部门
2、移入用户
3、记录部门ID
server端 添加告警脚本
1、编写脚本并加权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | vim /usr/local/zabbix/share/zabbix/alertscripts/Email.weixin.sh #!/bin/bash CorpID= 'ww9820802e5b147bd3' #我的企业下面的CorpID Secret= 'yxPTWR0c7ymKcmxIy0IqjkwQ-h7PnrGme_IF4nknYs4' #创建的应用那有Secret GURL= "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpID&corpsecret=$Secret" Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}' |awk -F\" '{print $2}' ) #echo $Token PURL= "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token" function body(){ local int agentid= 1000003 #改为AgentId 在创建的应用那里看 local UserID= "SunLongFei" #发送的用户位于$ 1 的字符串 local PartyID= 4 #第一步看的通讯录中的部门ID local Msg=$(echo "$@" | cut -d " " -f3-) printf '{\n' printf '\t"touser": "' "$UserID "\"" ,\n" printf '\t"toparty": "' "$PartyID "\"" ,\n" printf '\t"msgtype": "text",\n' printf '\t"agentid": "' "$agentid "\"" ,\n" printf '\t"text": {\n' printf '\t\t"content": "' "$Msg "\"" \n" printf '\t},\n' printf '\t"safe":"0"\n' printf '}\n' } /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL<br>chmod +x /usr/local/zabbix/share/zabbix/alertscripts/Email.weixin.sh |
2、测试
1 | sh /usr/local/zabbix/share/zabbix/alertscripts/Email.weixin.sh blingbling |
web端添加邮件,钉钉,微信相关告警信息
1、管理 > 报警媒介类型 > 创建
2、添加相关告警
邮件
输入创建的报警媒介类型的名称,指定类型为脚本的方式,并且输入 zabbix_server 端/usr/local/zabbix/share/zabbix/alertscripts 目录下的脚本名称,确保脚本的归属是 zabbix,并且脚本的权限是 777,下边设置脚本参数,也就是发送邮件,微信,钉钉的语法:脚本 收件人 标题 内容,必须严格按照此标准填写;
1 2 3 | $ 1 {ALERT.SENDTO} $ 2 {ALERT.SUBJECT} $ 3 {ALERT.MESSAGE} |
微信
钉钉
3、管理 > 用户 > 点击Admin
4、报警媒介 > 添加类型及收件人
邮件(下方改为邮件警告)
微信
钉钉
5、成功后点击更新
6、配置 > 动作 > 创建动作
7、动作名称建议英文
8、三者添加的操作及发送到的用户如出一辙,如有需要,另自行修改
1 2 3 4 5 6 7 8 9 10 11 12 | 警告模版 服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障! { 告警主机:{HOST.NAME} 告警地址:{HOST.IP} 监控项目:{ITEM.NAME} 监控取值:{ITEM.LASTVALUE} 告警等级:{TRIGGER.SEVERITY} 当前状态:{TRIGGER.STATUS} 告警信息:{TRIGGER.NAME} 告警时间:{EVENT.DATE} {EVENT.TIME} 事件 ID:{EVENT.ID} <br>} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 恢复操作模版 服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复! { 告警主机:{HOST.NAME} 告警地址:{HOST.IP} 监控项目:{ITEM.NAME} 监控取值:{ITEM.LASTVALUE} 告警等级:{TRIGGER.SEVERITY} 当前状态:{TRIGGER.STATUS} 告警信息:{TRIGGER.NAME} 告警时间:{EVENT.DATE} {EVENT.TIME} 恢 复 时 间 :{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME} 持续时间:{EVENT.AGE} 事件 ID:{EVENT.ID} } |
添加用户后点击下方添加如上下图所示
1 2 3 4 5 6 7 8 9 10 11 | 确认操作模版 服务器:{HOST.NAME}: 报警确认 { 确认人:{USER.FULLNAME} 时间:{ACK.DATE} {ACK.TIME} 确认信息如下: "{ACK.MESSAGE}" 问题服务器 IP:{HOSTNAME1} 问题 ID:{EVENT.ID} 当前的问题是: {TRIGGER.NAME} } |
完成效果图
测试三者报警可用性
1 2 | cd /boot/ dd if =/dev/zero of=test bs=1M count= 1800 |
恢复后继续查看
1 | rm -rf test |