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