Airflow的Gunicorn是垃圾邮件错误日志

问题描述 投票:1回答:2

我正在使用Apache Airflow,并认识到gunicorn-error.log的大小在5个月内增长超过50 GB。大多数日志消息都是INFO级日志,如:

[2018-05-14 17:31:39 +0000] [29595] [INFO]处理信号:ttou [2018-05-14 17:32:37 +0000] [2359] [INFO]工人退出(pid:2359) [2018-05-14 17:33:07 +0000] [29595] [INFO]处理信号:ttin [2018-05-14 17:33:07 +0000] [5758] [INFO]使用pid启动工作人员: 5758 [2018-05-14 17:33:10 +0000] [29595] [INFO]处理信号:ttou [2018-05-14 17:33:41 +0000] [2994] [INFO]工人退出(pid: 2994) [2018-05-14 17:34:11 +0000] [29595] [INFO]处理信号:ttin [2018-05-14 17:34:11 +0000] [6400] [INFO]使用pid启动工作人员:6400 [2018-05-14 17:34:13 +0000] [29595] [INFO]处理信号:ttou [2018-05-14 17:34:36 +0000] [3611] [INFO]工人退出(pid:3611)

在Airflow配置文件中,我只能设置日志文件路径。有谁知道如何将gunicorn记录改为Airflow中的另一个级别?我不需要这种细粒度的日志记录级别,因为它溢出了我的硬盘驱动器。

gunicorn airflow
2个回答
0
投票

在Airflow中,对我来说,记录似乎有点棘手。其中一个原因是日志记录分为几个部分。例如,Airflow的日志配置与gunicorn webserver完全不同(您在邮件中提到的“垃圾邮件”日志来自gunicorn)。

为了解决这个垃圾邮件问题,我通过在webserver()函数中添加了几行来修改了一点Airflow的bin / cli.py:

   if args.log_config:
        run_args += ['--log-config', str(args.log_config)]

(为了简洁起见,我没有粘贴代码来处理参数)

然后,对于日志配置文件,我有类似于:

[loggers]
keys=root, gunicorn.error, gunicorn.access

[handlers]
keys=console, error_file, access_file

[formatters]
keys=generic, access

[logger_root]
level=INFO
handlers=console

[logger_gunicorn.error]
level=INFO
handlers=error_file
propagate=0
qualname=gunicorn.error

[logger_gunicorn.access]
level=INFO
handlers=access_file
propagate=1
qualname=gunicorn.access

[handler_console]
class=StreamHandler
formatter=generic
args=(sys.stdout, )

[handler_error_file]
class=logging.handlers.TimedRotatingFileHandler
formatter=generic
args=('/home/airflow/airflow/logs/webserver/gunicorn.error.log',)

[handler_access_file]
class=logging.handlers.TimedRotatingFileHandler
formatter=access
args=('/home/airflow/airflow/logs/webserver/gunicorn.access.log',)

[formatter_generic]
format=[%(name)s] [%(module)s] [%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s
#format=[%(levelname)s] %(asctime)s [%(process)d] [%(levelname)s] %(message)s
datefmt=%Y-%m-%d %H:%M:%S
class=logging.Formatter

[formatter_access]
format=%(message)s
class=logging.Formatter

请注意gunicorn.error中的“propagate = 0”,它可以避免stdout中的垃圾邮件。你仍然拥有它们,但至少它是本地化的/home/airflow/airflow/logs/webserver/gunicorn.error.log,应该轮换(我还没有完全测试旋转部分,说实话)。

如果我有时间,我会将此更改作为Airflow的Jira票提交。


0
投票

我设法通过设置环境变量来解决问题

GUNICORN_CMD_ARGS "--log-level WARNING"

© www.soinside.com 2019 - 2024. All rights reserved.