当前位置: 代码迷 >> 综合 >> 【Azkaban】实现 自定义电话/微信/钉钉 报警
  详细解决方案

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

热度:9   发布时间:2024-02-01 16:19:10.0

默认邮件报警

  • Azkaban默认支持通过邮件对任务进行报警,配置方法如下:
  1. 先把web服务关闭:
[atguigu@hadoop102 azkaban-web-server-3.84.4]$ pwd
/opt/module/azkaban/azkaban-web-server-3.84.4
[atguigu@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=helingzheng@126.com
mail.host=smtp.126.com
mail.user=helingzheng@126.com
#填申请到的密码,注意这里是password!!!
mail.password=GFQGWIEQYGCJKHJR#这里设置工作流成功或者失败默认向哪里发送服务
job.failure.email=helingzheng@126.com
job.success.email=helingzheng@126.com

在这里插入图片描述

在这里插入图片描述

  • 设置完后重启web服务
[atguigu@hadoop102 azkaban-web-server-3.84.4]$ bin/start-web.sh 

在这里插入图片描述

在这里插入图片描述

  1. 也可以通过编辑basic.flow加入如下属性的方式发送邮件:
nodes:- name: jobAtype: commandconfig:command: echo "This is an echoed text."failure.emails: helingzheng@126.comsuccess.emails: helingzheng@126.comnotify.emails: helingzheng@126.com

自定义电话/微信/邮件报警

  • 有时任务执行失败后邮件报警接收不及时,需要自定义报警装置,比如电话报警。此时需要首先找一个通知服务商,比如onealter.com,caweb.aiops.com等,购买相应服务后,获取通知API。然后进行MailAlter二次开发,因为会覆盖原有的邮件通知方法,所以自带的邮件通知会失效。
  1. 新建一个普通的Java项目
  2. 在项目的lib里添加4个Jar包:

在这里插入图片描述

  1. 新建com.atguigu.PhoneAlter类实现azkaban.alert.Alerter
package com.atguigu;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*/@Overridepublic void alertOnSuccess(ExecutableFlow exflow) throws Exception {}/*** 出现问题的通知** @param exflow* @param extraReasons* @throws Exception*/@Overridepublic 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*/@Overridepublic void alertOnFirstError(ExecutableFlow exflow) throws Exception {}@Overridepublic void alertOnSla(SlaOption slaOption, String slaMessage) throws Exception {}@Overridepublic 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服务目录下启动服务
[atguigu@hadoop102 lib]$ cd /opt/module/azkaban/azkaban-web-server-3.84.4
[atguigu@hadoop102 azkaban-exec-server-3.84.4]$ bin/start-web.sh
  1. 访问http://hadoop102:8081,并用atguigu用户登陆,然后执行任务前设置Notify即可

在这里插入图片描述

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