airflow on_failure_call_back现在持续运行

时间:2018-11-30 08:13:46

标签: python airflow airflow-scheduler

我要发出松弛警报(失败状态和成功状态)

达格现在正在工作, 当状态为成功状态时,松弛警报将起作用! 但是现在,on_failure_callback-失败状态持续工作 (每1分钟1次)

注意它继续失败。 但是,它不起作用,我认为它也不是真实状态。

我该如何更改呢?... 我想知道有关实际失败状态的懈怠通知

现在我们的task_default参数是这样的。

dt = datetime.now(tz=tz.tzlocal())
task_default_args = {
    'owner': 'owner',
    'retries': 2,
    'retry_delay': timedelta(minutes=1),
    'start_date': datetime(2018, 11, 10),
    #'depends_on_past': False,
    'email': ['mail'],
    'email_on_failure': True,
    'email_on_retry': False,
    'on_failure_callback': send_slack(
        senderRole='airflow',
        receiverSubscribe='bot',
        level='info',
        text='= fail' + str(dt),
        X_CAG_AUTH='AG_CONSUMER_TOKEN access-key=500000000000',
    ),
    'execution_timeout': timedelta(minutes=30)
}

-- > Dag Contents like this 


start = DummyOperator(
    task_id='start',
    dag=dag)

tmp_slack_test_dag = PostgresOperator(pool=redshift_pool,
                      task_id='tmp_slack_test_sql',
                      postgres_conn_id=redshift_conn_id,
                      sql="""sql/tmp_.sql""",
                      parameters=None,
                      autocommit=True,
                      dag=dag
                    )

success_dummy = DummyOperator(
    task_id='success_dummy',
    dag=dag,
    trigger_rule=TriggerRule.ALL_SUCCESS
)

alert_success_task = PythonOperator(
    task_id='alert_success',
    python_callable=lambda: send_slack(
        senderRole='airflow',
        receiverSubscribe='bot',
        level='info',
        text='success'+str(dt),
        X_CAG_AUTH='AG_CONSUMER_TOKEN access-key=500000000000'
    ),
    #depends_on_past=True,
    dag=dag
)

end = DummyOperator(
    task_id='end',
    dag=dag)

start >> tmp_slack_test_dag >> success_dummy >> alert_success_task >> end

1 个答案:

答案 0 :(得分:2)

这是因为您需要将函数传递给on_failure_callback,而不是函数的输出。

将其更改为以下内容,即分离警报功能,然后将功能名称传递给on_failure_callback

def slack_failed_task(contextDictionary, **kwargs):  
       failed_alert = SlackAPIPostOperator(
         task_id='slack_failed',
         channel="#datalabs",
         token="...",
         text = ':red_circle: DAG Failed',
         owner = '_owner',)
         return failed_alert.execute


task_with_failed_slack_alerts = PythonOperator(
    task_id='task0',
    python_callable=<file to execute>,
    on_failure_callback=slack_failed_task,
    provide_context=True,
    dag=dag)