dockercloud/logrotate 旋转日志后启动脚本

dockercloud/logrotate 旋转日志后启动脚本

我正在使用 DockerCloud 来提供 RESTful API 微服务,并使用 LogDNA 查看容器的日志。我使用 logspout 将日志发送到 LogDNA,它运行良好,直到 dockercloud/logrotate 旋转我的容器日志。然后,logspout 似乎停止工作,我需要重新启动容器。此错误已记录并重现(https://github.com/gliderlabs/logspout/issues/309)。

在解决这个问题之前,我想在发生 dockercloud/logrotate 时自动重启 logspout 容器。我的想法是监听一个日志文件,当发生 logrotate 时,启动一个重启 logspout 的脚本,但还没有找到要检查的日志。

当发生 logrotate 时,关于如何重新启动 logspout 容器的任何想法?

答案1

我发现有人制作了一个 docker 镜像,在容器日志的大小减少后重新启动 logspout。(https://hub.docker.com/r/ograhl/logspout-restart/

我还不能让它工作,但是我从中获取了脚本 run.sh 并对其进行了如下修改:

#!/bin/sh
set -e

last_logbytes=0

while true
do

  # Sum up size of all log files
  logbytes=`ls -s /var/lib/docker/containers/*/*.log | awk '{sum+=$1;} END {print sum;}'`

  if [ $logbytes -lt $last_logbytes ]; then

    # Size has been reduced since last poll; Restart logspout
    echo "Restarting Logspout..."
    docker restart f4f5159fe595 #This is logspout container id
  fi

  last_logbytes=$logbytes

  sleep 10

done

我已经编辑了 /etc/rc.local 以在启动时启动该脚本。

由于此解决方案每 10 秒运行一次,因此会丢失一些日志。除非 logspout 修复此问题,否则我们只能忍受这种情况。

相关内容