如何配置Airflow scheduler故障时的Slack告警通知
认知验证
你的判断完全正确:Airflow 原生的DAG层面、任务层面的告警回调(比如on_failure_callback)完全依赖Scheduler进程正常运行、能解析DAG、调度任务执行并捕获状态异常。如果Scheduler进程崩溃、所在集群不可用,所有DAG内的告警逻辑都无法被触发,自然收不到故障通知。
实现Scheduler故障Slack告警的方案
方案1:配合Airflow健康检查+外部监控工具推送
Airflow 2.0+ 自带了健康检查端点,默认路径是/health,返回的响应中会明确包含Scheduler的存活状态:
- 正常状态下scheduler字段的status值为
healthy - Scheduler故障超过阈值(默认30s无心跳)时status值为
unhealthy
你可以用公司现有监控工具(Prometheus+Alertmanager、Nagios、Zabbix等)按以下流程配置:
- 定期请求Airflow的
/health端点 - 配置告警规则:当scheduler状态为
unhealthy、或端点完全无法访问时,触发告警 - 配置告警渠道对接Slack webhook,故障时直接推消息到指定Slack频道
如果你使用的是Airflow 1.x版本,没有自带
/health端点,可以直接查询Airflow元数据库的scheduler_job表,取最新一条记录的latest_heartbeat字段,若该时间距当前时间超过30s即可判断Scheduler故障。
方案2:独立心跳检测任务
如果没有统一监控工具,也可以部署一个独立于Airflow集群的轻量定时任务(比如Linux crontab、云函数定时触发器),逻辑如下:
- 配置一个专门的心跳DAG,设置为每5分钟运行一次,任务逻辑就是更新独立存储(比如Redis、对象存储)中保存的Airflow最后心跳时间
- 独立定时任务每10分钟检查一次最后心跳时间:如果超过15分钟没有更新,说明Scheduler已经无法正常调度任务,直接调用Slack webhook推送告警
Slack告警配置示例
首先在Slack中创建对应应用,开启Incoming Webhooks功能,获取对应频道的webhook地址。如果用Alertmanager推送,配置参考如下:
receivers: - name: 'slack-airflow-alerts' slack_configs: - channel: '#airflow-alerts' webhook_url: '替换为你的Slack webhook地址' text: "Airflow Scheduler故障告警:{{ .CommonAnnotations.summary }}\n故障详情:{{ .CommonAnnotations.description }}"
内容的提问来源于stack exchange,提问作者av abhishiek
相关产品推荐
相关产品推荐

