默认邮件报警
- Azkaban默认支持通过邮件对任务进行报警,配置方法如下:
- 先把web服务关闭:
[aliyun@hadoop102 azkaban-web-server-3.84.4]$ pwd
/opt/module/azkaban/azkaban-web-server-3.84.4
[aliyun@hadoop102 azkaban-web-server-3.84.4]$ bin/shutdown-web.sh
Killing web-server. [pid: 1383], attempt: 1
shutdown succeeded
- 在web-server节点(102)编辑/opt/module/azkaban/azkaban-web-server-3.84.4/conf/azkaban.properties,修改如下内容:
#这里设置邮件发送服务器,需要 申请邮箱,切开通stmp服务,以下只是例子
mail.sender=xxxx@126.com
mail.host=smtp.126.com
mail.user=xxxx@126.com
#填申请到的密码,注意这里是password!!!
mail.password=GFQGWIEQYGCJxx
#这里设置工作流成功或者失败默认向哪里发送服务
job.failure.email=xxxx@126.com
job.success.email=xxxx@126.com
- 设置完后重启web服务
[aliyun@hadoop102 azkaban-web-server-3.84.4]$ bin/start-web.sh
- 也可以通过编辑basic.flow加入如下属性的方式发送邮件:
nodes:
- name: jobA
type: command
config:
command: echo "This is an echoed text."
failure.emails: helingxxx@126.com
success.emails: helingxxx@126.com
notify.emails: helingxxx@126.com
自定义电话/微信/邮件报警
- 有时任务执行失败后邮件报警接收不及时,需要自定义报警装置,比如电话报警。此时需要首先找一个通知服务商,比如onealter.com,caweb.aiops.com等,购买相应服务后,获取通知API。然后进行MailAlter二次开发,因为会覆盖原有的邮件通知方法,所以自带的邮件通知会失效。
- 新建一个普通的Java项目
- 在项目的lib里添加4个Jar包:
- 新建com.aliyun.PhoneAlter类实现azkaban.alert.Alerter
package com.aliyun;
import azkaban.alert.Alerter;
import azkaban.executor.ExecutableFlow;
import azkaban.executor.Executor;
import azkaban.executor.ExecutorManagerException;
import azkaban.sla.SlaOption;
import azkaban.utils.Props;
import com.google.gson.JsonObject;
import org.apache.log4j.Logger;
import java.util.List;
public class PhoneAlterter implements Alerter {
private static final Logger logger = Logger.getLogger(PhoneAlterter.class);
private String appKey;
private String url;
public PhoneAlterter(Props props) {
appKey = props.getString("my.alert.appKey", "");
url = props.getString("my.alert.url", "");
logger.info("Appkey: " + appKey);
logger.info("URL: " + url);
}
/**
* 成功的通知
*
* @param exflow
* @throws Exception
*/
@Override
public void alertOnSuccess(ExecutableFlow exflow) throws Exception {
}
/**
* 出现问题的通知
*
* @param exflow
* @param extraReasons
* @throws Exception
*/
@Override
public void alertOnError(ExecutableFlow exflow, String... extraReasons) throws Exception {
//一般来说网络电话服务都是通过HTTP请求发送的,这里可以调用shell发送HTTP请求
JsonObject alert = new JsonObject();
alert.addProperty("app", appKey);
alert.addProperty("eventId", exflow.getId());
alert.addProperty("eventType", "trigger");
alert.addProperty("alarmContent", exflow.getId() + " fails!");
alert.addProperty("priority", "2");
String[] cmd = new String[8];
cmd[0] = "curl";
cmd[1] = "-H";
cmd[2] = "Content-type: application/json";
cmd[3] = "-X";
cmd[4] = "POST";
cmd[5] = "-d";
cmd[6] = alert.toString();
cmd[7] = url;
logger.info("Sending phone alert!");
Runtime.getRuntime().exec(cmd);
}
/**
* 首次出现问题的通知
*
* @param exflow
* @throws Exception
*/
@Override
public void alertOnFirstError(ExecutableFlow exflow) throws Exception {
}
@Override
public void alertOnSla(SlaOption slaOption, String slaMessage) throws Exception {
}
@Override
public void alertOnFailedUpdate(Executor executor, List<ExecutableFlow> executions, ExecutorManagerException e) {
}
}
- 新建/opt/module/azkaban/azkaban-web-server-3.84.4/plugin/alerter/phone-alerter文件夹,并在内部新建conf和lib两个目录
[atguigu@hadoop102 azkaban-web-server-3.84.4]$ mkdir -p /opt/module/azkaban/azkaban-web-server-3.84.4/plugins/alerter/phone-alerter/conf /opt/module/azkaban/azkaban-web-server-3.84.4/plugins/alerter/phone-alerter/lib
- 在新建的phone-alerter/conf目录里,新建plugin.properties
#name一定要设置email,用以覆盖默认的邮件报警
alerter.name=email
alerter.external.classpaths=lib
alerter.class=com.atguigu.PhoneAlterter
#这两个参数和你使用的AlertAPI有关系!!!!!!
my.alert.appKey=f10c90ac-c768-f2db-a07c-a056f922350d
my.alert.url=http://http://api.aiops.com/alert/api/event
-
将代码打包,并将Jar上传到/opt/module/azkaban/azkaban-web-server-3.84.4/lib文件夹。
-
启动所有节点的执行器,激活所有节点的执行器
以下命令群发:
启动执行器:
cd /opt/module/azkaban/azkaban-exec-server-3.84.4
bin/start-exec.sh
curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
- 然后在web服务目录下启动服务
[aliyun@hadoop102 lib]$ cd /opt/module/azkaban/azkaban-web-server-3.84.4
[aliyun@hadoop102 azkaban-exec-server-3.84.4]$ bin/start-web.sh
- 访问http://hadoop102:8081,并用aliyun用户登陆,然后执行任务前设置Notify即可