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

Cloud Composer中SendGrid任务失败告警邮件未送达问题求助

排查Cloud Composer + SendGrid任务失败告警未送达的问题

我之前在Cloud Composer里配置SendGrid告警时也踩过类似的坑,结合实际经验给你梳理几个关键排查点:

1. 修复DAG默认参数的语法错误

你提供的default_dag_args存在明显语法问题,这会直接导致参数不生效:

  • start_date应该是datetime对象而非字符串,需要先导入datetime模块后用datetime(2019, 2, 25)格式定义
  • "email":[email_list]后面缺少逗号,破坏了字典的语法结构
  • 确保email_list是字符串列表格式,比如["alerts@example.com", "admin@example.com"],不能是单个字符串或其他格式

修正后的示例代码:

from datetime import datetime, timedelta

PROJECT_ID = "your-project-id"
email_list = ["alerts@example.com", "admin@example.com"]

default_dag_args = {
    "start_date": datetime(2019, 2, 25),
    "email": email_list,
    "email_on_failure": True,
    "email_on_retry": False,
    "retries": 1,
    "retry_delay": timedelta(minutes=5),
    "project_id": PROJECT_ID
}

2. 验证SendGrid环境变量配置

  • SENDGRID_MAIL_FROM:必须是在SendGrid控制台中验证过的发件人邮箱(支持单个邮箱验证或域名验证),未验证的发件人会被SendGrid直接拦截
  • SENDGRID_API_KEY:确保密钥拥有Mail Send权限,且未过期、未被撤销。可以在SendGrid控制台的API Keys页面重新生成一个具备完整邮件发送权限的密钥
  • 确认Cloud Composer环境中这两个变量已正确配置(在Composer环境的「环境变量」页面可查看)

3. 检查DAG/Operator的参数覆盖

单个Operator可能会覆盖默认的告警参数,比如某个任务显式设置了email_on_failure=False,导致该任务失败时不触发告警。可以检查DAG中所有Operator的定义,确保它们没有覆盖email_on_failure和email参数,或者显式继承默认配置:

with DAG(
    dag_id="your_dag_id",
    default_args=default_dag_args,
    schedule_interval="@daily"
) as dag:
    task1 = BashOperator(
        task_id="task1",
        bash_command="exit 1",  # 故意让任务失败
        email_on_failure=True  # 显式确认告警开关
    )

4. 查看Cloud Composer日志定位错误

去Cloud Logging中筛选Airflow相关日志(选择你的Composer环境,日志过滤器设置为resource.type="cloud_composer_environment" AND logName:"airflow"),搜索sendgrid、email或failure关键词:

  • 若看到401 Unauthorized:说明SENDGRID_API_KEY无效
  • 若看到403 Forbidden:通常是发件人邮箱未在SendGrid完成验证
  • 若看到Recipient address rejected:可能是收件人邮箱不存在或被SendGrid判定为垃圾邮箱

5. 测试邮件发送功能

可以写一个极简的测试DAG来验证告警流程:

from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime, timedelta

default_args = {
    "start_date": datetime.now(),
    "email": ["your-test-email@example.com"],
    "email_on_failure": True,
    "email_on_retry": False
}

with DAG(
    dag_id="test_sendgrid_alert",
    default_args=default_args,
    schedule_interval=None,
    catchup=False
) as dag:
    fail_task = BashOperator(
        task_id="fail_task",
        bash_command="exit 1"
    )

手动触发这个DAG,观察是否能收到告警邮件,同时查看日志是否有异常。

6. 确认Airflow邮件后端配置

在Airflow Webserver的Admin -> Configurations页面,搜索email_backend,确认其值为airflow.contrib.utils.sendgrid_email.send_email(Composer在配置SENDGRID变量后会自动设置,但偶尔可能出现配置异常)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:15:14