服务器运维:怎样优雅地切割log
好吧,我必须要承认,我是一个标题党来的。本文英文名称意思比较准确。什么?你没看到英文名称在哪?不是写给你看的,你当然看不到。
在Web开发过程中,你总是因为各种理由,需要跟服务器打交道,因为各种理由需要承担一点点运维工作,哪怕你需要运维自己的blog,比如用Linode这种东西。那么服务器运行,就少不了log,log不少,就不得不翻滚,就是rotate,不知道中文是啥……
为什么要rotate呢,理由是比较简单的,比如在32位系统里,默认文件写到2G大小的时候,就会导致进程core掉,引发很多神奇的问题和bug,你也可以用一些补丁和编程技巧突破2G这个限制,但是你真的需要一个超过2G的log么?回溯总归不方便吧,按日期检索总归不方便吧,反正理由很多了,就是一定要rotate的。
怎么rotate呢,这个方法可就多了。最傻逼的一种,每次想起来了,ssh到服务器,将所有log都mv一遍,啥?mv后进程挂了,重启不就行了。太多了?mv ./* 嘛,啥?机器挂了,谁让你选这么煞笔的方式啊……
然后稍微优雅点的,会写个shell脚本。以前我所在的团队,就有人这么干,写个shell脚本,然后放个cron,就比较省心了。那么shell脚本怎么rotate呢,还不是mv么……mv有问题的,因为有些log文件的句柄开着的,突然mv掉了,就好像行驶中的汽车轮子突然掉了,你说啥感觉呢……比较温柔的是 echo ” > xxxx.log,我管这个叫写空,先cp,然后写空,会比较温柔。
然后说到比较干货的地方了。就是有个东西叫logrotate,以前我根本不知道,我以为用shell脚本就高大上了,草。原来有专门的程序,好的系统,就是从中能学到很多井井有条可以喝咖啡的技巧,比如debian就是这样的系统。那些脏呼呼的服务器程序,脏兮兮的配置文件,放在随便哪个脏兮兮的目录都是可以的,垃圾的文章会告诉你怎么配置就行了。然后你打开debian的时候,你会发现这些配置文件都这么整齐,都这么自动,可以分头安装,还能安全卸载,后装的竟然能跟先装好的完美契合,简直绝了。
跑题了。这个logrotate,就是专门切割log的,通过一个配置文件来控制切割频率,切割大小,是否压缩,多少天删除等等,什么都想好了,写什么shell脚本啊,简直浪费时间。
按照一般的教程,如果你配置好logrotate,那也就太平了,一天切一次,30天循环。草,这也会出问题的,比如你的服务器访问量很恐怖,每天产生10G的access_log的话,你就知道了,切割的时候,切完了压缩的时候,你会发现(没有报警系统的话,你还发现不了)CPU被占满了,这意味访问受阻么?也不一定,只是一两个核被占满了而已。当然,每个核其实是不一样的,改天说。所以某几个核占满了,也是不行的。
写到这里我就写不动了,累啊,直接干货吧。
准备log方案的时候:
1. log存在哪个磁盘上?如果分区了的话,要选最大的那个区
2. log每天产生多少?有个估算没有,没有的话,就观察出来
3. 在服务器本地磁盘能暂存多少天?压缩后能暂存多少天?
4. 压缩很耗费CPU时间的,想好log是否压缩?
5. log是否很重要?那就需要一个大存储专门存放log的,不然rotate没几天,前面的就丢了;
6. 如果单日切割太大了,可以按照文件大小切割的,或者按照小时切割;
7. 怕耗CPU可以先不压缩的;
8. 想压缩的话,可以用taskset和nice指令的,让CPU不要被gzip跑满;
建议继续学习:
- server日志的路径分析 (阅读:10205)
- AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用(含6.9中文定义补丁) (阅读:8955)
- 利用脚本分析日志并利用snmp自定义OID,再通过cacti画图 (阅读:8752)
- tomcat catalina.out日志切割每天生成一个文件 (阅读:8138)
- 分布式日志系统scribe使用手记 (阅读:8097)
- AWStats是一个基于Perl的WEB日志分析工具。 (阅读:6163)
- 使用nginx记日志 (阅读:5179)
- 大于2GB的Listener.log和运行超过198天的主机上的Oracle实例 (阅读:4973)
- 在 shell 脚本里打日志 (阅读:4840)
- Sentry: 错误日志集中管理 (阅读:4416)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Charles 来源: Becomin' Charles
- 标签: log 日志
- 发布时间:2014-11-27 12:59:32
- [72] Twitter/微博客的学习摘要
- [64] find命令的一点注意事项
- [63] Go Reflect 性能
- [62] android 开发入门
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 如何拿下简短的域名
- [60] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [57] 【社会化设计】自我(self)部分――欢迎区