【Azkaban】实现 自定义电话/微信/钉钉 报警

默认邮件报警

  • Azkaban默认支持通过邮件对任务进行报警,配置方法如下:
  1. 先把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
  1. 在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 

在这里插入图片描述

在这里插入图片描述

  1. 也可以通过编辑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二次开发,因为会覆盖原有的邮件通知方法,所以自带的邮件通知会失效。
  1. 新建一个普通的Java项目
  2. 在项目的lib里添加4个Jar包:

在这里插入图片描述

  1. 新建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) {
 
    }
 
}
  1. 新建/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
  1. 在新建的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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 将代码打包,并将Jar上传到/opt/module/azkaban/azkaban-web-server-3.84.4/lib文件夹。

  2. 启动所有节点的执行器,激活所有节点的执行器
    以下命令群发:
    启动执行器:

cd /opt/module/azkaban/azkaban-exec-server-3.84.4
bin/start-exec.sh
curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
  1. 然后在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
  1. 访问http://hadoop102:8081,并用aliyun用户登陆,然后执行任务前设置Notify即可

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值