Google Cloud Composer (Apache Airflow) 无法访问日志文件
Google Cloud Composer (Apache Airflow) cannot access log files
我正在 运行在 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% 的成功率。但是,它总是 returns 这条错误消息(并且没有其他打印语句或日志)。对于为什么会发生这种情况,非常感谢任何帮助。
我们也遇到了同样的问题,然后向 GCP 提出了支持请求并得到了以下回复。
该消息与将日志从 Airflow worker 同步到 WebServer 的延迟有关,至少需要几分钟(取决于对象的数量及其大小)
总日志大小似乎不大,但足以明显减慢同步速度,因此,我们建议 cleanup/archive 日志
基本上我们建议改用 Stackdriver 日志,因为此同步的设计会导致延迟
希望能帮到您解决问题。
从 Google Composer 的 1.10.3 升级到 1.10.6 后,我遇到了同样的问题。
我可以在我的日志中看到气流试图从名称以 -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
我写信给 google 支持,他们说团队正在修复。
编辑:
我一直在使用 gsutil
访问我的日志并将存储桶名称后缀替换为 -bucket
gsutil cat gs://us-east1-dada-airflow-xxxxx-bucket/logs/...../5.logs
我在多个场合遇到过同样的情况。
当我查看 Airflow Web UI 上的日志时,一旦作业完成,它就会给我同样的错误。虽然当我在一两分钟后检查 UI 上的相同日志时,我可以正确地看到日志。
根据上述答案,它是网络服务器和工作节点之间的同步问题。
这个问题至少从 Airflow 版本 1.10.10+composer 开始得到解决。
总的来说,这里描述的问题应该更像是一个偶发问题。
在某些情况下,将 default-task-retries 设置为允许重试任务至少 1 次的值会有帮助。
我正在 运行在 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% 的成功率。但是,它总是 returns 这条错误消息(并且没有其他打印语句或日志)。对于为什么会发生这种情况,非常感谢任何帮助。
我们也遇到了同样的问题,然后向 GCP 提出了支持请求并得到了以下回复。
该消息与将日志从 Airflow worker 同步到 WebServer 的延迟有关,至少需要几分钟(取决于对象的数量及其大小) 总日志大小似乎不大,但足以明显减慢同步速度,因此,我们建议 cleanup/archive 日志
基本上我们建议改用 Stackdriver 日志,因为此同步的设计会导致延迟
希望能帮到您解决问题。
从 Google Composer 的 1.10.3 升级到 1.10.6 后,我遇到了同样的问题。
我可以在我的日志中看到气流试图从名称以 -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
我写信给 google 支持,他们说团队正在修复。
编辑:
我一直在使用 gsutil
访问我的日志并将存储桶名称后缀替换为 -bucket
gsutil cat gs://us-east1-dada-airflow-xxxxx-bucket/logs/...../5.logs
我在多个场合遇到过同样的情况。 当我查看 Airflow Web UI 上的日志时,一旦作业完成,它就会给我同样的错误。虽然当我在一两分钟后检查 UI 上的相同日志时,我可以正确地看到日志。 根据上述答案,它是网络服务器和工作节点之间的同步问题。
这个问题至少从 Airflow 版本 1.10.10+composer 开始得到解决。
总的来说,这里描述的问题应该更像是一个偶发问题。
在某些情况下,将 default-task-retries 设置为允许重试任务至少 1 次的值会有帮助。