打算用Python3的脚本,简单又明了,所以自定义目录先安装python3
python3.6下载解压、编译安装、使用所有CPU编译、软连接到/usr/bin/python3。
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz && tar -zxvf Python-3.6.1.tgz && cd Python-3.6.1
./configure --prefix=/data/python3
make -j `nproc ` && make install
ln -s /data/python3/bin/python3 /usr/bin/python3
在Zabbix server目录下创建一个脚本目录用于zabbix server端读取python脚本
mkdir /data/zabbix/scripts/
在Zabbix server的配置文件中添加读取脚本的路径
echo "AlertScriptsPath=/data/zabbix/scripts" >> /data/zabbix/etc/zabbix_server.conf
创建python脚本(下面由163邮箱举例)
vim /data/zabbix/scripts/sendmail.py
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
# =====================Description=====================
# [Features]: SMTP电子邮件发送
# [Usage]: ./sendmail.py receiver@example.com Subject Message
# Put it in: /usr/local/zabbix/alertscripts
# =====================================================
import sys
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.utils import parseaddr,formataddr
# <----------------------------Configure Start--------------------------->
# STMP Config
#163smtp服务器
SMTP_Host="smtp.163.com"
#smtp端口
SMTP_Port=465
#163邮箱账号
SMTP_User="163邮箱账号"
#163邮箱的账号对应的安全码(此处非密码)
SMTP_Pass="163安全码"
# Mail Config
Mail_From="Zabbix Monitor<%s>" % SMTP_User
Mail_To=sys.argv[1]
Mail_Subject=sys.argv[2]
Mail_Body=sys.argv[3]
# <----------------------------Configure End---------------------------->
# 署名格式化函数
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
# 格式化署名和接收人信息
message=MIMEMultipart()
message['From'] = _format_addr(Mail_From)
message['To'] = _format_addr(Mail_To)
message['Subject'] = Header(Mail_Subject, 'utf-8').encode()
message.attach(MIMEText(Mail_Body, 'html', 'utf-8'))
# 发送邮件!
try:
smtpobj = smtplib.SMTP_SSL(SMTP_Host,SMTP_Port)
smtpobj.login(SMTP_User, SMTP_Pass)
smtpobj.sendmail(Mail_From, Mail_To, message.as_string())
print('邮件发送成功')
smtpobj.quit()
except smtplib.SMTPException as e:
print('邮件发送失败,Case:%s'%e)
添加执行权限
chmod 766 /data/zabbix/scripts/sendmail.py
chown zabbix.zabbix sendmail.py
完成后对邮箱发送一封邮件进行测试
./sendmail.py dobixu@163.com 告警标题 '<h1 style="color:blue;">This is a Message</h1>'
发送成功,以及收到了这封邮件
- 在Zabbix-Web端-管理-报警媒介类型修改Email
脚本名称:
sendmail.py
参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
中添加告警模板我这边是自定义的
- 在Zabbix-Web端-配置-动作-Report problems to Zabbix administrators-操作
默认标题:
[报警触发] 当前状态:{TRIGGER.STATUS},服务器:{HOSTNAME1} 发生:{TRIGGER.NAME}故障!
消息内容:
<table border="1" bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
<tr bgcolor="#FF3333"><th colspan=2>
{TRIGGER.STATUS} Status Report
</tr>
<tr >
<td bgcolor="#ff7d0a" width="20%">告警主机</td>
<td bgcolor="#ff7d0a">{HOSTNAME1}</td>
</tr>
<tr >
<td bgcolor="#ff7d0a">告警别名</td>
<td bgcolor="#ff7d0a">{HOST.NAME} </td>
<tr >
<tr >
<td bgcolor="#ff7d0a">告警地址</td>
<td bgcolor="#ff7d0a">{HOST.IP}</td>
</tr>
<tr>
<td bgcolor="#ff7d0a">告警时间</td>
<td bgcolor="#ff7d0a">{EVENT.DATE} {EVENT.TIME}</td>
</tr>
<tr>
<td bgcolor="#ff7d0a">告警等级</td>
<td bgcolor="#ff7d0a">{TRIGGER.SEVERITY}</td>
</tr>
<tr>
<td bgcolor="#ff7d0a">告警信息</td>
<td bgcolor="#ff7d0a">{TRIGGER.NAME}</td>
</tr>
<tr>
<td bgcolor="#ff7d0a">告警项目</td>
<td bgcolor="#ff7d0a">{TRIGGER.KEY1}</td>
</tr>
<tr >
<td bgcolor="#FF3333">问题详情</td>
<td bgcolor="#FF3333">{ITEM.NAME}: {ITEM.VALUE}</td>
</tr>
<tr>
<td bgcolor="#ff7d0a">当前状态</td>
<td bgcolor="#ff7d0a">{TRIGGER.STATUS}: {ITEM.VALUE1}</td>
</tr>
<tr>
<td bgcolor="#ff7d0a">事件ID</td>
<td bgcolor="#ff7d0a">{EVENT.ID}</td>
</tr>
</table>
- 在Zabbix-Web端-配置-动作-Report problems to Zabbix administrators-恢复操作
- 并且它的状态必须为启用状态
默认标题:
[报警恢复] 当前状态:{TRIGGER.STATUS},服务器:{HOSTNAME1} 发生:{TRIGGER.NAME}恢复!
消息内容:
<table border="1" bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
<tr bgcolor="#49c208"><th colspan=2>
{TRIGGER.STATUS} Status Report
</tr>
<tr >
<td bgcolor="#ffba00" width="20%">恢复主机</td>
<td bgcolor="#ffba00">{HOSTNAME1}</td>
</tr>
<tr >
<td bgcolor="#ffba00">恢复别名</td>
<td bgcolor="#ffba00">{HOST.NAME} </td>
<tr >
<td bgcolor="#ffba00">恢复地址</td>
<td bgcolor="#ffba00">{HOST.IP}</td>
</tr>
<tr>
<td bgcolor="#ffba00">恢复时间</td>
<td bgcolor="#ffba00">{EVENT.DATE} {EVENT.TIME}</td>
</tr>
<tr>
<td bgcolor="#ffba00">恢复等级</td>
<td bgcolor="#ffba00">{TRIGGER.SEVERITY}</td>
</tr>
<tr>
<td bgcolor="#ffba00">恢复信息</td>
<td bgcolor="#ffba00">{TRIGGER.NAME}</td>
</tr>
<tr>
<td bgcolor="#ffba00">恢复项目</td>
<td bgcolor="#ffba00">{TRIGGER.KEY1}</td>
</tr>
<tr >
<td bgcolor="#49c208">恢复详情</td>
<td bgcolor="#49c208">{ITEM.NAME}: {ITEM.VALUE}</td>
</tr>
<tr>
<td bgcolor="#ffba00">当前状态</td>
<td bgcolor="#ffba00">{TRIGGER.STATUS}: {ITEM.VALUE1}</td>
</tr>
<tr>
<td bgcolor="#ffba00">事件ID</td>
<td bgcolor="#ffba00">{EVENT.ID}</td>
</tr>
</table>
- 在Zabbix-Web端-管理-用户-报警媒介-添加
添加收件人邮箱
那么告警以及恢复的时候都会发送邮件给到收件人。
那么就到此为止了。
以下参数可以自己看看
告警主机:{HOSTNAME1}
告警别名:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}