【问题标题】:Get Exception details on Airflow on_failure_callback context获取有关 Airflow on_failure_callback 上下文的异常详细信息
【发布时间】:2019-01-20 03:59:16
【问题描述】:

有什么方法可以获取气流on_failure_callback上的异常详细信息?

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

谢谢。

【问题讨论】:

    标签: airflow


    【解决方案1】:

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

    在第一种情况下(提供给 DAG),context 中没有 'exception'(参数 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()
    
    

    【讨论】:

      【解决方案2】:

      错误被添加到上下文here。因此,您实际上可以通过以下方式获得:

      context.get("exception")
      

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

      【讨论】:

      • 我刚收到None
      【解决方案3】:

      我认为可能无法在回调中获取异常详细信息。 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多