Zabbix配置Python邮件脚本发送邮件

424 阅读2分钟

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 -> 启用 (点击之后状态变为已启用)

点击进入之后,点击操作,编辑其中的默认进入操作细节

仅发送里选择新建立的媒介