我正在使用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中的另一个级别?我不需要这种细粒度的日志记录级别,因为它溢出了我的硬盘驱动器。
在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票提交。
我设法通过设置环境变量来解决问题
GUNICORN_CMD_ARGS "--log-level WARNING"