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 = "[email protected]"; //邮件的from信息

$MAIL_FROMNAME = "Zabbixtest 障害通知"; //邮件的from信息

$MAIL_SMTP_HOST = ‘smtp.partner.outlook.cn:587‘; //邮箱的host信息(ssl)

$MAIL_SMTP_USER = ‘ [email protected] ‘; //用户名

$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
[email protected]##[email protected],[email protected]

回到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的邮件。

时间: 2024-10-28 09:46:01

Zabbix3.0 自动邮件报障的相关文章

Zabbix2.0和Zabbix3.0设置邮件报警教程

============================== Zabbix2.0邮件服务器配置 ================================ 1.Zabbixe服务器配置邮件发送 cat >> /etc/mail.rc <<EOF set [email protected] set smtp=smtp.139.com set [email protected] set smtp-auth-password=hengtai set smtp-auth=login

zabbix3.0自动发现监控IIS

说明此处配置针对的是zabbix3.0版本 利用zabbix的自动发现(LLD)功能结合脚本可以实现上面的需求,实现对IIS站点的动态添加,动态监控. 效果图: 具体配置步骤: 1.  zabbix服务端配置 配置过滤正则表达式: 依次选择Administration->General->Regular expressions.创建新的正则表达式"IISSite for discovery",会在后面的模板中引用.正则表达式的名字不能有错,否则导入模板报错. 导入模块 将内

zabbix3.0.9邮件告警

设置mailx发送邮件的账号 yum -y install mailx ln -s /bin/mailx /bin/mail cat /etc/mail.rc //内容如下 set from=123456@126.com set smtp=smtp.126.com set smtp-auth-user=123456 set smtp-auth-password=123456 set smtp-auth=login 发送邮件测试 echo  test | mail -s " test" 

zabbix3.0微信邮件报警

Zabbix 邮件微信报警 分2大部分: 1.Zabbix服务器端配置 邮件服务安装配置 2.Web端服务配置 服务器端的设置: 系统 cenots 6.5   2.6.32-431.el6.x86_64 安装邮件发送服务: [[email protected] ~]# wget http://sourceforge.net/projects/heirloom/files/latest/download?source=files [[email protected] ~]# mv downloa

zabbix3.0配置邮件报警

1打开管理,报警媒介类型输入自己要做发送报警的邮箱 账号密码 smtp地址 2.填写收件人 3.新建动作 默认接收人:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障! 默认信息: 告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}

zabbix-3.0.18 邮件告警

一.创建主机, 1.主机名:node1.com,可见名称:node1,如下图所示: 2.创建后入下图所示 二.添加监控项 1.添加http 服务监控项 2.添加成功后,如下图所示 三.创建触发器 四.创建报警媒介类型 1.在报警媒介类型中选择脚本,和发送脚本的名称等信息 2.在用户中创建信息接收人的联系方式 3.创建成功后入下图所示 五.创建动作 1.创建动作 2.创建动作条件 3.创建操作方式和步骤 六.查看事件状态 查看事件的状态 七.配置脚本 1.查看脚本存放目录 2.进入脚本目录,创建m

分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署

前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~ 由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这种方式! 这里,针对zabbix报警信息的发送,可以采用下面两种方式中的任意一种:(1)利用sendEmail程序来发送报警邮件.sendEmail是一个轻量级,命令行的SMTP邮件客户端,非常完美,使用简单并且功能强大.这个被设计用在php.bash .perl和web站点使用.(2)利用pyt

zabbix3.0.4安装部署文档(四)--邮件报警

一.使用外部邮箱账号发送报警邮件设置:        1.关闭sendmail或者postfix 使用外部邮箱账号时,不需要启动sendmail或者postfix ,如果在sendmail或者postfix启动的同时          使用外部邮箱发送报警邮件,首先会读取外部邮箱配置信息.         [[email protected] local]# /etc/init.d/sendmail stop        [[email protected] local]# /etc/init

zabbix3.0.4发邮件小坑一个

国庆加班调试一个新项目的zabbix,自定义python发邮件脚本,自己执行可以,通过zabbix调用硬是不行,日志也不输出(脚本里已经将日志重定向至zabbix系统日志),尝试下面的办法: 1.多次检查AlertScriptsPath配置 2.检查脚本权限,改属主为zabbix.zabbix 3.多次重启zabbix_server 4.多次检查media.action.user配置 最后终于找到原因,原来zabbix3.0.4默认对自定义脚本是不传递参数的,不像zabbix2,默认会传递发邮件