1、背景
因为在内网环境下,通过配置Zabbix提供告警媒介,无法发送邮件。所以采用python脚本方式,使用smtp进行发送。
环境:Ubuntu22.04
虚拟机:VirtualBox
2、步骤
2.1 修改zabbix_server.conf
修改server配置文件找到AlertScriptsPath参数,将其注释打开,并要把脚本文件放入其中
并重启server服务
sudo vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
sudo service zabbix-server restart
2.2 编写发送脚本
要注意几点:
在linux系统中,要加入 #!/usr/bin/python3,否则会报错import引入失败 如果脚本是冲windows系统中copy过去的,很有可能会出现 回车 错误。因为 Win 和 Linux的回车不同。所以建议在Linux环境下去进行编写。或者通过Notepad++进行环境切换再粘贴进去 文件名称 sendmail_mine.py
#!/usr/bin/python3
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.utils import parseaddr, formataddr
import sys,smtplib
def sendmail(_to_email,_subject,_message):
mail_host = "smtp.qq.com"
user_name = "username"
password = "password"
mail_port = 587
from_email = "zhuchenghai@qq.com"
message = MIMEMultipart()
subject = _subject
message["Subject"] = Header(subject, "utf-8")
msg = MIMEText(_message, "plain", 'utf-8')
ret_mes = True
try:
# 邮件发送
smtpObj = smtplib.SMTP(mail_host, mail_port)
smtpObj.starttls()
smtpObj.login(user_name, password)
smtpObj.sendmail(from_email, [_to_email], msg.as_string())
# 关闭连接
smtpObj.quit()
except Exception as e :
print("邮件发送失败:%s"%(str(e)))
ret_mes = False
return ret_mes
if __name__ == '__main__':
sendmail(sys.argv[1], sys.argv[2], sys.argv[3])
# sendmail('zhuchenghai@qq.com','Test Subject','Test Content')
上面代码中:
- sys.argv[1]:对应的是传入python脚本中的参数,这个会在zabbix中进行设置
2.3 授权
授权并拷贝到指定目录下
sudo chown -r zabbix:zabbix sendmail_mine.py
sudo chmod 755 sendmail_mine.py
sudo cp sendmail_mine.py /usr/lib/zabbix/alertscripts/
2.4 创建新媒介
进入到页面中,选择 管理 -> 报警媒介类型 -> 创建媒介类型。
2.4.1 报警媒介类型
类型 选择 脚本 , 名称输入自己定义的即可(Mine_Send_Mail)。 脚本名称 必须是 脚本文件名称 sendmail_mine.py
脚本参数:
- {ALERT.SENDTO}
- {ALERT.SUBJECT}
- {ALERT.MESSAGE} 一个一个添加,并且顺序不能错
2.4.2 Message templates
进入后,点击添加。有提供模板,可以直接选择,并添加多个
2.4.3 选项
是设置报警频率的
2.5 测试
当全部都设置完成后,重新进入到报警媒介界面,在自己创建的脚本右侧,有一个测试按钮。
点击测试,并输入收件人地址,并发送。如果收到了邮件说明配置成功
3 设置报警动作
3.1 配置用户媒介
管理 -> 用户 -> Admin
报警媒介 -> 编辑 -> 选择刚才建立的脚本
3.2 编辑动作action
配置 -> 动作 -> Trigger action -> 启用 (点击之后状态变为已启用)
点击进入之后,点击操作,编辑其中的默认进入操作细节
仅发送里选择新建立的媒介