通过 Airflow UI 访问日志

2025年6月9日 | 阅读 8 分钟

引言

Apache Airflow 提供了一个强大且用户友好的界面来管理和监控工作流。Airflow UI 的一个关键功能是它能够提供对 DAG(有向无环图)及其关联任务的详细日志的访问。这些日志对于调试、监控和分析工作流执行至关重要。

DAG 级日志

DAG 级日志提供了特定 DAG 执行历史的概览。这些日志提供了对 DAG 整体行为的见解,并有助于识别其随时间推移的执行模式或问题。要访问 DAG 级日志,请按照以下步骤操作:

  • 导航到 DAGs 列表:打开 Airflow UI,并在主页上找到可用 DAGs 的列表。
  • 请选择一个特定的 DAG:单击 DAG 名称以打开其详细视图。此视图显示 DAG 的计划、开始日期和任务依赖关系等信息。
  • 访问日志:在详细视图中,您会找到一个显示 DAG 执行历史的部分。列出了每个执行日期及其状态(例如,成功、失败、运行中)。单击特定的执行日期以查看与该运行相关的日志。

DAG 级日志中的信息

  • 执行时间戳:日志包含时间戳,指示 DAG 何时触发、运行了多长时间以及何时完成。
  • 总体状态:DAG 执行是否成功、失败或跳过的摘要。
  • 错误和警告:DAG 执行期间遇到的任何问题都将被记录下来,帮助您识别潜在的故障。

DAG 级日志对于获得对工作流的高层理解特别有用。它们提供了执行历史的时间顺序视图,使得更容易发现趋势或异常。

任务级日志

为了获得更精细的见解,您可以深入了解任务级日志。这些日志侧重于 DAG 中的单个任务,对于调试和监控至关重要。以下是如何访问任务级日志:

  • 找到任务实例:在 DAG 的详细视图中,导航到 Graph View、Tree View 或 Grid View。这些可视化显示了 DAG 的结构和每个任务的状态。
  • 选择一个任务:单击任务实例(在图形中表示为节点,在网格中表示为单元格)以打开其详细信息。
  • 查看日志:在任务详细信息视图中,您会找到一个“Logs”链接。单击此链接可访问所选任务实例的日志。

任务级日志中的信息

  • 执行详细信息:日志包含有关任务执行的详细信息,例如执行的命令、环境变量和运行时指标。
  • 调试信息:在任务执行期间遇到的任何错误或异常都会被记录下来,以及堆栈跟踪和错误消息。
  • 输出消息:标准输出和错误流被捕获在日志中,为调试提供额外的上下文。

任务级日志按任务实例和执行日期进行分段,使您可以专注于单个任务的特定运行。这种详细程度对于查明和解决复杂工作流中的问题至关重要。

日志分段

Airflow 的日志系统以分段的方式组织日志,便于导航和查找特定信息。

日志基于两个关键维度进行分段:

  • 任务实例
    • 每个任务实例对应于 DAG 运行中特定任务的执行。每个任务实例的日志单独存储,确保信息清晰组织且易于访问。
  • 执行日期
    • 日志按执行日期进一步分段,允许您查看特定 DAG 或任务运行的日志。这种分段对于调试在特定执行窗口中发生的问题特别有用。

日志分段的好处

  • 改进导航:通过按任务实例和执行日期组织日志,Airflow 使您无需筛选无关数据即可轻松找到所需的日志。
  • 高效调试:分段日志可帮助您专注于特定的问题区域,从而减少排除故障所需的时间和精力。

增强日志记录体验

虽然 Airflow UI 提供了强大的日志访问界面,但您还可以采取一些额外的步骤来增强日志记录体验。

  • 配置日志存储
    • Airflow 支持将日志存储在各种后端,包括本地文件、Amazon S3、Google Cloud Storage 和 Elasticsearch。配置集中式存储后端可以提高日志的可访问性和可扩展性。
  • 启用远程日志记录
    • 远程日志记录允许您将日志存储在分布式系统中,即使 Airflow Web 服务器或工作程序出现故障,也可以访问这些日志。
  • 与监控工具集成
    • 将 Airflow 日志与 Grafana 或 Splunk 等外部监控工具集成,可以提供高级可视化和分析功能。
  • 使用日志保留策略
    • 为了管理存储成本并确保符合组织策略,请实施日志保留策略以归档或删除较旧的日志。
  • 利用日志搜索
    • 使用日志搜索工具或功能可快速在日志中查找特定信息。这对于调试大型工作流特别有用。

使用 Airflow 日志的最佳实践

要充分利用 Airflow 的日志记录功能,请考虑以下最佳实践:

  • 理解日志层次结构
    • 熟悉 Airflow 日志的结构,包括 DAG 级和任务级日志,以及日志分段。
  • 标准化日志消息
    • 在自定义运算符和任务中使用一致且有意义的日志消息,以便更容易解释日志。
  • 监控日志大小
    • 定期监控日志大小,确保它们不会失控增长,这可能导致存储问题。
  • 自动化日志分析
    • 实施自动化工具或脚本来分析日志并为特定条件(例如任务失败或长时间执行)生成警报。
  • 定期审查日志
    • 定期审查日志以发现工作流中潜在的优化或改进。

通过 Airflow UI 访问日志是管理和监控工作流的基本方面。

  • 无论您是分析 DAG 级日志以获得高层见解,还是深入研究任务级日志以进行详细调试,Airflow UI 都提供了有效管理工作流所需的工具。
  • 通过利用日志分段、配置高级日志记录选项并遵循最佳实践,您可以优化日志记录体验,并确保工作流的可靠性和效率。

自定义 UI 中的状态颜色

要自定义 Airflow Web UI 中 TaskInstance 和 DagRun 的状态颜色,请按照下面概述的步骤操作:

1. 创建 airflow_local_settings.py 文件

  • 位置: airflow_local_settings.py 文件需要放置在以下目录之一:
    • $PYTHONPATH
    • $AIRFLOW_HOME/config
  • 为何选择此位置?: Airflow 在启动时会自动将 $AIRFLOW_HOME/config 文件夹添加到 Python 路径,使其能够找到此文件并应用您的自定义设置。

2. 在 airflow_local_settings.py 中定义自定义状态颜色

创建 airflow_local_settings.py 文件后,添加以下 Python 字典以指定 Airflow 任务和 DAG 运行中每个状态的颜色。您可以根据自己的偏好自定义颜色代码。

颜色代码说明

  • Queued:深灰色表示正在等待执行的任务。
  • Running:浅绿色(#01FF70)表示当前正在运行的函数。
  • Success:绿色(#2ECC40)表示已完成的任务。
  • Failed:Firebrick 颜色表示失败的任务。
  • up_for_retry:黄色表示已准备好重试的任务。
  • up_for_reschedule:青绿色表示需要重新调度的函数。
  • upstream_failed:橙色表示具有上游失败的任务。
  • Skipped:深紫红色表示跳过的任务。
  • Scheduled:米色表示预期运行但尚未开始的任务。

3. 重启 Airflow Webserver

创建并更新 airflow_local_settings.py 文件后,请重启 Airflow Webserver 以使更改生效。

  • 重启命令:您可以使用以下命令重启 Airflow Webserver:
  • 预期结果:Airflow Web UI 上的 TaskInstance 和 DagRun 状态现在将根据您的设置反映新的颜色。

4. 视觉效果

重启后,UI 将使用您自定义的颜色在任务和 DAG 的不同状态之间进行视觉区分。例如:

  • 自定义前:所有任务状态都将具有默认颜色,难以一目了然地区分不同状态。
  • 自定义后:为每个状态分配了不同的颜色,可以更容易地快速了解 UI 中任务和 DAG 的状态。

自定义的好处

  • 提高视觉清晰度:自定义颜色有助于快速识别任务的状态,尤其是在管理大量 DAG 和函数时。
  • 个性化 UI:您可以根据团队的需求定制 UI,从而提高可读性并减少混淆。

此自定义允许您通过在任务状态之间添加清晰的视觉区分来增强用户体验,从而使您的 Airflow 环境更易于导航。

Airflow 日志中的高级功能

日志内容审查

  • 对于处理敏感数据的用户,您可以启用日志内容审查来屏蔽敏感信息。这可确保符合 GDPR 或 HIPAA 等数据隐私法规。

自定义日志处理程序

  • Airflow 允许您定义自定义日志处理程序来扩展日志记录功能。例如,您可以直接将日志发送到 Slack 等消息服务,或为 Prometheus 创建指标。

实时流式传输

  • 日志可以实时流式传输到仪表板或警报系统,从而能够即时了解任务进度或故障。

动态日志级别

  • 动态调整不同任务或运算符的日志级别,以控制详细程度,而无需修改全局设置。

自定义日志格式化程序

  • 实现自定义格式化程序,在每个日志条目中包含任务特定元数据,例如任务 ID 或执行时间。

任务特定日志记录

  • 在自定义运算符中使用 Python 的日志记录库来生成特定于任务执行上下文的其他日志。

故障排除常见日志记录问题

缺少日志:检查工作程序配置,并确保日志记录后端设置正确。配置错误的日志记录路径可能导致日志丢失。

日志格式问题:确保 airflow.cfg 中的日志格式与您选择的后端所需的结构匹配。

存储溢出:如果本地存储过载,请考虑迁移到基于云的存储解决方案或设置日志轮换策略。

权限错误:验证 Airflow 是否具有访问和存储日志到配置目录或后端的适当读/写权限。

实际用例

  • 调试复杂工作流
    • 使用任务级日志来识别多步 ETL 管道中失败任务的根本原因。
  • 合规性审计跟踪
    • 将历史日志作为审计跟踪的一部分,以证明符合行业标准或内部策略。
  • 性能监控
    • 分析 DAG 级日志中的执行时间戳,以识别瓶颈并优化任务持续时间。
  • 警报系统
    • 设置基于特定日志模式(例如重复失败或长时间执行)的警报。

使用日志进行调试策略

  1. 分析执行模式
    • 比较多个运行中的日志以识别模式,例如在特定任务中持续失败或不规则的时间问题。
  2. 回溯依赖关系
    • 当任务失败时,使用其日志追溯上游依赖关系并识别潜在的根本原因。
  3. 隔离间歇性故障
    • 按执行日期分段日志,以便专注于有问题的运行,而不会被成功运行的噪音干扰。