资讯专栏INFORMATION COLUMN

做一个apache日志回滚和分割的简单配置

AaronYuan / 1271人阅读

摘要:介绍默认日志默认不分割的,长时间不清理日志就会占满磁盘空间,而且一个整文件既不利于管理也不利于分析统计。通常与服务器一起使用,例如用来安全地对日志文件按日期月或其它特定的区间进行分割。

介绍

默认apache日志默认不分割的,长时间不清理apache日志就会占满磁盘空间,而且一个整文件既不利于管理也不利于分析统计。(其他日志也如此)

什么cronolog?

cronolog是一个简单的过滤程序,它从标准输入设备读入日志记录,并把这些记录写入到输出文件集,输出文件的名字由一个文件名模板和当前的日期时间组成。cronolog通常与web服务器一起使用,例如apache,用来安全地对日志文件按日期、月或其它特定的区间进行分割。当然也可以配置来分割其他服务的日志,如nginx,lighttpd。

详情参考 man cronolog,这里用apache举例。

安装cronolog

</>复制代码

  1. yum -y install cronolog

</>复制代码

  1. cronolog官网已经不用了,但是centos的yum已经包含了该软件,所以可以直接下载

配置

apache的虚拟主机的日志的cronolog配置

cat /app/server/httpd/conf/vhosts/test.com.conf

</>复制代码

  1. DocumentRoot /app/www/test.com
  2. ServerName test.com
  3. Options -Indexes FollowSymLinks
  4. DirectoryIndex index.php index.html
  5. AllowOverride all
  6. Order allow,deny
  7. Allow from all
  8. ErrorLog "|/usr/sbin/cronolog /app/server/httpd/logs/test.com-error_%Y%m%d.log"
  9. CustomLog "|/usr/sbin/cronolog /app/server/httpd/logs/test.com_%Y%m%d.log" combined

</>复制代码

  1. 在虚拟主机基础配置上修改errorlog和customlog的配置而已,其他配置只是参考,无关cronolog的。

检查

配置完成后检查配置文件是否正常

</>复制代码

  1. /app/server/httpd/bin/apachectl -t
  2. Syntax OK

配置完成后需要完全关闭apache所有进程后再启动

</>复制代码

  1. service httpd stop
  2. ps -ef|grep httpd
  3. service httpd start

</>复制代码

  1. 其实所有的系统操作都应该是谨慎而彻底的,确认上一步进行无误后方可进行下一步操作。

检查cronolog运行情况

</>复制代码

  1. ps -ef|grep cronolog
  2. root 1006 1 0 Feb04 ?00:00:01 crond
  3. root 22511 5290 0 15:51 ?00:00:00 /usr/sbin/cronolog /app/server/httpd/logs/wifi-www.luckygz.com_1234-error_%Y%m%d.log
  4. root 22512 5290 0 15:51 ?00:00:00 /usr/sbin/cronolog /app/server/httpd/logs/test.com-error_%Y%m%d.log
  5. root 22513 5290 0 15:51 ?00:00:00 /usr/sbin/cronolog /app/server/httpd/logs/test.com_%Y%m%d.log

检查日志是否开始分割

</>复制代码

  1. ls -lh /app/server/httpd/logs/|grep "test.com"

</>复制代码

  1. 1.正常情况下日志会按照配置进行分割,例如我这里是test.com_20150215.log

  2. 2.重启apache后,要有web请求访问网站,新的日志才会生成,不然的话是看不到效果的,虽然配置已经生效
  3. 3.原来的test.com.log还是会存在,你可以保留或者删掉

至此完成基本配置,基本实现需求。

more

但这里还想做多一步,就是日志分割了也依然比较大,因为纯文本很大,所以需要做定期压缩

</>复制代码

  1. #!/bin/bash
  2. log_dir="/app/server/httpd/logs"
  3. days="5"
  4. log_bak_dir="/app/server/httpd/logs/bak"
  5. find ${log_dir} -name "*.log" -type f -mtime +${days}|grep -v "bak" |xargs -I "{}" mv "{}" ${log_bak_dir}
  6. cd ${log_bak_dir}
  7. for i in `ls -1 ${log_bak_dir}`
  8. do
  9. gzip $i
  10. done

</>复制代码

  1. 脚本使用了find和一个for循环来完成,最终的效果就自动将匹配条件的日志文件转移到指定目录,然后进行压缩。


BTW顺带说说

apache默认日志的cronolog配置

cat /app/server/httpd/conf/httpd.conf

</>复制代码

  1. ErrorLog "|/usr/sbin/cronolog /app/server/httpd/logs/error_log"
  2. CustomLog "|/usr/sbin/cronolog /app/server/httpd/logs/access_log" common

</>复制代码

  1. 默认的httpd.conf全局日志error_logaccess_log是不可以直接使用相对路径来进行分割的,所以需要写全路径,如上。


科普时间

cronolog的配置非常简单,可以在apache里直接调用,使用方法也很简便,直接写时间就可以指定时间分割,下面做了一些解释和例子参考。

</>复制代码

  1. cronolog is intended to be used in conjunction with a Web server, such as Apache to split the access log into daily or monthly logs. For example the Apache configuration directives:
  2. TransferLog "|/usr/sbin/cronolog /www/logs/%Y/%m/%d/access.log"
  3. ErrorLog "|/usr/sbin/cronolog /www/logs/%Y/%m/%d/errors.log"
  4. would instruct Apache to pipe its access and error log messages into separate copies of cronolog, which would create new log files each day in a directory hierarchy structured by date, i.e. on 31 December
  5. 1996 messages would be written to
  6. /www/logs/1996/12/31/access.log
  7. /www/logs/1996/12/31/errors.log
  8. after midnight the files
  9. /www/logs/1997/01/01/access.log
  10. /www/logs/1997/01/01/errors.log

而时间的格式是使用strftime function,不过根据介绍,基本能看懂,%是说明符,H代表0-23小时,24小时制,如此类推

</>复制代码

  1. Template format
  2. Each character in the template represents a character in the expanded filename, except for date and time format specifiers, which are replaced by their expansion. Format specifiers consist of a ‘%’ fol-
  3. lowed by one of the following characters:
  4. % a literal % character
  5. n a new-line character
  6. t a horizontal tab character
  7. Time fields:
  8. H hour (00..23)
  9. I hour (01..12)
  10. p the locale’s AM or PM indicator
  11. M minute (00..59)
  12. S second (00..61, which allows for leap seconds)
  13. X the locales time representation (e.g.: "15:12:47")
  14. Z time zone (e.g. GMT), or nothing if the time zone cannot be determined
  15. Date fields:
  16. a the locales abbreviated weekday name (e.g.: Sun..Sat)
  17. A the locale’s full weekday name (e.g.: Sunday .. Saturday)
  18. b the locale’s abbreviated month name (e.g.: Jan .. Dec)
  19. B the locale’s full month name, (e.g.: January .. December)
  20. c the locale’s date and time (e.g.: "Sun Dec 15 14:12:47 GMT 1996")
  21. d day of month (01 .. 31)
  22. j day of year (001 .. 366)
  23. m month (01 .. 12)
  24. U week of the year with Sunday as first day of week (00..53, where week 1 is the week containing the first Sunday of the year)
  25. W week of the year with Monday as first day of week (00..53, where week 1 is the week containing the first Monday of the year)
  26. w day of week (0 .. 6, where 0 corresponds to Sunday)
  27. x locale’s date representation (e.g. today in April in Britain: "13/04/97")
  28. y year without the century (00 .. 99)
  29. Y year with the century (1970 .. 2038)
  30. Other specifiers may be available depending on the C library’s implementation of the strftime function.

原文链接:http://www.godblessyuan.com/2015/02/15/apache_cronolog_log_split_rollback/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/35744.html

相关文章

  • 数人云|当K8S遇上微服务-京东金融PaaS平台思考与实践

    摘要:平台上的微服务架构应用再来看一下我眼中的基于当前最流行的微服务架构的设计是什么样的,即我们平台上要运行的典型应用是什么样的。 showImg(https://segmentfault.com/img/remote/1460000010900878); 8月19日的数人云Container Meetup上,张龙老师做了《基于Kubernetes的PaaS平台的设计和思考》的精彩分享,分别...

    Imfan 评论0 收藏0
  • 将 Node.js 应用从 PaaS 平台移动到 Kubernetes Tutorial

    摘要:目前正在运行的应用程序。内置非配置负载均衡器如何设置运行的集群在这里你有几个选项。它跟其它的谷歌云组件也都整合得很好,比如负载均衡器和磁盘。它会告诉负载均衡器,流量可以被重新传到特定的。元信息和谷歌云会以正确的方式展现出来。 Kubernetes实践案例分享|在这次的 RisingStack 案例分享中,我们可以在 Kubernetes Tutorial 中学习到如何从 PaaS 供应...

    skinner 评论0 收藏0
  • Mysql-InnoDB 事物学习

    摘要:幻读在一个事务中,同一个范围内的记录被读取时,其他事务向这个范围添加了新的记录。分布式事物提供访问事物资源的方法协调参与全局事物中的各个事物定义事物的便捷,指定全局事物中的操作 事物基本概念 事物的特性(ACID) 原子性 atomicity 一致性 consistency 隔离性 isolation 持久性 durability 事物的类型 扁平事物 带有保存点的扁平事物 链事物 ...

    voyagelab 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<