从风云主机跑路之后,就一直在折腾VPS,虽然我没有什么重要的站,只有一个很久没更新也没什么流量的小博客,但是这个小博客不管怎么说也是从2005年(实际是2004年)就一直坚持下来的“成果”,记录了我在编程、前端上学习和成长的点滴,无论如何我还是要让它坚持在这个网络里存在下去的。
风云主机跑路之后,我痛定思痛,虽然还是选择的国人VPS,但一口气买了几家的,然后多台VPS之间,文件实时同步,MySQL主主同步(这个貌似有网友感兴趣,QQ上反复咨询,回头我再写一篇),这样即使某一家跑路了,我也不用手忙脚乱了,而且还保证了一台VPS宕机时博客的访问不受影响(感谢DNSPod的A记录负载均衡)。
以前很不重视webserver的日志分析,这次配置lnmp环境后,nginx和apache的日志都启用了,为了避免日志文件过大,又利用cron和logrotate实现了日志的每日截断备份和自动清理。网上教程很多,但是参考中还是走了少量弯路(MySQL主主同步也如此),所以还是把自己的步骤记录一下,以备日后参照:
一、指定log路径
我希望nginx、apache、php的日志都一起处理,不想分开单独搞,所以就把所有的log都统一存放到同一个地方,统一用.log后缀。
首先是nginx,在nginx.conf中指定全局的error_log路径:
error_log /home/wwwlogs/nginx_error.log crit;
然后在每个虚拟主机的配置文件中指定access_log路径,一样的:
access_log /home/wwwlogs/ofcss-access.log ofcss-www;
然后是apache,也是分别指定,在httpd.conf中指定全局的log路径:
ErrorLog "/home/wwwlogs/httpd-error.log" CustomLog "/home/wwwlogs/httpd-access.log" combinedio
然后在每个虚拟主机的配置文件中单独指定
ErrorLog "/home/wwwlogs/ofcss-error.log" CustomLog "/home/wwwlogs/ofcss-access.log" combined
最后是php的错误日志,在php.ini中指定
error_log = /home/wwwlogs/php_errors.log
基本上,要点有两条:
- 所有的log文件都指定到同一个位置存放(我这里就是/home/wwwlogs/)
- 所有的log文件都统一后缀(我这里就是.log)
二、配置logrotate
logrotate是linux系统自带的日志转储工具,有默认而好用的工具,我一般就不会考虑单独装个软件来实现了,毕竟VPS的资源能省则省嘛。
logrotate的配置文件一般是在/etc/logrotate.conf文件里,但是它默认包含了/etc/logrotate.d/目录下的其它配置文件,所以我把我的配置文件放在/etc/logrotate.d/weblog里:
/home/wwwlogs/*.log { nocompress daily copytruncate create ifempty olddir /home/wwwlogs/days rotate 5 }
按照之前指定的路径,这个配置就指定了对/home/wwwlogs/目录下的所有**.log*都做相同处理。
三、编写定时脚本
logrotate的配置文件只是指定了每日执行转储、不压缩、转储路径等选项,但是要按日期命名、压缩、删除旧文件等,还需要写个定时脚本来实现。代码如下(假定文件为/usr/local/sbin/logrotate-weblog.sh):
#!/bin/bash #创建转储日志压缩存放目录 mkdir -p /home/wwwlogs/days #手工对nginx日志进行切割转换 /usr/sbin/logrotate -vf /etc/logrotate.d/weblog #当前时间 time=$(date -d "yesterday" +"%Y-%m-%d") #进入转储日志存放目录 cd /home/wwwlogs/days #对目录中的转储日志文件的文件名进行统一转换 for i in $(ls ./ | grep "^\(.*\)\.[[:digit:]]$") do mv ${i} ./$(echo ${i}|sed -n 's/^\(.*\)\.\([[:digit:]]\)$/\1/p')-$(echo $time) done #对转储的日志文件进行压缩存放,并删除原有转储的日志文件,只保存压缩后的日志文件。以节约存储空间 for i in $(ls ./ | grep "^\(.*\)\-\([[:digit:]-]\+\)$") do tar jcvf ${i}.bz2 ./${i} rm -rf ./${i} done #只保留最近7天的压缩转储日志文件 find /home/wwwlogs/days/* -name "*.bz2" -mtime 7 -type f -exec rm -rf {} \;
四、制定cron计划定时执行这个脚本
这个很简单了,crontab -e
然后输入并保存即可:
#logrotate-weblog 0 2 \* * *| /usr/local/sbin/logrotate-weblog.sh > /dev/null 2>&1
要定时执行任务,必须确保crond服务是自动运行的:
chkconfig crond on
以上只是基于我自己的VPS所做的配置,中间的代码注释未必细致和准确,如果需要进一步了解的话,可以自行google,教程很多。其它发行版的操作也差不多。
作者:小李刀刀
原文链接:在Linux VPS上配置日志自动按日分割压缩处理
裁纸刀下版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。
写的很好,多谢分享,欢迎回访
写的很好,多谢分享,欢迎回访
独立博客很不容易啊,坚持下去,加油。
有空来我的小站回访一下哈。
在代码注释里面给自己的博客打广告的家伙。。。。。。
哪一句代码注释里有广告?
技术控啊~我现在的VPS跑了很多月了,暂时还是妥妥的。已经170天没有重启过了。有空交流交流哈~
莫非你用的是kvmla的VPS?我看到你的博客首页做了链接。Kvmla的VPS我也有的,嘿嘿。
支持下博主 谢谢分享