获取有关气流on_failure_callback上下文的异常详细信息

时间:2018-08-13 12:08:49

标签: airflow

是否可以获取有关气流on_failure_callback的异常详细信息?

我注意到它不是context的一部分。我想创建一个通用的异常处理机制,该机制将有关错误的信息(包括有关异常的详细信息)发布到Slack。现在,我已经设法触发/执行回调并将其发布到Slack,但是无法发布异常详细信息。

谢谢。

3 个答案:

答案 0 :(得分:0)

我认为可能无法在回调内部获取异常详细信息。 Look at the source code

# Handling callbacks pessimistically
try:
    if self.state == State.UP_FOR_RETRY and task.on_retry_callback:
        task.on_retry_callback(context)
    if self.state == State.FAILED and task.on_failure_callback:
        task.on_failure_callback(context)
except Exception as e3:
    logging.error("Failed at executing callback")
    logging.exception(e3)

答案 1 :(得分:0)

该错误已添加到上下文here中。因此,您实际上可以通过以下操作简单地做到这一点:

context.get("exception")

不幸的是,您似乎无法从上下文中获取堆栈跟踪或类似内容。

答案 2 :(得分:0)

on_failure_callback可以提供给DAG和/或单个任务。

在第一种情况(提供给DAG的情况)中,'exception'中没有context(参数Airflow称呼您的on_failure_callback)。

在第二种情况下(为任务提供),有。

包含的对象应该是python Exception。 令人惊讶的是,从中获得类似堆栈跟踪的信息是不直观的,但是从this answer中,我使用以下代码来获得相当可读的堆栈跟踪:

import traceback

...

exception = context.get('exception')
formatted_exception = ''.join(
   traceback.format_exception(etype=type(exception), 
     value=exception, tb=exception.__traceback__
   )
).strip()