一直准备写zabbix邮件报警的,但是我的测试机shell脚本一直不成功,换了python脚本就ok了,真是奇怪。
实现告警的两种方法
调用第三方告警平台
这里推荐使用onealert,设置比较简单,但是免费版每月邮件上限为300.
- 官网注册账号
- 配置中添加应用
- 创建获取key
- 系统会自动生成一键安装脚本
- 登录到zabbix server服务器,安装脚本运行就可以了。
通过脚本实现告警
-
在zabbix配置文件中查找脚本目录
[root@zabbix-server zabbix]# grep 'AlertScriptsPath' zabbix_server.conf ### Option: AlertScriptsPath # AlertScriptsPath=${datadir}/zabbix/alertscripts AlertScriptsPath=/usr/lib/zabbix/alertscripts
-
在
/usr/lib/zabbix/alertscripts
目录下创建发邮件脚本sendmail_zabbix.py[root@zabbix-server alertscripts]# cat sendmail_zabbix.py #!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import parseaddr, formataddr import sys def formatAddr(s): name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8').encode(), addr)) def send_mail(to_list,subject,content): mail_host = 'smtp.exmail.qq.com' mail_user = 'xxxxxxxxxxx' mail_pass = 'xxxxxxxxxxx' #以上内容根据你的实际情况进行修改 msg = MIMEText(content,'plain','utf-8') msg['Subject'] = Header(subject, 'utf-8').encode() msg['From'] = formatAddr('zabbix监控 <%s>' % mail_user).encode() msg['to'] = to_list try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(mail_user,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3]) ```
-
配置脚本权限
chmod +x sendmail_zabbix.py chown zabbix.zabbix sendmail_zabbix.py
-
本地测试
python sendmail_zabbix.py 'xxxx@qq.com' 'nihao' 'dsgsdfdsf'
-
创建报警媒介
重点是添加三个参数 **{ALERT.SENDTO}**收件人地址 **{ALERT.SUBJECT}**主题 **{ALERT.MESSAGE}**详细内容
-
给用户配置报警媒介
-
创建动作 这里注意添加触发器示警度
-
设置操作和恢复操作
-
优化报警内容
配置告警内容
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障! 告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID:{EVENT.ID}
配置恢复内容
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复! 告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID:{EVENT.ID}
-
告警测试 关掉一台监控客户端的zabbix-agent,查收邮件即可。