日志分割文档

修订版本 1.0.1

本文档还在完善中,如果你有什么建议请与Kenny Zhao联系,欢迎技术交流。

本教程所涉及的软件都是GNU软件,请遵守GNU协议。

如果要转载或者转发该文档,请与互联网观察中心或者作者联系。

本文原文地址: http://dev.weamax.net/docs/books/log_process/log_process.html


目录

为什么要分割日志
1. 准备
1.1. 哪些日志需要分割?
2. 日志分割方法
2.1. 几种日志分割方法
2.1.1. 用第三方程序cronolog进行日志分割
2.1.2. 用自写的脚本进行日志分割
2.1.3. 用第三方程序newsyslog进行日志分割
A. 关于本教程
B. 文档修订历史
C. 常用术语
D. 参考书目

插图清单

2.1. Apache Httpd Server

表格清单

1.1. 主流WebServer列表

范例清单

2.1. 用cronolog分割日志
2.2. 计划任务的方式每天生成一个文件并压缩存放
2.3. 用newsyslog分割日志

为什么要分割日志

随着网站的访问越来越大,WebServer产生的日志文件也会越来越大,如果不对日志进行分割,那么只能一次将大的日志(如Apache的日志)整个删除,这样也丢失了很多对网站比较宝贵的信息,因为这些日志可以用来进行访问分析、网络安全监察、网络运行状况监控等,因此管理好这些海量的日志对网站的意义是很大的。

本文将总结一些实用的日志分割方法,希望能够方便Linux/Unix管理员对日志文件进行有效的管理,如果文件过多过大,可以删除一些历史的文件。

第 1 章 准备

1.1. 哪些日志需要分割?

并非所有的日志都需要分割,有一些WebServer,默认产生的日志就是已经经过分割的,不需要做任何额外处理。

表 1.1. 主流WebServer列表

WebServer类型是否需要日志分割
Apache 1.x
Apache 2.x
IIS 4/5/6
Jakarta Tomcat
Resin
IBM Websphere
Bea WebLogic

第 2 章 日志分割方法

2.1. 几种日志分割方法

2.1.1. 用第三方程序cronolog进行日志分割

这种方法最便捷快速,缺点是只支持Apache。

Apache Httpd Server

图 2.1. Apache Httpd Server

例 2.1. 用cronolog分割日志

1. 下载cronolog

官方下载地址: http://cronolog.org/download/cronolog-1.6.2.tar.gz

tar xzvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2

2. 编译

./configure
make
make install

3. 修改Apache的配置文件httpd.conf,加入以下代码

CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/www/access%Y%m%d.log" combined

[注意]注意

如果Apache中有多个虚拟主机,最好每个虚拟主机中放置一个这样的代码,并将日志文件名改成不同的名字

[提示]提示
/var/log/httpd/www/ 可以更改为任何日志输出路径

4. 保存配置后重新启动Apache服务

/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/httpd start

最后生成的文件名如以下格式:

/var/log/httpd/www/access20050918.log

2.1.2. 用自写的脚本进行日志分割

如果因为条件不允许,不能使用cronolog分割,这里提供一种更加简洁的方法,可适合以下系统

  • Linux
  • Unix
  • *BSD

例 2.2. 计划任务的方式每天生成一个文件并压缩存放

[注意]注意
假设:/var/log/httpd/ 为日志存放的路径,access_log 为以前的日志文件名

1. 创建新文件: /var/log/httpd/log-task.cron

文件内容如下

#!/bin/bash

YESTERDAY=`date -d yesterday +%Y%m%d`
/usr/bin/gzip -c /var/log/httpd/access_log>/var/log/httpd/access${YESTERDAY}.log.gz
>/var/log/httpd/access_log

保存退出

2. 修改文件的执行权限并测试脚本

chmod u+x /var/log/httpd/log-task.cron

立即执行一次,测试脚本是否正常工作

[注意]注意
测试之前建议先备份一下日志文件(/var/log/httpd/access_log)

测试:

/var/log/httpd/log-task.cron

检查/var/log/httpd 目录下是否已经生成了日期命名的文件。

3. 将该脚本加入到自动运行任务中

crontab -e

然后将以下的的代码拷贝加入到cron的启动脚本末尾:

1      0      *       *       *       /var/log/httpd/log-task.cron

保存退出。

[提示]提示

(每天凌晨0点1分系统将自动进行日志回滚任务,最终会在/var/log/httpd目录下每天生成一个压缩的日志文件,文件名如 access20051216.log.gz)

2.1.3. 用第三方程序newsyslog进行日志分割

这种方法适用于SQUID等无法使用cronolog的WebServer,缺点是安装比较复杂。

例 2.3. 用newsyslog分割日志

[注意]注意
假设:/usr/local/squid/var/logs/ 为日志存放的路径,access.log 为以前的日志文件名

1. 下载newsyslog

官方下载地址: http://archives.eyrie.org/software/system/newsyslog-1.8.tar.gz

tar xzvf newsyslog-1.8.tar.gz
cd newsyslog-1.8

2. 编译

./configure
make
make install

3. 创建一个新的文件 /usr/local/etc/newsyslog.conf

set squid_logpath = /usr/local/squid/var/logs
set squid_log = /usr/local/squid/var/logs/access.log
set date_squid_log = /usr/local/squid/var/logs/access%Y%M%D.log

SQUID{
        restart: run /usr/local/squid/sbin/squid -k rotate
        log:  SQUID squid_log squid squid 644
        archive: SQUID date_squid_log 0

}

保存退出

[提示]提示
/usr/local/squid/var/logs 可以更改为任何日志输出路径

4. 将该脚本加入到自动运行任务中

crontab -e

然后将以下的的代码拷贝加入到cron的启动脚本末尾:

58      23      *       *       *       /usr/local/sbin/newsyslog

最后生成的文件名如以下格式:

/usr/local/squid/var/logs/access20050918.log

附录 A. 关于本教程

本教程的打包可以在 这里下载。

附录 B. 文档修订历史

修订历史
修订 1.0.02005-12-03 
  • 初始化文档。

修订 1.0.12005-12-18 
  • 改用DocBook重新制作文档。

附录 C. 常用术语

日志

一种记录历史信息的文件,这里说的日志是指WebServer记录访问者信息的文件。

cronolog

一种开源并且被广泛使用的日志分割程序。

GNU

一种在计算机世界里被广泛使用的开发源代码协议,请参考http://www.gnu.org/copyleft/gpl.html

Squid Web Proxy Cache

一种最流行的开源Cache/Proxy软件,请参考http://www.squid-cache.org/

NewSyslog

一种基于Unix的系统 日志管理系统

附录 D. 参考书目

[1] 《DocBook:The Definitive Guide》. O'Reilly & Associates, Inc.. Norman WalshLeonard Muellner.

[2] DTD DocBook XML V4.2. http://www.oasis-open.org/docbook/xml/4.2/.