You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当ADF中任一阶段失败时,如何通过Databricks Notebook发送邮件至Outlook 2016?

在ADF中实现阶段失败时通过Databricks Notebook发送Outlook告警邮件

步骤1:配置ADF的失败触发逻辑

  • 给每个需要监控的ADF阶段(Pipeline Activity)添加失败分支动作:
    • 选中目标阶段,进入「Settings」标签页的「Failure」分支,添加一个「Notebook」活动并关联你的Databricks集群。
    • 传递关键参数到Notebook:必须包含failed_activity_name(用表达式@activity('当前阶段名').Name获取当前失败阶段名称)、pipeline_name(流水线名称,表达式@pipeline().PipelineName)、failure_time(失败时间,表达式@utcNow())。

步骤2:编写Databricks Notebook的邮件发送代码

根据Databricks集群的操作系统选择对应的实现方式:

集群为Windows环境(可直接调用本地Outlook客户端)

# 若集群未预装依赖,先执行安装
%pip install pywin32

import win32com.client

# 获取ADF传入的参数
dbutils.widgets.text("failed_activity_name", "")
dbutils.widgets.text("pipeline_name", "")
dbutils.widgets.text("failure_time", "")

failed_activity = dbutils.widgets.get("failed_activity_name")
pipeline = dbutils.widgets.get("pipeline_name")
fail_time = dbutils.widgets.get("failure_time")

# 初始化Outlook并构建邮件
outlook = win32com.client.Dispatch("Outlook.Application")
mail = outlook.CreateItem(0)

mail.To = "告警收件人邮箱@domain.com"
mail.Subject = f"ADF告警:{pipeline} 中 {failed_activity} 阶段失败"
mail.Body = f"""
流水线名称:{pipeline}
失败阶段:{failed_activity}
失败时间:{fail_time}(UTC时间)
"""

# 发送邮件
mail.Send()

集群为Linux环境(通过SMTP连接Outlook服务器)

import smtplib
from email.mime.text import MIMEText

# 获取ADF传入的参数
dbutils.widgets.text("failed_activity_name", "")
dbutils.widgets.text("pipeline_name", "")
dbutils.widgets.text("failure_time", "")

failed_activity = dbutils.widgets.get("failed_activity_name")
pipeline = dbutils.widgets.get("pipeline_name")
fail_time = dbutils.widgets.get("failure_time")

# 配置SMTP参数
smtp_server = 'smtp.office365.com'
smtp_port = 587
sender_email = '你的发件邮箱@domain.com'
sender_password = '你的邮箱应用密码(若开启MFA)'
receiver_email = '告警收件人邮箱@domain.com'

# 构建邮件内容
subject = f"ADF告警:{pipeline} 中 {failed_activity} 阶段失败"
body = f"流水线名称:{pipeline}\n失败阶段:{failed_activity}\n失败时间:{fail_time}(UTC时间)"
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = receiver_email

# 发送邮件
with smtplib.SMTP(smtp_server, smtp_port) as server:
    server.starttls()
    server.login(sender_email, sender_password)
    server.sendmail(sender_email, receiver_email, msg.as_string())

步骤3:测试验证

  • 手动触发某个阶段失败,检查是否收到包含准确失败信息的告警邮件;
  • 确认参数传递正常,邮件中显示的阶段名称、流水线名称和时间无误。

内容的提问来源于stack exchange,提问作者harshith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:36:22