SeaTunnel 告警通知实战指南:邮件 + 钉钉双渠道任务失败通知 10 分钟跑通
2026/9/18 12:12:04 网站建设 项目流程

SeaTunnel 告警通知实战指南:邮件 + 钉钉双渠道任务失败通知 10 分钟跑通

【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel

SeaTunnel 是一个分布式数据集成工具,EmailSinkDingTalk是它内置的两个官方 Sink 连接器。本文用它们搭一条任务告警链路:先跑通邮件通知,再接入钉钉群机器人,最后实现双渠道同时触达并控制消息频率。全部配置预计 10 分钟完成,做完你会收到第一封告警邮件和第一条群消息。

一、告警通知链路长什么样

链路只有三段:数据源产出告警数据 → 引擎调度 Sink → 邮件 / 钉钉渠道出站。

检查任务(source:产出失败记录 / 状态数据) │ 数据行 ├─> EmailSink ─> SMTP 服务器 ─> 运维邮箱(固定正文 + CSV 附件) └─> DingTalk ─> 群机器人 Webhook ─> 钉钉群(文本消息)

两点事实先说清:这两个连接器本质是普通数据接收器,仓库里没有独立的"告警框架";触发与否取决于"有没有数据流入"。Email 连接器文档和 DingTalk 连接器文档给出了全部参数定义,本文配置项均以此为据。

二、动手前检查清单

一屏看完,任何一项不满足都建议先补齐再写配置。

检查项要求验证方式
SeaTunnel 版本包含 EmailSink、DingTalk 两个连接器的版本安装目录connectors下能看到对应 jar
JDK8 及以上;邮件实现依赖 JDK 自带com.sun.mail包,JDK 8 下最稳定java -version
网络出口(邮件)SMTP 服务器 465 或 25 端口可达在运行节点telnet smtp.example.com 465
网络出口(钉钉)可访问oapi.dingtalk.com(HTTPS)浏览器或curl访问机器人 Webhook 域名
邮箱账号已开启 SMTP 服务,并生成授权码(专用密码)邮箱设置页可见授权码
钉钉机器人群内已创建自定义机器人,安全设置为"加签"能拿到access_tokenSEC开头密钥

三、5 分钟跑通邮件通知 📧

目标:用 FakeSource 模拟一条告警记录,验证邮箱能收到带附件的邮件。

新建alert-email.conf,source 部分用一行 FakeSource 模拟一条"失败记录"即可,sink 配置如下:

sink { EmailSink { email_from_address = "sender@example.com" email_to_address = "ops@example.com" email_host = "smtp.example.com" email_transport_protocol = "smtp" email_smtp_auth = true email_smtp_port = 465 email_authorization_code = "你的授权码" email_message_headline = "SeaTunnel 任务告警" email_message_content = "任务明细见附件" } }

参数含义与 EmailSinkOptions 定义一一对应:

参数说明示例
email_from_address发件人地址,认证时也作为用户名sender@example.com
email_to_address收件人,多个用英文逗号分隔a@x.com,b@x.com
email_hostSMTP 服务器地址smtp.qq.com
email_transport_protocol传输协议smtp / smtps
email_smtp_auth是否开启认证;为 true 时自动启用 SSLtrue
email_smtp_portSMTP 端口,默认 465465
email_authorization_code邮箱授权码,不是登录密码16 位专用密码
email_message_headline邮件标题(固定文本)SeaTunnel 任务告警
email_message_content邮件正文(固定文本)任务明细见附件
email_attachment_name附件文件名,默认 emailsink.csvalert.csv

关于"消息模板"要说实话:标题和正文是写死的字符串,不支持变量替换;上游数据行会被写成 CSV 附件随邮件发出。所以动态告警信息放在附件里,正文写清背景即可。

运行验证:

./bin/seatunnel.sh --config alert-email.conf -e local

收件箱收到带 CSV 附件的邮件、日志出现 "Sent message successfully" 即成功。注意 EmailSinkWriter 实现中的逻辑:至少写入一行数据才发信,上游没数据时会跳过并记 "No data to send"。

四、钉钉机器人配置与加签 🤖

目标:把同一份告警数据推到钉钉群。

  1. 群设置 → 智能群助手 → 添加"自定义"机器人,安全设置选"加签"。
  2. 复制 Webhook 地址(形如https://oapi.dingtalk.com/robot/send?access_token=...)和SEC开头的密钥。
  3. 配置 sink:
sink { DingTalk { url = "https://oapi.dingtalk.com/robot/send?access_token=XXXXXX" secret = "SECXXXXXXXXXXXXXXXXXXXX" } }

加签原理一句话:连接器用 secret 对时间戳\n密钥做 HmacSHA256 再 Base64、URL 编码,把 timestamp 和 sign 拼到 Webhook 后发出,钉钉服务端据此校验来源,见 DingTalkWriter 实现。

参数说明示例
url机器人 Webhook 完整地址https://oapi.dingtalk.com/robot/send?access_token=...
secret与机器人绑定的加签密钥SEC093249eef...

消息格式上,该连接器把每一行数据序列化为一条 text 类型消息发出(msgtype 在源码中固定为 text)。想要更易读的告警措辞,在上游把行数据组织成完整句子,例如+I[2026-09-17 12:00, job-order-sync, FAILED, OOM at writer]

五、双渠道同时触达与频率控制

同一个作业里声明两个 sink,数据并行发往两个渠道:

sink { EmailSink { # 同第三节的完整配置 } DingTalk { url = "https://oapi.dingtalk.com/robot/send?access_token=XXXXXX" secret = "SECXXXXXXXX" } }

触发条件与限流现状:DingTalk 每收到一行就发一条群消息;EmailSink 只在有数据时、Writer 关闭时发一封。两个连接器都没有内置的频控参数,因此防骚扰要靠数据侧:

  • 上游加 filter 或去重,只让"首次失败""状态变化"的行流出,避免重复推送;
  • 需要聚合时,优先走邮件渠道——多行数据天然合并成一个附件;
  • 巡检类作业按周期调度,周期内汇总后再产出告警行。

六、排错手册

现象常见原因处理动作
日志报 Send email failed / SMTP 认证失败填了登录密码而非授权码;email_smtp_auth=true时端口未用 465生成邮箱专用密码;核对 host、port、protocol 三者匹配;确认 SMTP 出口可达
作业成功但没收到邮件source 未产出一行数据(空数据不发信)查日志 "No data to send, skipping email";确认 source 行数大于 0
钉钉返回签名校验失败secret 与机器人不匹配;运行机时间与标准时间偏差过大重新复制 webhook 与 secret;用 NTP 同步机器时钟
钉钉返回安全策略错误机器人安全设置用了"自定义关键词"而非"加签"群机器人安全设置改为"加签"后重新取 secret
发送超时、连接被重置网络出口受限放开 465(邮件)与 443(钉钉)出站,或配置代理

延伸方向

  • 把"周期巡检作业"固定成模板:检查类 source 定时运行,仅在发现失败时向两个 sink 输出记录,形成低噪音的失败通知。
  • 仓库中还有 connector-slack 等结构类似的接收器,可按同一模式扩展渠道。
  • 附件 CSV 的字段顺序与分隔符由上游 schema 和email_field_delimiter决定,可按团队规范固化成统一附件格式。

先让一条 FakeSource 数据到达你的邮箱和钉钉群,再谈调度与模板——链路通了,后面的事都是配置。

【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询