Rya*_*ack 11 docker docker-compose airflow docker-volume airflow-scheduler
我正在使用Docker Apache airflow VERSION 1.9.0-2(https://github.com/puckel/docker-airflow).
调度程序生成大量日志,文件系统将快速耗尽空间,因此我尝试以编程方式删除由airflow创建的调度程序日志,可在调度程序容器中找到(/ usr/local/airflow/logs/scheduler )
我已经设置了所有这些维护任务:https: //github.com/teamclairvoyant/airflow-maintenance-dags
但是,这些任务仅删除工作服务器上的日志,而调度程序日志位于调度程序容器中.
我还设置了远程日志记录,将日志发送到S3,但正如本文中提到的删除气流任务日志中所述,此设置不会阻止气流写入本地计算机.
此外,我还尝试在worker和scheduler之间创建一个共享命名卷,如此处所述Docker Compose - 在多个容器之间共享命名卷.但是,我在worker中收到以下错误:
ValueError: Unable to configure handler 'file.processor': [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler'
和调度程序中的以下错误:
ValueError: Unable to configure handler 'file.processor': [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler/2018-04-11'
那么,人们如何删除调度程序日志?
灵感来自这个回复,我已经加入了airflow-log-cleanup.pyDAG(含部分变更其参数)从这里删除所有旧气流日志,包括调度日志。
除了我的EC2的磁盘大小(7.7G为/dev/xvda1),30天的默认值DEFAULT_MAX_LOG_AGE_IN_DAYS似乎太大之外,我的更改很小,因此(我有4个DAG)我将其更改为14天,但可以根据您的环境随意调整:
DEFAULT_MAX_LOG_AGE_IN_DAYS = Variable.get("max_log_age_in_days", 30) 变成
DEFAULT_MAX_LOG_AGE_IN_DAYS = Variable.get("max_log_age_in_days", 14)
以下可能是解决此问题的一种选择。
使用以下机制登录 docker 容器
#>docker exec -it <name-or-id-of-container> sh
Run Code Online (Sandbox Code Playgroud)
运行上述命令时,请确保容器正在运行。
然后使用 cron 作业在这些日志文件上配置计划的 rm 命令。
| 归档时间: |
|
| 查看次数: |
4945 次 |
| 最近记录: |