设想一下,凌晨3点,你的核心数据调度任务突发失败,下游报表无法按时产出。然而,传统告警方式弊端尽显:渠道单一,仅靠邮件易被忽视;集成困难,无法对接企业自研系统;响应滞后,缺乏自动化故障处理能力。等到你接到通知,并找到相关问题的负责人时,已经耽搁太久了,给生产线造成了无法弥补的损失。
这并不是个例,这种紧急情况时刻都在发生。此刻,生产调度人员最需要的是一个全能高效的告警系统救急。
Apache DolphinScheduler 正是这个“燃眉之急”的答案。它以强大的插件化告警架构,可以统一解决上述难题。
DolphinScheduler 的告警功能由独立的 AlertServer 服务驱动,它不依赖核心调度逻辑,而是通过数据库队列异步处理告警事件。这种设计确保了即使调度系统负载过高,告警通知也能可靠送达。
DolphinScheduler 告警插件列表
Apache DolphinScheduler 支持多种告警方式,主要通过其插件化架构实现。目前内置支持的告警方式包括Email、钉钉 (DingTalk)、**企业微信 (WeChat)**等。
DolphinScheduler 的告警功能通过dolphinscheduler-alert-all模块集成,具体支持的插件可分为以下几类:
1. 常用即时通讯 (IM) 类
- 钉钉 (DingTalk):支持通过钉钉群聊机器人发送告警通知。
- 企业微信 (WeChat):支持企业微信应用及群聊机器人通知。
- 飞书 (Feishu):支持飞书机器人告警推送。
- Slack:支持通过 Webhook 向 Slack 频道发送消息。
- Telegram:支持 Telegram Bot 告警通知。
2. 通用与自定义类
- Email:支持标准 SMTP 协议发送邮件告警。
- Http:通用的 HTTP 告警,可对接任何支持 Webhook 的第三方系统。
- Script (脚本):支持执行自定义 Shell 脚本,可实现复杂的自动化运维逻辑。
3. 运维与专业告警平台
- Prometheus AlertManager:对接 Prometheus 生态的告警管理中心 。
- PagerDuty:支持专业的事件编排平台 PagerDuty。
- WebexTeams:支持 Cisco Webex Teams 协作工具通知。
- Aliyun Voice:支持通过阿里云语音服务进行电话告警。
告警机制
那么,这些告警都是怎么样工作和起作用的呢?简单来说,DolphinScheduler 的告警流程是一个典型的“生产者-消费者”模型。
这些告警方式通过AlertChannelFactory接口进行扩展。AlertPluginManager在启动时会扫描并加载所有实现了该 SPI 接口的插件。当系统触发告警事件时,AbstractEventSender会根据用户配置的告警实例 ID 调用对应的插件进行发送
告警逻辑模型:三位一体
在使用告警前,必须理解以下三个核心概念的层级关系:
| 维度 | 概念 | 技术对应 | 说明 |
|---|---|---|---|
| 怎么发 | 告警实例 (Instance) | AlertChannelFactory | 配置具体的通道,如 SMTP 服务器信息、Webhook 地址等。 |
| 发给谁 | 告警组 (Group) | AlertGroup | 逻辑隔离,将多个实例组合在一起,实现多渠道同步推送。 |
| 何时发 | 通知策略 (Strategy) | WarningType | 在工作流启动时指定:成功发、失败发、还是都不发。 |
高级告警策略“玩法”详解
除了常规的钉钉告警等方式,Apache DolphinScheduler 告警的“精华”,还在于其独特的高级“玩法”。
1. 脚本告警 (Script Alert):实现自动化运维
这是最灵活的高级玩法。当告警触发时,系统会执行指定的 Shell 脚本,并将告警标题、内容等作为参数传入。
- 实现代码:参考
dolphinscheduler-alert-script模块。 - 玩法场景:
- 自动拉起:检测到特定任务失败后,脚本调用 API 重启服务。
- 数据清理:工作流失败后,通过脚本清理 HDFS 或数据库中的脏数据。
2. HTTP 告警:对接自研监控系统
如果企业内部有统一的告警中心,可以使用 HTTP 插件。
- 核心参数:支持配置 URL、请求方式 (POST/GET)、Header 等。
- 玩法场景:将告警信息以 JSON 格式推送到公司的 Prometheus Alertmanager 或自定义 Webhook 接口。
3. 告警优先级与热插拔 (PrioritySPI)
通过实现PrioritySPI接口,你可以为自定义插件设置优先级。
- 设计原理:当 classpath 中存在多个同名插件时,系统根据
getIdentify方法返回的优先级加载最高级别的实现。 - 玩法场景:在不修改官方源码的情况下,通过放置一个更高优先级的 Jar 包,完全重写默认的邮件发送逻辑(例如增加动态签名、附件处理等)。
使用步骤说明
了解了基本的告警工作机制和原理后,我们来学习下如何使用这些复杂而高效的告警方式。
为了更详细地说明 DolphinScheduler 告警的使用步骤,我们需要从安全中心配置、项目关联以及启动触发三个阶段进行深度解析。
核心配置流程图
详细操作步骤说明
- 配置告警实例 (Alert Instance) —— “怎么发”
告警实例是具体的发送渠道配置。你需要在“安全中心 -> 告警实例管理”中创建。
- 选择插件:根据需求选择
Email、DingTalk、Feishu、Script或Http等插件类型。 - 参数配置:
- Email:需配置 SMTP 服务器、端口、发件人邮箱及密码。
- 钉钉/飞书:需配置 Webhook 地址及安全校验密钥(Keyword/Sign)。
- 脚本/HTTP:配置脚本路径或目标 URL,用于高级联动玩法。
- 配置告警组 (Alert Group) —— “发给谁”
告警组是告警实例的逻辑集合。在“安全中心 -> 告警组管理”中创建。
- 多渠道绑定:一个告警组可以关联多个告警实例。例如:创建一个“运维组”,同时关联“邮件实例”和“钉钉实例”,实现双重通知。
- 工作流/任务级的告警设置 —— “监控什么”
在“项目管理 -> 工作流定义”中,你可以针对特定逻辑设置监控:
- 工作流超时告警:在工作流属性中开启“超时告警”,设置超时阈值(分钟)。当工作流运行超过此时间,将触发通知。
- SQL 任务结果告警:在 SQL 任务节点中,可以配置“发送邮件”选项,将 SQL 查询结果通过邮件发送给指定人。
- 启动与通知策略 (Notification Strategy) —— “何时发”
这是告警生效的最后一步。在手动启动工作流或设置定时调度时配置:
- 通知策略:
SUCCESS:仅工作流成功时发。FAILURE:仅工作流失败时发(最常用)。ALL:无论成功失败都发。NONE:不发送通知。
- 绑定告警组:在启动弹窗中选择步骤 2 创建的“告警组”。
脚本告警的参数传递
当你使用脚本告警 (Script Alert)时,AlertServer会将告警详情作为位置参数传递给你的 Shell 脚本。
| 参数位置 | 含义 | 说明 |
|---|---|---|
$1 | 告警标题 | 通常包含工作流名称和状态 |
$2 | 告警内容 | 包含具体的任务 ID、运行时间、日志摘要等 |
玩法示例:
编写一个脚本auto_fix.sh,当收到告警内容包含“Memory Error”时,自动调用 API 调大该任务的资源配置并重试。
Notes
- 权限注意:告警组需要授权给用户后,该用户在创建工作流时才能看到并选择对应的告警组。
- 服务依赖:所有的告警发送逻辑都由
AlertServer执行,请确保该服务已启动并能正常连接外部网络。 - 测试功能:在创建告警实例时,建议点击“测试”按钮验证配置(如 SMTP 账号密码)是否正确。
至此,我们已全面深入地了解了 Apache DolphinScheduler 的告警方式。若您在生产过程中频繁遭遇告警难题,不妨尝试借助 Apache DolphinScheduler 来化解困境,开启高效运维之旅。
- 官网:https://dolphinscheduler.apache.org/zh-cn
- GitHub:https://github.com/apache/dolphinscheduler