昨天发现爬虫的日志太大了,居然每个容器里面,日志都大10G了。 这边的环境是docker,日志收集用的是logstash,切分用的是logrotate 。 日志超过1G之后,logstash会占用的cpu 内存会更多,要及时的清理日志,不然光是logstash的那个java进程就要卡死你了。 在此之前docker里面的日志切分,我都是自己写切分程序,经过我的测试,在性能方面比logrotate差不少的。 不信,你试试? 另外需要注意,有些后端的进程,可能共享了一个logger的fd,这时候,千万不要直接mv,然后再创建一个,不然会引起程序找不到fd,造成崩溃。 madan,天太热,没心情扯淡了…
这是我的Dockerfile配置,我这边精简了很多。
# Pull base image. FROM wowuwowuwo/spider_base COPY ./spider /data/buzzMaster # Define working directory. WORKDIR /data/buzzMaster/ # Clean up RUN rm -rf /tmp/* ENTRYPOINT ["/data/buzzMaster/entrypoint.sh"] #ENTRYPOINT ["echo", "welcome to spider container"] # Define default command. CMD ["bash"]
这是我启动容器后,启动的脚本. 因为是在docker里面,我就不用crontab来管理logrotate切分了。
#!/bin/sh
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp conf/logrotate /etc/logrotate.d/spider
export PYTHONPATH=`pwd` && python bin/timer
echo 1
sleep1
export PYTHONPATH=`pwd` && python bin/spider
/usr/local/logstash-1.4.2/bin/logstash -f conf/agent.conf
while true;do
sleep 3600;
logrotate /etc/logrotate.d/spider -f
done;
这是我logrotate的配置文件. 这配置文件很好理解,一共切分10次,每次100M
/data/buzzMaster/spider.log { sharedscripts dateext nocompress create 2775 root root size 100M missingok notifempty copytruncate rotate 10 postrotate endscript }