Google Cloud Composer (Apache Airflow) 无法访问日志文件

Posted

技术标签:

【中文标题】Google Cloud Composer (Apache Airflow) 无法访问日志文件【英文标题】:Google Cloud Composer (Apache Airflow) cannot access log files 【发布时间】:2020-04-21 02:20:10 【问题描述】:

我在 Google Cloud Composer(托管 Airflow)中运行 DAG,它在本地 Airflow 中运行良好。它所做的只是打印“Hello World”。但是,当我通过 Cloud Composer 运行它时,我收到错误消息:

*** Log file does not exist: /home/airflow/gcs/logs/matts_custom_dag/main_test/2020-04-20T23:46:53.652833+00:00/2.log
*** Fetching from: http://airflow-worker-d775d7cdd-tmzj9:8793/log/matts_custom_dag/main_test/2020-04-20T23:46:53.652833+00:00/2.log
*** Failed to fetch log file from worker. HTTPConnectionPool(host='airflow-worker-d775d7cdd-tmzj9', port=8793): Max retries exceeded with url: /log/matts_custom_dag/main_test/2020-04-20T23:46:53.652833+00:00/2.log (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8825920160>: Failed to establish a new connection: [Errno -2] Name or service not known',))

我还尝试让 DAG 将数据添加到数据库中,它实际上成功率达到了 50%。但是,它总是返回此错误消息(并且没有其他打印语句或日志)。任何帮助都非常感谢为什么会发生这种情况。

【问题讨论】:

嗨!我想向您询问更多信息。你在使用self-managed Airflow 网络服务器吗? Composer&Airflow 的版本是多少?发生这种情况,日志需要大约 10 分钟才能出现,但任务运行的速度是否正常?我建议查看此环境的存储桶,并可能删除一些旧日志和未使用的文件。此外,您始终可以在 Stackdriver Logging 中查看您的日志。让我知道结果。 【参考方案1】:

我们也遇到了同样的问题,然后向 GCP 提出了支持票并得到了以下回复。

    该消息与从 Airflow 工作线程同步日志到 WebServer 的延迟有关,至少需要几分钟(取决于对象的数量及其大小) 总日志大小似乎不大,但足以显着减慢同步速度,因此,我们建议清理/归档日志

    基本上我们建议改用 Stackdriver 日志,因为这种同步的设计会导致延迟

我希望这能帮助你解决问题。

【讨论】:

太棒了,找不到关于这个问题的任何信息,所以我很高兴我不是唯一一个拥有它的人。那么,由于 GCP 不允许您覆盖日志记录位置,因此最好的做法是定期清理/存档日志吗? 我刚刚删除了所有日志文件,但仍然收到相同的错误消息。这对你有意义吗? 在旧版本的composer中我们没有遇到这个问题,只有在我们面临的最新版本中,唯一的选择是使用stackdriver。 @SANN3 我在 Composer 版本 1.17.2 和 Airflow 版本 2.1.2 中遇到了这个问题。它不是每次都出现,而是在较少的情况下出现。将任务重试次数设置为大于 1 有帮助吗?【参考方案2】:

从 Google Composer 的 1.10.3 升级到 1.10.6 后,我遇到了同样的问题。 我可以在我的日志中看到,airflow 正在尝试从名称以 -tenant 结尾的存储桶中获取日志,而我帐户中的存储桶以 -bucket 结尾

在配置中,我也看到了一些奇怪的东西。

## airflow.cfg
[core]
remote_base_log_folder = gs://us-east1-dada-airflow-xxxxx-bucket/logs

## also in the running configuration says
core    remote_base_log_folder  gs://us-east1-dada-airflow-xxxxx-tenant/logs   env var

我写信给谷歌支持,他们说团队正在解决问题。

编辑: 我一直在使用gsutil 访问我的日志并将存储桶名称后缀替换为-bucket

gsutil cat gs://us-east1-dada-airflow-xxxxx-bucket/logs/...../5.logs

【讨论】:

感谢您提供额外的上下文【参考方案3】:

我多次遇到同样的情况。 当我查看 Airflow Web UI 上的日志时,工作完成后,它曾经给我同样的错误。虽然当我在一两分钟后在 UI 上查看相同的日志时,我可以正确地看到这些日志。 根据上述答案,它是网络服务器和 Worker 节点之间的同步问题。

【讨论】:

【参考方案4】:

至少从 Airflow 版本:1.10.10+composer 开始,此问题已得到解决。

【讨论】:

【参考方案5】:

总的来说,这里描述的问题应该更像是一个零星的问题。

在某些情况下,将 default-task-retries 设置为允许重试任务至少 1 次的值会有所帮助。

【讨论】:

以上是关于Google Cloud Composer (Apache Airflow) 无法访问日志文件的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Composer DAG 未出现在 UI 中

无法在 Google Cloud Composer 上安装新的 pipy 包

Google Cloud Composer (Apache Airflow) 无法访问日志文件

如何在Google BigQuery Composer和Cloud Shell中提交多个查询

使用 Google Cloud Composer Rest API 或 Node.js 客户端

DAG 在 Google Cloud Composer 网络服务器上不可点击,但在本地 Airflow 上运行良好