乐趣区

关于大数据:杭州思科对-Apache-DolphinScheduler-Alert-模块的改造

杭州思科曾经将 Apache DolphinScheduler 引入公司自建的大数据平台。目前,杭州思科大数据工程师 李庆旺 负责 Alert 模块的革新已根本实现,以更欠缺的 Alert 模块适应理论业务中对简单告警的需要。

PROFILE

李庆旺
杭州思科 大数据工程师,次要负责 Spark、调度零碎等大数据方向开发。

咱们在应用原有的调度平台解决大数据工作时,在操作上多有不便。比方一个对数据进行解决聚合剖析的工作,首先由多个前置 Spark 工作对不同数据源数据进行解决、剖析。最初的 Spark 工作对这期间解决的后果进行再次聚合、剖析,失去咱们想要的最终数据。但遗憾的是过后的调度平台无奈串行执行多个工作,须要估算工作解决工夫来设置多个工作的开始执行工夫。同时其中一个工作执行失败,须要手动进行后续工作。这种形式既不不便,也不优雅。

而 Apache DolphinScheduler 的外围性能——工作流定义 能够将工作串联起来,完满符合咱们的需要。于是,咱们将 Apache DolphinScheduler 引入本人的大数据平台,而我次要负责 Alert 模块革新。目前咱们其余共事也在推动集成 K8s,心愿将来工作在 K8s 中执行。

明天分享的是 Alert 模块的革新。

01 Alert 模块的设计

DolphinScheduler Alert 模块的设计

Apache DolphinScheduler 1.0 版本的 Alert 模式应用配置 alert.properties 的形式,通过配置邮箱、短信等实现告警,但这样的形式曾经不适用于以后的场景了。官网也进行过告警模块重构,详情设计思路参考官网文档:

https://github.com/apache/dol…

https://dolphinscheduler.apac…

Apache DolphinScheduler 告警模块是一个独立启动的服务,外围之一是 AlertPluginManager 类。告警模块集成了很多插件,如钉钉、微信、飞书、邮件等,以独立的模式写在源码中,启动服务时会解析插件并将配置的参数格式化成 JSON 模式,前端通过 JSON 主动渲染出页面。AlertPluginManager 在启动时会缓存插件到内存中。AlertServer 类会启动线程池,定时扫描 DB。

当工作流配置了告诉策略,同时 Worker 执行工作流完结,执行后果匹配告诉策略胜利后,DB 插入告警数据后,线程池扫描 DB,调用 AlertSender 类的 send 办法传入告警数据。告警数据绑定的是告警组,一个告警组对应了多个告警实例。AlertSender 类遍历告警实例,通过 AlertPluginManager 类获取插件实例,调用实例的发送办法,最初更新后果。这是 Apache DolphinScheduler 的整个告警流程。

须要留神的是,Alert  server 启动的同时也启动了 RPC 服务,这是一种针对非凡类型工作,如 SQL 查问报表而设计的告警形式,能够让 Worker 通过 RPC 间接拜访 Alert  Server,利用 Alert 模块实现告警,这个数据不写入 DB。但从整体上来说,Apache DolphinScheduler 的告警模式还是以写 DB,异步交互的形式为主。

定义工作流之后,能够在启动前设置告诉策略,绑定告警组。

在工作维度,能够配置超时告警,当工作超时能够触发报警。这里没有告警组配置,工作和工作流共用一个告警组,当工作超时,会推送到工作流设置的告警组。

上图为零碎告警配置的流程图。能够看到,一个工作流能够配置多个工作实例,工作能够配置超时触发告警,工作流胜利或者失败能够触发告警。一个告警组能够绑定多个告警实例。这样的配置不太正当,咱们心愿告警实例也能够匹配工作流 / 工作实例的状态,也就是工作流胜利和失败调用同一个告警组,然而触发不同的告警实例。这样应用起来更合乎实在场景。

创立告警组,一个告警组能够绑定多个告警实例。

02 大数据工作告警场景

以下是咱们日常工作中的一些 常见的大数据工作告警场景。

对于定时工作,在开始执行前、工作上线、下线或批改参数,以及工作执行胜利或失败时都发送告诉。区别是,对于同一工作不同后果,咱们心愿触发不同的告诉,比方胜利发短信告诉或者钉钉微信群告诉即可,而工作失败了须要在第一工夫告诉对应的研发人员,以失去更快的响应,这时候钉钉微信群中 @对应研发人员或者电话告诉会更及时。目前,公司的任务调度平台是工作中调用 API 进行告诉,这种与代码强耦合的形式极其不不便,实际上能够形象成一个更为通用的模块来实现。

Apache DolphinScheduler 的架构尽管符合实际场景需要,但问题在于告警模块页面配置只能抉择胜利触发告诉,或失败触发告诉,绑定的是同一个告警组,即无论胜利还是失败,告警的路径是雷同的,这一点并不满足咱们在理论生产环境中须要不同后果以不同形式告诉的需要。因而,咱们对 Alert 模块进行了一些革新。

03 Alert 模块的革新

革新的第一步是告警实例。此前,新增一个告警实例,触发告警就会触发该实例的 send 办法,咱们心愿在定义告警实例时能够绑定一个告警策略,有三个选项,胜利发、失败发,以及胜利和失败都发。

在工作定义维度,有一个超时告警的性能,实际上对应失败的策略。

上图为革新实现的配置页面,在创立告警实例页面,咱们增加了一个告警类型字段,抉择是在胜利、失败,或者无论胜利或失败时调用插件。

上图为革新后 Apache DolphinScheduler 告警模块的架构,咱们对其中进行了两点革新。

其一,在执行完工作流或工作时,如果触发告警,在写入 DB 时,会保留本次工作流或者工作的执行后果,具体是胜利还是失败。

第二,调用告警实例发送办法增加了一个逻辑判断,将告警实例与工作状态进行匹配,匹配则执行该告警实例发送逻辑,不匹配则过滤。

革新后告警模块反对场景如下:

具体设计请参考 issue:https://github.com/apache/dol…

代码详见:https://github.com/apache/dol…

此外,咱们还针对 Apache DolphinScheduler 的告警模块向社区提出几点优化的倡议,感兴趣的小伙伴能够跟进 issue,一起来做后续的工作:

  • 工作流启动或高低线或参数批改时,能够触发告诉;
  • 告警场景针对 worker 的监控,如果 worker 挂掉或和 ZK 断开失去心跳,会认为 worker 宕机,会触发告警,但会默认匹配 ID 为 1 的告警组。这样的设置是在源码中写明的,但不看源码不晓得其中的逻辑,不会专门设置 ID 为 1 的告警组,无奈第一工夫失去 worker 宕机的告诉;
  • 告警模块目前反对飞书、钉钉、微信、邮件等多种插件,这些插件实用于国内用户,但国外用户可能应用不同的插件,如思科应用的 Webex Teams,国外罕用告警插件 PagerDuty,咱们也都进行开发并奉献给了社区。同时还有一些比拟罕用的比方 Microsoft Teams 等,感兴趣的小伙伴也能够提个 PR,奉献到社区。

最初一点,可能大数据畛域的小伙伴对于前端不太熟悉,想要开发并奉献告警插件,然而想到须要开发前端就不想进行上来了。开发 Apache DolphinScheduler 告警插件是不须要写前端代码的,只须要在新建告警实例插件时,在 Java 代码中配置好页面中须要输出的参数或者须要抉择的按钮(源码详见 org.apache.dolphinscheduler.spi.params),零碎会主动格式化成 JSON 格局,前端通过 form-create 能够通过 JSON 主动渲染成页面。因而,齐全不必放心写前端的问题。

参加开源

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真挚欢送酷爱开源的搭档退出到开源社区中来,为中国开源崛起献上一份本人的力量,让外乡开源走向寰球。

参加 DolphinScheduler 社区有十分多的参加奉献的形式,包含:

奉献第一个 PR(文档、代码) 咱们也心愿是简略的,第一个 PR 用于相熟提交的流程和社区合作以及感触社区的友好度。

社区汇总了以下适宜老手的问题列表:https://github.com/apache/dol…

非老手问题列表:https://github.com/apache/dol…

如何参加奉献链接:https://dolphinscheduler.apac…

来吧,DolphinScheduler 开源社区须要您的参加,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是微小的。

参加开源能够近距离与各路高手切磋,迅速晋升本人的技能,如果您想参加奉献,咱们有个贡献者种子孵化群,能够增加社区小助手微信(Leonard-ds),手把手教会您(贡献者不分程度高下,有问必答,要害是有一颗违心奉献的心)。

增加小助手微信时请阐明想参加奉献。

来吧,开源社区十分期待您的参加。

社区官网
https://dolphinscheduler.apac…

代码仓地址\
https://github.com/apache/dol…

您的 Star,是 Apache DolphinScheduler  为爱发电的能源❤️

投稿请增加 社区小助手微信

(Leonard-ds)

☞日均解决 10000+ 工作流实例,Apache DolphinScheduler 在 360 数科的实际

☞Apache DolphinScheduler 2.0.5 公布,Worker 容错流程优化

☞Apache DolphinScheduler 版本控制外围原理揭

☞喜讯 | Apache DolphinScheduler PMC Chair 代立冬,PMC 郭强获邀成为 ASF Member

☞途家大数据平台基于 Apache DolphinScheduler 的摸索与实际

☞Apache DolphinScheduler 2.0 时代 API 接口变动

☞海豚调度在 Kubernetes 体系中的技术实战

☞Apache 基金会中国我的项目活跃度剖析 Top20 公布,DolphinScheduler 位列第四

点击浏览原文,退出开源!

退出移动版