一直准备写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,查收邮件即可。