删除Airflow Scheduler日志

时间:2018-04-11 20:18:48

标签: docker docker-compose airflow docker-volume airflow-scheduler

我正在使用Docker Apache airflow VERSION 1.9.0-2(https://github.com/puckel/docker-airflow)。

调度程序生成大量日志,文件系统将快速耗尽空间,因此我尝试以编程方式删除由(/ usr / local / airflow /中的调度程序容器中的airflow创建的调度程序日志)日志/调度器)

我已经设置了所有这些维护任务: https://github.com/teamclairvoyant/airflow-maintenance-dags

但是,这些任务仅删除worker上的日志,并且调度程序日志位于调度程序容器中。

我还设置了远程日志记录,将日志发送到S3,但正如本帖子Removing Airflow task logs中所述,此设置不会阻止气流写入本地计算机。

此外,我还尝试在worker和scheduler之间创建一个共享命名卷,如Docker Compose - Share named volume between multiple containers所述。但是,我在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'

所以,人们如何删除调度程序日志?

4 个答案:

答案 0 :(得分:2)

以下可能是解决此问题的一种方法。

使用以下机制登录docker容器

#>docker exec -it <name-or-id-of-container> sh

在命令运行时确保 - 容器正在运行。

然后使用cron作业在这些日志文件上配置预定的rm命令。

答案 1 :(得分:2)

受到this回复的启发,我在here添加了airflow-log-cleanup.py DAG(对其参数进行了一些更改)以删除所有旧气流日志,包括调度程序日志。

我的更改很小,只是考虑到我的EC2的磁盘大小(/dev/xvda1为7.7G),DEFAULT_MAX_LOG_AGE_IN_DAYS的30天默认值似乎太大(我有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)

答案 2 :(得分:0)

This answer to "Removing Airflow Task logs"也适合您在Airflow 1.10中的用例。

基本上,您需要实现自定义日志处理程序并将Airflow日志配置为使用该处理程序而不是默认处理程序(请参阅insertAtTop不是 UPDATING.md或文档!! ,在气流源仓库中

一个警告:由于日志记录,多处理和Airflow默认处理程序之间的交互方式,重写处理程序方法比通过在派生的处理程序类中调用super()扩展它们更安全。因为Airflow默认处理程序不使用锁

答案 3 :(得分:-1)

我花了很多时间尝试添加“维护”DAG,以清除作为 Docker 容器 启动的不同气流组件生成的日志。

问题实际上更多出现在 Docker 级别,每个进程都负责处理大量日志,默认情况下,这些日志由 Docker 存储在 json 文件中。解决方案是更改 logging drivers 以便日志不再存储在 Docker 托管实例上;但在我的情况下直接发送到 AWS CloudWatch Logs。

我只需将以下内容添加到 docker-compose.yml 文件 (https://github.com/puckel/docker-airflow) 中的每个服务:

    logging:
      driver: awslogs
      options:
        awslogs-group: myAWSLogsGroupID

请注意,运行我的“docker-composed”Airflow 应用程序的 EC2 实例具有一个 AWS 角色,该角色允许她创建日志流并添加日志事件(CreateLogStreamPutLogEvents AWS IAM 服务)。

如果您在 AWS 生态系统之外的机器上运行它,则需要确保它具有 access to AWS through credentials