【发布时间】:2020-01-29 22:12:16
【问题描述】:
我在 Airflow 中的大多数 DAG(版本 1.10.6 和 1.10.7)能够成功地将日志上传到 S3,并且我能够在 Airflow UI 中查看这些远程日志。但是,我有一些 DAG 在完成 DAG 运行(成功与否)后不会将 DAG 日志上传到 S3。表现出这种行为的 DAG 始终是相同的,但与能够将日志上传到 S3 的 DAG 相比,我找不到任何会阻止 DAG 日志被上传的代码差异。
我注意到不将日志上传到 S3 的 DAG 总是有这样的结束运行记录:
2020-01-29 20:12:06,763 - INFO - Task exited with return code 0 - None
而将日志上传到 S3 的 DAG 没有此类日志条目。我还在所有 DAG 中看到类似下面的记录,但我在 DAG 中看到的这些消息大约是未将日志上传到 S3 的消息的 2 倍:
DEBUG - The s3 config key is not a dictionary type, ignoring its value of: None
此外,正在上传到 S3 的 DAG 具有与 S3 相关的 Airflow 连接池/AWS 引用,如下所示:
[2020-01-29 20:41:32,852] {{connectionpool.py:203}} INFO - Starting new HTTP connection (1): <IP>
[2020-01-29 20:41:32,895] {{connectionpool.py:735}} INFO - Starting new HTTPS connection (1): <BUCKET>.s3.amazonaws.com
[2020-01-29 20:41:32,932] {{connectionpool.py:735}} INFO - Starting new HTTPS connection (2): <BUCKET>.s3.amazonaws.com
[2020-01-29 20:41:32,949] {{connectionpool.py:735}} INFO - Starting new HTTPS connection (1): <BUCKET>.s3.<REGION>.amazonaws.com
[2020-01-29 20:41:32,984] {{connectionpool.py:735}} INFO - Starting new HTTPS connection (2): <BUCKET>.s3.<REGION>.amazonaws.com
[2020-01-29 20:41:33,040] {{connectionpool.py:203}} INFO - Starting new HTTP connection (1): <IP>
[2020-01-29 20:41:33,065] {{connectionpool.py:735}} INFO - Starting new HTTPS connection (1): <BUCKET>.s3.amazonaws.com
[2020-01-29 20:41:33,084] {{connectionpool.py:735}} INFO - Starting new HTTPS connection (1): <BUCKET>.s3.<REGION>.amazonaws.com
但是,未上传到 S3 的 DAG 没有此类条目。相反,它们具有以下内容,在可以将日志上传到 S3 的 DAG 中找不到:
2020-01-29 20:12:06,763 - INFO - Task exited with return code 0 - None
2020-01-29 20:12:06,942 - ERROR - Exception during reset or similar - None
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 693, in _finalize_fairy
fairy._reset(pool)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 880, in _reset
pool._dialect.do_rollback(self)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 538, in do_rollback
dbapi_connection.rollback()
psycopg2.OperationalError: SSL error: decryption failed or bad record mac
Exception ignored in: <function _ConnectionRecord.checkout.<locals>.<lambda> at 0x7f94e04fa3b0>
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 503, in <lambda>
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 702, in _finalize_fairy
File "/usr/local/lib/python3.7/logging/__init__.py", line 1407, in error
File "/usr/local/lib/python3.7/logging/__init__.py", line 1514, in _log
File "/usr/local/lib/python3.7/logging/__init__.py", line 1524, in handle
File "/usr/local/lib/python3.7/logging/__init__.py", line 1586, in callHandlers
File "/usr/local/lib/python3.7/logging/__init__.py", line 894, in handle
File "/usr/local/lib/python3.7/logging/__init__.py", line 1126, in emit
File "/usr/local/lib/python3.7/logging/__init__.py", line 1116, in _open
NameError: name 'open' is not defined
我不太确定如何继续解决此问题。我曾尝试在黑暗中投掷各种飞镖,但均未成功:
- 在 Airflow 版本 1.10.6 和 1.10.7 之间进行更改。
- 已验证日志可以通过我自己的记录器库从所有 DAG 的 Airflow 实例发送到 S3,包括那些 Airflow 无法将自己的日志上传到 S3 的实例。
- airflow.cfg 中增加的 sql_alchemy_pool 大小以及增加的集群硬件(我读到 psycopg2 操作错误)可能与元数据数据库的连接数有关。
但是,以上都没有对这个问题产生任何影响。由于敏感信息/凭据/等,我不愿发布更详细的日志转储。已转储在 DEBUG 日志中,但如果我可以提供其他信息,请告诉我,我会尽力提供。
【问题讨论】: