Airflow 1.9 记录到 s3,日志文件写入 S3 但无法从 UI 读取
Airflow 1.9 logging to s3, Log files write to S3 but can't read from UI
我一直在查看有关此主题的各种答案,但未能找到可行的解决方案。
我将气流设置为登录到 s3,但 UI 似乎只使用基于文件的任务处理程序,而不是指定的 S3。
我的 s3 连接设置如下
Conn_id = my_conn_S3
Conn_type = S3
Extra = {"region_name": "us-east-1"}
(ECS实例使用了一个拥有完整s3权限的角色)
我创建了一个 log_config 文件,其中还包含以下设置
remote_log_conn_id = my_conn_S3
encrypt_s3_logs = False
logging_config_class = log_config.LOGGING_CONFIG
task_log_reader = s3.task
在我的日志配置中,我有以下设置
LOG_LEVEL = conf.get('core', 'LOGGING_LEVEL').upper()
LOG_FORMAT = conf.get('core', 'log_format')
BASE_LOG_FOLDER = conf.get('core', 'BASE_LOG_FOLDER')
PROCESSOR_LOG_FOLDER = conf.get('scheduler', 'child_process_log_directory')
FILENAME_TEMPLATE = '{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts }}/{{ try_number }}.log'
PROCESSOR_FILENAME_TEMPLATE = '{{ filename }}.log'
S3_LOG_FOLDER = 's3://data-team-airflow-logs/airflow-master-tester/'
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'airflow.task': {
'format': LOG_FORMAT,
},
'airflow.processor': {
'format': LOG_FORMAT,
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'airflow.task',
'stream': 'ext://sys.stdout'
},
'file.processor': {
'class': 'airflow.utils.log.file_processor_handler.FileProcessorHandler',
'formatter': 'airflow.processor',
'base_log_folder': os.path.expanduser(PROCESSOR_LOG_FOLDER),
'filename_template': PROCESSOR_FILENAME_TEMPLATE,
},
# When using s3 or gcs, provide a customized LOGGING_CONFIG
# in airflow_local_settings within your PYTHONPATH, see UPDATING.md
# for details
's3.task': {
'class': 'airflow.utils.log.s3_task_handler.S3TaskHandler',
'formatter': 'airflow.task',
'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
's3_log_folder': S3_LOG_FOLDER,
'filename_template': FILENAME_TEMPLATE,
},
},
'loggers': {
'': {
'handlers': ['console'],
'level': LOG_LEVEL
},
'airflow': {
'handlers': ['console'],
'level': LOG_LEVEL,
'propagate': False,
},
'airflow.processor': {
'handlers': ['file.processor'],
'level': LOG_LEVEL,
'propagate': True,
},
'airflow.task': {
'handlers': ['s3.task'],
'level': LOG_LEVEL,
'propagate': False,
},
'airflow.task_runner': {
'handlers': ['s3.task'],
'level': LOG_LEVEL,
'propagate': True,
},
}
}
我可以在 S3 上看到日志,但是当我导航到 UI 日志时,我得到的只是
*** Log file isn't local.
*** Fetching here: http://1eb84d89b723:8793/log/hermes_pull_double_click_click/hermes_pull_double_click_click/2018-02-26T11:22:00/1.log
*** Failed to fetch log file from worker. HTTPConnectionPool(host='1eb84d89b723', port=8793): Max retries exceeded with url: /log/hermes_pull_double_click_click/hermes_pull_double_click_click/2018-02-26T11:22:00/1.log (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fe6940fc048>: Failed to establish a new connection: [Errno -2] Name or service not known',))
我可以在日志中看到它成功导入了 log_config.py(我还包含了一个 init.py)
不明白为什么它在这里使用 FileTaskHandler 而不是 S3
如有帮助将非常感谢
在我的场景中,这里的故障不是气流。
我可以去 gitter 频道和那里的人交谈。
将 print 语句放入 python 代码后 运行 我能够在这行代码中捕获异常。
例外是 SSLContext 上的回避最大深度问题,在网络上四处查看后似乎是由于将 gevent 与 unicorn 结合使用所致。
https://github.com/gevent/gevent/issues/903
我将其切换回同步并且不得不将 AWS ELB 侦听器更改为 TCP 但之后日志通过 UI
正常工作
希望这对其他人有帮助。
我一直在查看有关此主题的各种答案,但未能找到可行的解决方案。
我将气流设置为登录到 s3,但 UI 似乎只使用基于文件的任务处理程序,而不是指定的 S3。
我的 s3 连接设置如下
Conn_id = my_conn_S3
Conn_type = S3
Extra = {"region_name": "us-east-1"}
(ECS实例使用了一个拥有完整s3权限的角色)
我创建了一个 log_config 文件,其中还包含以下设置
remote_log_conn_id = my_conn_S3
encrypt_s3_logs = False
logging_config_class = log_config.LOGGING_CONFIG
task_log_reader = s3.task
在我的日志配置中,我有以下设置
LOG_LEVEL = conf.get('core', 'LOGGING_LEVEL').upper()
LOG_FORMAT = conf.get('core', 'log_format')
BASE_LOG_FOLDER = conf.get('core', 'BASE_LOG_FOLDER')
PROCESSOR_LOG_FOLDER = conf.get('scheduler', 'child_process_log_directory')
FILENAME_TEMPLATE = '{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts }}/{{ try_number }}.log'
PROCESSOR_FILENAME_TEMPLATE = '{{ filename }}.log'
S3_LOG_FOLDER = 's3://data-team-airflow-logs/airflow-master-tester/'
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'airflow.task': {
'format': LOG_FORMAT,
},
'airflow.processor': {
'format': LOG_FORMAT,
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'airflow.task',
'stream': 'ext://sys.stdout'
},
'file.processor': {
'class': 'airflow.utils.log.file_processor_handler.FileProcessorHandler',
'formatter': 'airflow.processor',
'base_log_folder': os.path.expanduser(PROCESSOR_LOG_FOLDER),
'filename_template': PROCESSOR_FILENAME_TEMPLATE,
},
# When using s3 or gcs, provide a customized LOGGING_CONFIG
# in airflow_local_settings within your PYTHONPATH, see UPDATING.md
# for details
's3.task': {
'class': 'airflow.utils.log.s3_task_handler.S3TaskHandler',
'formatter': 'airflow.task',
'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
's3_log_folder': S3_LOG_FOLDER,
'filename_template': FILENAME_TEMPLATE,
},
},
'loggers': {
'': {
'handlers': ['console'],
'level': LOG_LEVEL
},
'airflow': {
'handlers': ['console'],
'level': LOG_LEVEL,
'propagate': False,
},
'airflow.processor': {
'handlers': ['file.processor'],
'level': LOG_LEVEL,
'propagate': True,
},
'airflow.task': {
'handlers': ['s3.task'],
'level': LOG_LEVEL,
'propagate': False,
},
'airflow.task_runner': {
'handlers': ['s3.task'],
'level': LOG_LEVEL,
'propagate': True,
},
}
}
我可以在 S3 上看到日志,但是当我导航到 UI 日志时,我得到的只是
*** Log file isn't local.
*** Fetching here: http://1eb84d89b723:8793/log/hermes_pull_double_click_click/hermes_pull_double_click_click/2018-02-26T11:22:00/1.log
*** Failed to fetch log file from worker. HTTPConnectionPool(host='1eb84d89b723', port=8793): Max retries exceeded with url: /log/hermes_pull_double_click_click/hermes_pull_double_click_click/2018-02-26T11:22:00/1.log (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fe6940fc048>: Failed to establish a new connection: [Errno -2] Name or service not known',))
我可以在日志中看到它成功导入了 log_config.py(我还包含了一个 init.py)
不明白为什么它在这里使用 FileTaskHandler 而不是 S3
如有帮助将非常感谢
在我的场景中,这里的故障不是气流。
我可以去 gitter 频道和那里的人交谈。
将 print 语句放入 python 代码后 运行 我能够在这行代码中捕获异常。
例外是 SSLContext 上的回避最大深度问题,在网络上四处查看后似乎是由于将 gevent 与 unicorn 结合使用所致。
https://github.com/gevent/gevent/issues/903
我将其切换回同步并且不得不将 AWS ELB 侦听器更改为 TCP 但之后日志通过 UI
正常工作希望这对其他人有帮助。