Zabbix3.0 自动邮件报障
Zabbix3.0以后,自带的邮件报警支持SSL验证了,
但是仍然没有发送复数个邮箱以及CC,BCC的功能,

因此,我们还是得用别的方法来实现邮件报障。
实现方法有很多种,我用的是PHPmailer。
http://files.cnblogs.com/files/justbio/PHPMailer-master.zip
这个是比较新的PHPmailer,下载后解压到文件夹。
cd /usr/lib/zabbix/alertscripts/ unzip PHPMailer-master.zip
编写一个shell文件,是用来给zabbix调用的。
cd /usr/lib/zabbix/alertscripts/ vi sendmail.sh
#!/bin/sh nohup /usr/lib/zabbix/alertscripts/sendmessage_php.sh "$1" "$2" "$3" >/dev/null 2>&1 &
编写一个php文件,就是上面的sendmessage_php.sh
vi sendmessage_php.sh
#!/usr/bin/php
<?php
mb_language("uni");
mb_internal_encoding("UTF-8");
require('/usr/lib/zabbix/alertscripts/PHPMailer-master/PHPMailerAutoload.php');
$MAIL_LOG_PATH = '/var/log/zabbix-phpmailer'; //日志
$MAIL_FROM = "xxxxxxx@xxx.com"; //邮件的from信息
$MAIL_FROMNAME = "Zabbixtest 障害通知"; //邮件的from信息
$MAIL_SMTP_HOST = 'smtp.partner.outlook.cn:587'; //邮箱的host信息(ssl)
$MAIL_SMTP_USER = ' xxxxxxx@xxx.com '; //用户名
$MAIL_SMTP_PASS = 'xxxxxxx'; //密码
$retry_count = 3; //重试3次
//邮件的TO,CC从文件中取得,文件名为第一个参数
$MAIL_LIST_NM = $argv[1];
$MAIL_LIST = '/usr/lib/zabbix/alertscripts/addresslist/'.$MAIL_LIST_NM;
$MAIL_ADRESS = file_get_contents($MAIL_LIST);
$ADRESS_ARRAY = array();
$ADRESS_ARRAY = explode('##',$MAIL_ADRESS);
$MAIL_TO = $ADRESS_ARRAY[0];
$MAIL_CC = $ADRESS_ARRAY[1];
//邮件的标题和内容为第二,第三个参数
$MAIL_SUBJECT = $argv[2];
$MAIL_MESSAGE = $argv[3];
$mailer = new PHPMailer();
$mailer->CharSet = 'UTF-8';
$mailer->Encoding = 'base64';
$mailer->IsSMTP();
$mailer->SMTPSecure='tls';
$mailer->Host = $MAIL_SMTP_HOST;
$mailer->SMTPAuth = true;
$mailer->Username = $MAIL_SMTP_USER;
$mailer->Password = $MAIL_SMTP_PASS;
$mailer->From = $MAIL_FROM;
//to,cc,bcc edit
$TO_COUNT = array();
$CC_COUNT = array();
$TO_COUNT = explode(',',$MAIL_TO);
$CC_COUNT = explode(',',$MAIL_CC);
$key;
while ($key = current($TO_COUNT)) {
$mailer->AddAddress($key);
next($TO_COUNT);
}
while ($key = current($CC_COUNT)) {
$mailer->AddCC($key);
next($CC_COUNT);
}
$mailer->FromName = mb_convert_encoding($MAIL_FROMNAME,"UTF-8","UTF-8");
$mailer->Subject = $MAIL_SUBJECT;
$mailer->Body = mb_convert_encoding($MAIL_MESSAGE,"UTF-8","UTF-8");
/* logging data set */
$queuing_time = explode(' ', microtime());
$queuing_id = date('YmdHis', $queuing_time[1]).' '.$queuing_time[0];
$log_sub_dir = $MAIL_LOG_PATH;
$log_filename = $log_sub_dir .'/'.substr($queuing_id, 0, 8).'.txt';
$log_message = "From: $MAIL_FROM\n";
$log_message .= "To: $MAIL_TO\n";
$log_message .= "Subject: $MAIL_SUBJECT\n";
$log_message .= "Message: $MAIL_MESSAGE\n";
$retry = 0;
/* mail info */
$mail_info = ' to send mail to ';
$mail_info .= $MAIL_LIST_NM;
$mail_info .='(';
$mail_info .= 'Subject:'.$MAIL_SUBJECT;
$mail_info .= ' To:'.str_replace("\n","",$MAIL_TO);
$mail_info .= ' Cc:'.str_replace("\n","",$MAIL_CC);
$mail_info .= ' Message:'.str_replace("\n","←",$MAIL_MESSAGE);
$mail_info .=')';
//如果失败,重试3次
do{
try {
$send_result=$mailer->Send();
} catch (Exception $e) {
Logging($log_sub_dir, $log_filename, $queuing_id.'['.$retry.']', 'Exception:'.$e->getMessage()."\n");
$send_result=false;
}
if(!$send_result){
Logging($log_sub_dir, $log_filename, $queuing_id.'['.$retry.']', 'Result: failed '.$mailer->ErrorInfo."\n".$log_message);
print 'failed: ' . $mailer->ErrorInfo . "\n";
}else{
Logging($log_sub_dir, $log_filename, $queuing_id.'['.$retry.']', "Result: success\n".$log_message);
print 'success' . "\n";
break;
}
$retry++;
sleep(10);
$log_message = '';
}while ($retry < $retry_count);
if($retry==$retry_count){
OutputResult($log_sub_dir,$log_sub_dir.'/mailresult.log', 'outlook failed'.$mail_info);
}else{
OutputResult($log_sub_dir,$log_sub_dir.'/mailresult.log', 'outlook success'.$mail_info);
}
/* logging */
function Logging($dir, $filename, $id, $message) {
if (!is_dir($dir)) { mkdir($dir, 0755); }
$logging_time = explode(' ', microtime());
$logging_date = date('YmdHis', $logging_time[1]).' '.$logging_time[0];
$log = '----- Logging Date: '.$logging_date."\n";
$log.= 'Queuing ID: '.$id."\n";
$log.= $message."\n";
$fp = fopen($filename, 'a');
fwrite($fp, $log);
fclose($fp);
}
function OutputResult($dir, $filename, $info) {
if (!is_dir($dir)) { mkdir($dir, 0755); }
$logging_time = explode(' ', microtime());
$logging_date = date('YmdHis', $logging_time[1]);
$log = $logging_date.':'.$info."\n";
$fp = fopen($filename, 'a');
fwrite($fp, $log);
fclose($fp);
}
?>
编辑地址簿文件,不同的地址用逗号隔开,to和cc用##隔开
mkdir /usr/lib/zabbix/alertscripts/addresslist vi test xxxx@xxx.com##yyyy@yyy.com,zzzz@zzz.com
回到zabbix网页
Administrator -> media type -> create media type
如下设置

*在zabbix3.0以前,PARAMETER是固定的,不用设置也不能更改。3.0默认值变成空值,需要自己设置。
Administrator -> user -> create user
名字我这里取testuser,在media标签中点add,如下填写

Send to 填的是刚才建的地址簿的文件名
Pemmision标签当然是选择zabbixadministrators
Configuration -> Action ->create action
名字我这里取testaction,在action和conditions标签按实际需求填写,
Operations中点New,如下填写

*user我这里涂掉了,应该填的是刚才新建的testuser
这样,自动邮件就配置完成了,让我们测试一下脚本
./sendmail.sh test testsubject testmessage
第一个参数是地址簿的文件名,第二个参数是标题,第三个参数是正文
地址簿test里的所有人都会收到标题为testsubject,正文为testmessage的邮件。
Zabbix3.0 自动邮件报障的更多相关文章
- Zabbix3.0 自动微信报障
本来研究了一段时间短信报障的,但是短信报障需要手机运营商的设备支持,就没有继续下去. 正好发现微信公众号可以报障,完全可以代替短信报警的功能. 首先你需要一个微信公众号,实名认不认证没关系. http ...
- zabbix3.0.4 邮件告警详细配置
sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php.bash perl和web ...
- zabbix3.0配置邮件报警
我们部署一套监控软件,报警这一块自然不可或缺,接下来我们看看zabbix如何实现邮件报警. 1.编写发送邮件的脚本 zabbix通脚本发送邮件,遵循的传参格式为: 脚本 收件人 标题 邮件 ...
- zabbix3.0自动发现磁盘并监控磁盘IO
Zabbix 版本:3.0 操作系统:Ubuntu16.04 操作环境,在被监控的主机上安装zabbix agent.安装方式为源码包安装. 简要安装步骤: 参考:https://www.zabbix ...
- zabbix3.0.4 部署之七 (zabbix3.0.4 邮件报警) & 微信报警
1 [root@sv-zabbix ~]# cat /usr/local/zabbix/share/zabbix/alertscripts/sendEmail.sh #!/bin/bash#SMTP_ ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署
前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这 ...
- zabbix3.0.3 设置邮件报警
在zabbix3.0.3 设置报警这里卡了两天.终于解决了,这里我使用的mailx来作为发送邮件的客户端 1.设置mailx发信账号 yum -y install mailx ln -s /bin/m ...
- zabbix系列(九)zabbix3.0实现自动触发zabbix-agent端shell脚本任务
zabbix实现自动触发远程脚本执行命令 Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令 环境 Server:基于centos6.5 final ...
- zabbix3.0.4 配置邮件报警
试验环境: LAMP环境 (LNMP环境已经成功了,为了避免干扰,我另一台LAMP主机) ### 我在做实验之前,作了时间同步,不知道这个有木有影响,一起说一下吧! yum -y install nt ...
随机推荐
- location.href跳转不正确
今天写这个随笔的用意是为了记录我遇到的一种情况,导致我页面无法正确跳转 location.href跳转页面其实很简单,只要附上url就可以了,但是今天我在测试一个跳转时是这么写的: location. ...
- 关于@property()的那些属性及ARC简介
@property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...
- dedecms 打印出网站所有 文章标题和链接(URL)的方法
{dede:arclist row="100000"} <li>[field:fulltitle/]***网站URL地址***[field:arcurl/]</l ...
- 使用 Git 管理源代码
在现代软件开发项目中,要成为一个有效的软件开发人员,我们必须能够与其他项目贡献者并行进行开发.源代码管理(SCM)系统不是什么新思想.为了编写一些能够更快速.简单地开发以后软件项目的软件,已经进行了很 ...
- mgo中DBRef-数据添加测试
2014-1-25 在设计mongo数据库时遇到这样一个问题,日志信息表需要引用人员信息表的数据.如果是结构化数据库,基本上不用想太多的东西.由于刚接触非结构化数据库,按着书上的理解由于日志数量较多, ...
- 关于Function.prototype.bind
bind()方法会创建一个新函数,称为绑定函数.当调用这个绑定函数时,绑定函数会以创建它时传入bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行 ...
- Django模板格式
变量 {{ 变量名称 }} 块 {% block 块名称 %} 判断 根据布尔值判断: {% if 布尔值 %} 操作 {% endif %} 根据两者是否相等判断: {% ifequals 变量1 ...
- 关于mysql和Apache以及nginx的监控脚本怎么写会比较好的记录
最近,自己业务进行上线,上线后,需要考虑的是对各种服务进行监控,包括(httpd服务,mysqld服务等),现在想以mysqld服务为例总结下那种方式的脚本最为专业和合理: (1).根据mysql的端 ...
- codeforces 361 D - Friends and Subsequences
原题: Description Mike and !Mike are old childhood rivals, they are opposite in everything they do, ex ...
- cadence学习之原理图——连线
重点: (1)两种连接方式:Place Net和Place Net Alias (2)交叉线之间的电气连接Place Junction (3)引脚悬空 Place no connect (4)两器件管 ...