• 如何使用邮件和电话报-大数据培训


    Azkaban是一个工作流任务调度系统,可以以特定的顺序执行一组命令,轻量级且方便使用。本文将为大家介绍如何使用邮件和电话报警让工作流自动调度更加万无一失。

    邮件报警

    注册一个126邮箱,并在邮箱的账号管理中开启SMTP服务,开启SMTP服务后,页面会显示一个授权密码,这个密码一定记住,因为只会出现这一次。

    后续配置步骤如下:

    1、在azkaban-web节点上编辑
    azkaban-web/conf/azkaban.properties,添加如下内容:

    1. #这里设置邮件发送服务器,需要申请邮箱,切开通stmp服务,以下只是例子
    2. mail.sender=helloworld@126.com
    3. mail.host=smtp.126.com
    4. mail.user=helloworld@126.com
    5. mail.password=用邮箱的授权码
    6. #这里设置工作流成功或者失败默认向哪里发送服务
    7. job.failure.email=helloworld@126.com
    8. job.success.email=helloworld@126.com

    2、保存并重启web-server

    1. $bin/shutdown-web.sh
    2. $bin/start-web.sh

    3、 编辑basic.flow,加入如下属性:

    1. nodes:
    2. - name: jobA
    3. type: command
    4. config:
    5. command: echo "This is an emailtest."
    6. failure.emails: helloworld@126.com
    7. success.emails: helloworld@126.com
    8. notify.emails: helloworld@126.com

    4、 将azkaban.project和basic.flow压缩成email.zip

    5、 创建工程→上传文件→执行作业→查看结果

    6、 观察邮箱,发现执行成功或失败的邮件

    自定义报警

    有时任务执行失败后邮件报警接收不及时,需要自定义报警装置,比如电话报警。此时需要首先找一个电话通知服务商,比如http://www.onealert.com/,购买相应服务后,获取通知API。然后进行MailAlter二次开发。

    1、 onealert官网注册一个账号,配置告警RestAPI,

    2、 配置分派策略和通知策略,

    3、 开发自定义告警插件

    新建一个普通的java项目,命名为alerter,在项目的lib里添加4个jar包,,并将4个jar包 Add as Library。

    新建PhoneAlerter类,实现azkaban.alert.Alerter接口,代码如下:

    1. packagecom.atguigu;
    2. importazkaban.alert.Alerter;
    3. importazkaban.executor.ExecutableFlow;
    4. importazkaban.executor.Executor;
    5. importazkaban.executor.ExecutorManagerException;
    6. importazkaban.sla.SlaOption;
    7. importazkaban.utils.Props;
    8. importcom.google.gson.JsonObject;
    9. importorg.apache.log4j.Logger;
    10. importjava.util.List;
    11. publicclass PhoneAlterter implements Alerter {
    12. private static final Logger logger =Logger.getLogger(PhoneAlterter.class);
    13. private String appKey;
    14. private String url;
    15. public PhoneAlterter(Props props) {
    16. appKey = props.getString("my.alert.appKey","");
    17. url =props.getString("my.alert.url", "");
    18. logger.info("Appkey: " +appKey);
    19. logger.info("URL: " + url);
    20. }
    21. /**
    22. * 成功的通知
    23. *
    24. * @param exflow
    25. * @throws Exception
    26. */
    27. @Override
    28. public void alertOnSuccess(ExecutableFlowexflow) throws Exception {
    29. }
    30. /**
    31. * 出现问题的通知
    32. *
    33. * @param exflow
    34. * @param extraReasons
    35. * @throws Exception
    36. */
    37. @Override
    38. public void alertOnError(ExecutableFlowexflow, String... extraReasons) throws Exception {
    39. //一般来说网络电话服务都是通过HTTP请求发送的,这里可以调用shell发送HTTP请求
    40. JsonObject alert = new JsonObject();
    41. alert.addProperty("app",appKey);
    42. alert.addProperty("eventId",exflow.getId());
    43. alert.addProperty("eventType", "trigger");
    44. alert.addProperty("alarmContent", exflow.getId() + "fails!");
    45. alert.addProperty("priority","2");
    46. String[] cmd = new String[8];
    47. cmd[0] = "curl";
    48. cmd[1] = "-H";
    49. cmd[2] = "Content-type:application/json";
    50. cmd[3] = "-X";
    51. cmd[4] = "POST";
    52. cmd[5] = "-d";
    53. cmd[6] = alert.toString();
    54. cmd[7] = url;
    55. logger.info("Sending phonealert!");
    56. Runtime.getRuntime().exec(cmd);
    57. }
    58. /**
    59. * 首次出现问题的通知
    60. *
    61. * @param exflow
    62. * @throws Exception
    63. */
    64. @Override
    65. public voidalertOnFirstError(ExecutableFlow exflow) throws Exception {
    66. }
    67. @Override
    68. public void alertOnSla(SlaOption slaOption,String slaMessage) throws Exception {
    69. }
    70. @Override
    71. public void alertOnFailedUpdate(Executorexecutor, List executions, ExecutorManagerException e) {
    72. }
    73. }

    新建
    azkaban-web/plugin/alerter/phone-alerter文件夹,并在内部新建conf和lib两个目录。

    在新建的conf目录里,新建plugin.properties文件,添加内容如下:

    1. #name一定要设置email,用以覆盖默认的邮件报警
    2. alerter.name=email
    3. alerter.external.classpaths=lib
    4. alerter.class=com.atguigu.PhoneAlterter
    5. #这两个参数和你使用的AlertAPI有关系
    6. my.alert.appKey=xxxxxx-xxxxxxxxxxxx
    7. my.alert.url=xxxxx

    将代码jar包上传到azkaban-web/lib文件夹,并重启web服务。

    1. $bin/shutdown-web.sh
    2. $bin/start-web.sh中4、 测试,执行任务,等待报警。

    4、 测试,执行任务,等待报警。
     

  • 相关阅读:
    GitHub暴涨4W下载量!阿里内网的大型分布式技术手册到底有多强
    大数据开发工程师招聘要求高吗?
    木材图像远程鉴定系统开发与实现
    启动Docker Desktop报 “Docker Desktop - Unexpected WSL error”
    NI Package Manager创建程序包
    java毕业设计房屋租赁系统演示录像2021mybatis+源码+调试部署+系统+数据库+lw
    Linux编译安装dig9.18
    8.RESTful案例
    集成websocket实现实时通信(ruoyi 使用笔记)
    Scala中使用 break 和 continue
  • 原文地址:https://blog.csdn.net/zjjcchina/article/details/126244613