注意
Apache Airflow 作业由 Apache Airflow 提供支持。
Apache Airflow 包含一项功能强大的功能,可用于在任务失败、成功或重试时发送电子邮件通知和警报。 此功能对于监视工作流和排查可能出现的任何问题至关重要。
若要启用电子邮件通知和警报,需要设置可以代表 Airflow 发送电子邮件的简单邮件传输协议 (SMTP) 服务器。 SMTP 是一种标准协议,用于通过 Internet 发送和接收电子邮件。 可以使用自己的 SMTP 服务器或第三方服务,如 Outlook、Gmail、SendGrid 或 Mailgun。 本文演示如何使用 Gmail 为 Apache Airflow 作业配置 SMTP 服务器。
先决条件
SMTP 服务器:需要服务器或服务的 SMTP 主机、端口、用户名和密码。 如果使用 Gmail,请为帐户创建应用密码。
要用作通知和警报发件人的电子邮件地址。 此电子邮件地址可以与 SMTP 用户名相同,如果 SMTP 服务允许,该电子邮件地址也可以是其他电子邮件地址。
想要接收通知和警报的一个或多个电子邮件地址。 这些电子邮件地址可以是你自己的电子邮件地址,也可以是团队成员、利益干系人或客户的电子邮件地址。
设置环境变量
满足先决条件后,可以将 Apache Airflow 作业配置为使用 SMTP 服务器或服务。 编辑
Airflow configurations
部分中的以下字段:- AIRFLOW__SMTP__SMTP_HOST:SMTP 服务器或服务的主机名或 IP 地址。
- AIRFLOW__SMTP__SMTP_STARTTLS:连接到 SMTP 服务器或服务时是否使用 TLS(传输层安全性)加密。 如果 SMTP 服务器或服务支持 TLS,则将此配置设置为 True,否则为 False。
- AIRFLOW__SMTP__SMTP_SSL:连接到 SMTP 服务器或服务时是否使用 SSL(安全套接字层)加密。 如果 SMTP 服务器或服务需要 SSL,则将此配置设置为 True,否则为 False。
- AIRFLOW__SMTP__SMTP_USER:SMTP 服务器或服务的用户名。 此用户名通常是电子邮件地址,如果使用 SendGrid,则为 API 密钥。
- AIRFLOW__SMTP__SMTP_PASSWORD:SMTP 服务器或服务的密码。 此密码通常是电子邮件密码,如果使用 Gmail,则为应用密码。
- AIRFLOW__SMTP__SMTP_PORT:SMTP 服务器或服务的端口号。 此端口通常为 25、465 或 587,具体取决于加密方法和 SMTP 服务。
- AIRFLOW__SMTP__SMTP_MAIL_FROM:要用作通知和警报发件人的电子邮件地址。 此电子邮件地址可以与 SMTP 用户名相同,如果 SMTP 服务允许,该电子邮件地址也可以是其他电子邮件地址。
如果使用 Gmail,请参阅以下值。
Airflow 配置 Gmail AIRFLOW__SMTP__SMTP_HOST smtp.gmail.com AIRFLOW__SMTP__SMTP_STARTTLS 真 实 AIRFLOW__SMTP__SMTP_SSL 假 AIRFLOW__SMTP__SMTP_USER your_email@gmail.com AIRFLOW__SMTP__SMTP_PASSWORD 您的应用密码 AIRFLOW__SMTP__SMTP_PORT 587 AIRFLOW__SMTP__SMTP_MAIL_FROM your_email@gmail.com
示例:在 DAG 失败时发送电子邮件的 DAG
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.utils.email import send_emailfrom datetime import datetime
default_args = {
"owner": "airflow",
"start_date": datetime(2024, 3, 1),
"email": ["your_email@gmail.com"], # The email address that you want to receive the notifications and alerts
"email_on_failure": True,
"email_on_retry": False,
"retries": 0
}
with DAG(
"email_callback_test",
default_args=default_args,
schedule_interval=None
) as dag:
fail_task = BashOperator(
task_id="fail_task",
bash_command="cd fail",
)
fail_task
从 SMTP 服务器接收的示例电子邮件
电子邮件中包含以下信息:
尝试次数:0
错误
日志:重定向到失败的任务日志的链接。
主机:Apache Airflow 作业的主机名
主机:Apache Airflow 作业的主机名
标记成功:重定向到失败的 DAG 状态的链接。