13_zabbix邮件告警

zabbix告警

  1. 网页上能直接看到触发器告警
  2. 一般不能直接看网页,所以触发器触发后我们要发送邮件、微信、钉钉等通知我们

zabbix告警原理

  1. 触发器触发后,可以配置对应的动作
  2. 在动作里可以发邮件、微信、钉钉、短信等

告警脚本

脚本位置可见配置文件:/usr/local/zabbix/etc/zabbix_server.conf

LogFile=/url/local/zabbix/zabbix_server.log
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=zabbixpwd
DBPort=3306
Timeout=30
AlertScriptsPath=/usr/local/zabbix/alertscripts  #告警脚本存放位置
ExternalScripts=/usr/local/zabbix/externalscripts
LogSlowQueries=300

发邮件建议

  1. 服务器往外的25端口一般被云厂商禁止,所以建议使用465端口发送加密邮件
  2. qq邮箱、163邮箱需要配置开启smtp
  3. 发邮件的python脚本(加执行权限chmod a+x zabbix_sendmail.py)
#!/usr/bin/python
# -*- coding:utf-8 -*-
# zabbix_sendmail.py
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL
import sys
smtpaddr = 'smtp.qq.com'
myemail = '2289521489@qq.com'
# password = '邮箱授权码'
#####下面两行功能和上面一行相同
f = open('/usr/local/zabbix/.passwd','r')
password = f.readline().strip()
#####
recvmail=sys.argv[1] #多个邮箱之间使用英文逗号隔开
subject=sys.argv[2] #邮件主题
content=sys.argv[3] #邮件内容
msg = MIMEText("""%s"""%(content),"plain","utf-8")
msg['Subject'] = Header(subject,'utf-8').encode()
msg['From'] = myemail
msg['To'] = recvmail
try:
  smtp = SMTP_SSL(smtpaddr) #使用465端口发送加密邮件
  smtp.login(myemail,password)
  smtp.sendmail(myemail,recvmail.split(","),msg.as_string())
  smtp.quit()
  print("success")
except Exception as e:
  print("fail:"+str(e))

测试脚本:/usr/local/zabbix/alertscripts/zabbix_sendmail.py 773033929@qq.com 'zabbix disk' 'disk > 90%'

zabbix邮件告警配置

  1. 写一个邮件告警脚本
  2. 报警媒介添加邮件告警
  3. 用户设置报警媒介
  4. 创建触发器动作

报警媒介添加邮件告警

  1. 自定义脚本
  2. 脚本名称: zabbix_sendmail.py
  3. 脚本需要三个参数:
{ALERT.SENDTO} #收件邮箱
{ALERT.SUBJECT} #主题
{ALERT.MESSAGE} # 内容

用户添加报警媒介

  1. 类型选择邮件告警
  2. 触发器有多种触发,从信息到灾难,可定义接收哪种类型的告警
  3. 用户需要对服务器可读

创建触发器动作

  1. 动作有多种事件源,告警的选择触发器
  2. 邮件主题定义:{ALERT.SUBJECT}
  3. 邮件内容定义:{ALERT.MESSAGE}
  4. 操作添加发送邮件告警
  5. 恢复添加发送邮件告警