Apache DolphinScheduler 告警插件与告警组配置实战指南:从告警实例创建到发送原理
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
导读
本文以 Apache DolphinScheduler 的告警模块为核心,系统讲解如何在安全中心中创建告警插件实例、配置告警策略、关联告警组,并完成"成功发、失败发、成功失败都发"三类告警场景的落地。同时结合告警插件 SPI 接口、告警发送服务与测试发送链路的源码实现,帮助读者理解告警从"工作流状态变化"到"消息推送"的完整处理逻辑,掌握可复现、可验证的告警配置与排障方法。
一、告警模块的核心概念与整体架构
在 DolphinScheduler 中,告警能力被设计为"插件(Alert Plugin)—实例(Alert Plugin Instance)—告警组(Alert Group)"三层结构:
| 层级 | 名称 | 作用 |
|---|---|---|
| 插件 | AlertChannelFactory / AlertChannel | 定义一种告警渠道(如钉钉、飞书、邮件、Slack、Webhook 等)的发送能力与参数表单 |
| 实例 | AlertPluginInstance | 插件的一次具体配置,填写了真实接收地址、Token 等参数 |
| 告警组 | AlertGroup | 将多个告警实例聚合成组,供工作流 / 任务调度时按组触发 |
三者关系为:一个插件可创建多个告警实例,一个告警组可以关联多个告警实例。当工作流执行结束或任务状态发生变化时,系统会以"告警组"为发送单元,遍历该组下所有关联的告警实例并逐一下发告警消息。
从源码看,告警插件的 SPI 定义位于 AlertChannel.java:
public interface AlertChannel { AlertResult process(AlertInfo info); }每个告警插件只需实现process(AlertInfo)完成消息投递,并通过 AlertChannelFactory.java 提供插件名称name()、创建实例create()以及供前端渲染的表单参数params()。AlertData(AlertData.java)则封装了告警编号、标题、内容、日志与告警类型等发送所需的全部数据。
告警实例与告警组的数据均持久化于数据库:告警实例对应t_ds_alert_plugin_instance表,实体类为 AlertPluginInstance.java,其中plugin_define_id关联插件定义、plugin_instance_params以 JSON 字符串保存该实例的完整参数。告警组的关联关系则由AlertGroup及AlertGroupAlertPluginInstanceRelation维护。
二、告警策略(WarningType):成功发、失败发与全部发送
创建告警实例时,必须选择告警策略。该策略在源码中被建模为WarningType枚举,见 WarningType.java:
NONE(0, "none"), // 不发送告警 SUCCESS(1, "success"), // 成功时发送 FAILURE(2, "failure"), // 失败时发送 ALL(3, "all"); // 成功或失败都发送在告警实例表单中对应三个可选项:成功发、失败发、成功和失败都发(即源码中的SUCCESS、FAILURE、ALL,默认值为ALL)。该选项由告警服务在安装插件时统一注入,见 AlertPluginManager.java 中的getWarningTypeParams():它通过RadioParam构建一个名为WarningType的必填单选参数,选项值即为上述三种描述。
告警实例与任务状态的匹配逻辑说明如下:当工作流或任务执行完成触发告警时,系统会取出告警实例配置的告警策略,与本次任务的最终状态进行比对——匹配则执行该告警实例的发送逻辑,不匹配则过滤掉,不发送。因此:
- 若实例选择"成功发",仅在任务成功结束时触发;
- 若实例选择"失败发",仅在任务失败(或异常)时触发;
- 若实例选择"成功和失败都发",无论任务以何种状态结束都会触发。
该设计使同一告警组内可以同时挂载不同策略的实例,实现"成功与失败走不同渠道"的精细化告警路由。
说明:在 DolphinScheduler 2.0.0 及之后版本中,告警能力以"告警实例"为基本配置单元,创建后需与告警组进行关联方可生效。
三、支持的告警场景
告警模块支持的核心场景如下所示:
图中展示了告警从工作流/任务实例产生告警事件,经告警服务(Alert Server)处理后,分发到各类告警插件(如钉钉、飞书、企业微信、邮件、Slack、Telegram、Webhook 等)的端到端路径。DolphinScheduler 在 dolphinscheduler-alert-plugins 目录下内置了 13 种告警插件,包括:
- 钉钉(dolphinscheduler-alert-dingtalk)
- 飞书(dolphinscheduler-alert-feishu)
- 企业微信(dolphinscheduler-alert-wechat)
- 邮件(dolphinscheduler-alert-email)
- Slack(dolphinscheduler-alert-slack)
- Telegram(dolphinscheduler-alert-telegram)
- 阿里云语音(dolphinscheduler-alert-aliyunVoice)
- PagerDuty、Prometheus、Script、WebexTeams、HTTP、Webhook 等
各插件通过PrioritySPIFactory在 Alert Server 启动时统一加载注册,仓库根目录 plugins_config 也可对启用的插件进行定制。
四、操作步骤:创建告警实例与告警组
使用步骤总体为两条路径:
- 创建告警实例:进入安全中心 → 告警实例管理 → 新建告警实例 → 选择告警插件 → 填写告警参数 → 保存;
- 创建告警组并绑定实例:进入安全中心 → 告警组管理 → 新建告警组 → 勾选所需的告警实例 → 保存。
4.1 进入安全中心
在 DolphinScheduler UI 左侧导航栏进入"安全中心",可以看到"告警组管理"与"告警实例管理"两个入口。需要先在左侧点击告警实例管理完成实例创建,再切回告警组管理进行关联。
4.2 创建告警实例
点击告警实例管理页面的"新建告警实例"按钮,进入创建表单:
创建实例时需依次完成:
- 告警插件:从下拉列表中选择告警渠道类型(如钉钉、飞书、Slack、Webhook 等);
- 告警实例名称:为该实例起一个便于识别的名称,如
钉钉-生产环境; - 告警策略:在"成功发 / 失败发 / 成功和失败都发"中选择一项;
- 插件专属参数:根据所选插件填写对应参数。
不同插件的参数各不相同,例如:
- 钉钉:需填写 Webhook 地址、关键词 / 加签方式、消息类型等;
- 飞书:需填写 Webhook 地址及消息展示类型;
- Slack:需配置 Webhook 地址与渠道;
- 邮件:需配置 SMTP 服务器、端口、发件人账号、授权码、SSL 开关、收件人列表等;
- HTTP / Webhook:需填写请求 URL、Header、请求方式(POST/GET)与消息体模板。
填写完成后点击保存,告警实例即创建成功,实例参数将以 JSON 形式写入t_ds_alert_plugin_instance.plugin_instance_params字段。
4.3 测试发送:验证告警实例是否可用
创建告警实例后,务必使用测试发送功能验证配置是否正确。点击"测试发送"按钮,系统会向该实例对应的渠道发送一条测试消息,消息标题与内容定义在 AlertConstants.java:
public static final String TEST_TITLE = "DolphinScheduler test alert"; public static final String TEST_CONTENT = "[{\"message\":\" This is a test alert message form DolphinScheduler\"}]";从实现链路看,"测试发送"由 API 层的 AlertPluginInstanceServiceImpl.testSend() 发起:API 服务先通过注册中心定位可用的 Alert Server 地址,再通过IAlertOperator客户端调用 Alert Server 的sendTestAlert远程方法,由 Alert Server 加载对应插件实例并实际投递。若 Alert Server 不存在或投递失败,接口会返回明确的错误信息(如ALERT_SERVER_NOT_EXIST、ALERT_TEST_SENDING_FAILED),据此即可快速定位是服务未启动还是插件参数错误。
建议在正式关联告警组之前,对每个告警实例都执行一次测试发送,确认渠道可达、参数正确。
4.4 创建告警组并关联实例
回到"安全中心 → 告警组管理",点击"新建告警组",填写告警组名称,并从告警实例列表中选择一个或多个实例进行关联:
一个告警组可以同时关联多个告警实例,例如同时勾选"钉钉群告警""企业微信告警""邮件告警",则工作流触发告警时这三个渠道会同时收到消息。后续在工作流定义或任务定义中配置"失败重试告警组 / 成功告警组"时,只需引用该告警组名称即可。
五、底层发送原理:告警组如何驱动实例发送
告警的实际发送由独立的 Alert Server 进程完成,核心处理类是 AlertSender.java,其关键逻辑如下:
public AlertSendResponse syncHandler(int alertGroupId, String title, String content) { List<AlertPluginInstance> alertInstanceList = alertDao.listInstanceByAlertGroupId(alertGroupId); ... for (AlertPluginInstance instance : alertInstanceList) { AlertResult alertResult = doSendEvent(instance, alertData); ... } }从中可以看到发送的核心流程:
- 按告警组取实例:通过
alertDao.listInstanceByAlertGroupId(alertGroupId)查询该告警组关联的全部告警实例(对应getAlertPluginInstanceList方法); - 组空校验:若告警组下没有任何告警实例,直接返回失败并记录错误日志
Alert GroupId xxx send error : not found alert instance; - 逐实例发送:遍历实例列表,调用
doSendEvent完成实际投递,每个实例的发送结果(成功 / 失败及原因)被汇总进AlertSendResponse; - 结果汇总:只有所有实例均发送成功,整体响应状态才为成功,否则进入
onPartialSuccess/onError,并更新t_ds_alert表中该条告警的执行状态(AlertStatus.EXECUTION_SUCCESS / EXECUTION_PARTIAL_SUCCESS / EXECUTION_FAILURE)。
在发送过程中,Alert Server 还会根据实例中的告警策略(WarningType)与当前任务最终状态进行匹配,不匹配的实例会被过滤,从而保证"成功发、失败发、都发"策略的精确生效。此外,Alert Server 采用"事件获取(AlertEventFetcher)— 事件循环(AlertEventLoop)— 事件发送(AlertSender)"的异步模型处理大量告警事件,并为发送线程提供了可配置的超时时间(AlertConfig.getWaitTimeout()),相关配置可参考 AlertConfig.java。
六、排查与运维建议
- 确认 Alert Server 已启动:告警发送与"测试发送"都依赖 Alert Server 进程,若收到
ALERT_SERVER_NOT_EXIST错误,需检查 Alert Server 是否正常注册到注册中心; - 检查告警组是否为空:日志中出现
not found alert instance表示告警组未关联任何实例,请回到告警组管理重新关联; - 逐项核对插件参数:Webhook 地址、Token、收件人、端口与 SSL 开关等参数错误是最常见的失败原因,可先通过"测试发送"验证,再观察
t_ds_alert表中的执行状态与日志字段; - 区分策略与渠道:同一告警组内可挂载不同告警策略的实例,若某实例未按预期触发,优先核对它的 WarningType 与任务最终状态是否匹配;
- 查看发送结果:告警执行状态(成功 / 部分成功 / 失败)记录在
t_ds_alert表中,配合 Alert Server 日志即可定位具体失败渠道与原因。
七、小结
DolphinScheduler 的告警能力以"插件—实例—告警组"三层模型为核心:插件定义渠道能力,实例固化渠道参数与告警策略,告警组聚合多个实例供工作流按组触发。创建实例时选择"成功发 / 失败发 / 成功失败都发",配合"测试发送"进行验证,再将实例关联到告警组,即可完成从任务状态到多渠道消息推送的完整闭环。理解WarningType匹配、AlertSender按组遍历发送等底层实现,能帮助你在实际项目中更高效地配置与排查告警链路。
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考