logrotate管理日志

来源:互联网 发布:weixin linux 编辑:程序博客网 时间:2024/05/06 04:19

logrotate管理日志

2009/6/29 15:45:46
对于Linux 的系统安全来说,日志文件是极其重要的工具。系统管理员可以使用logrotate 程序用来管理系统中的最新的事件,logrotate 还可以用来备份日志文件。 那么日志文件是如何管理及如何实现轮换的呢 ?

Linux 的系统日志一般被记录在/var/log/ 目录下 。日志纪录配置文档为 /etc/syslog.conf .

/var/log/ 目录:


./var/log 记录了几乎所有的log , 但是没有记录ftp log , 我们可以通过 /etc/ftpaccess 设置及修改来达到这个目的 。

boot.log 启动信息

cron 纪录排程执行的log .

/var/log/messages messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。

/var/log/XFree86.0.log 这个日志记录的是 Xfree86 Xwindows 服务器最后一次执行的结果。如果您在启动到图形模式时遇到了问题,一般情况从这个文件中会找到失败的原因。

/var/log/secure 纪录登陆的ip, 时间,登陆方式等 。

 

查看日志的工具

dmesg 使用 dmesg 命令可以快速查看最后一次系统引导的引导日志。通常它的内容会很多,所以您往往会希望将其通过管道传输到一个阅读器。 dmesg | more 上面的命令将以分页的方式显示引导信息。 tail 有时,当某些行为发生时,您会希望密切关注一个日志文件。Tail 命令设计用于显示文本文件的最后几行。使用 -f 开关,当日志增加新的内容时,tail 将继续显示新的输出。 tail -f /var/log/messages

/etc/syslog.conf 日志配置文件内容 :


其中记录的内容,注意 # 后面的解释 :

# Log all kernel messages to the console. (纪录所有的内核信息到字符设备)

# Logging much else clutters up the screen.

#kern.* /dev/console


# Log anything (except mail) of level info or higher. (纪录除了mail信息之外的所有log)

# Don't log private authentication messages!

*.info;mail.none;authpriv.none;cron.none /var/log/messages


# The authpriv file has restricted access. (纪录受到限制的访问)

authpriv.* /var/log/secure


# Log all the mail messages in one place.

mail.* /var/log/maillog


# Log cron stuff (纪录cron排程执行的log)

cron.* /var/log/cron


# Everybody gets emergency messages

*.emerg *


# Save news errors of level crit and higher in a special file. (在一个专门的文件中保存)

uucp,news.crit /var/log/spooler


# Save boot messages also to boot.log (记录启动信息)

local7.* /var/log/boot.log

 

 

二. Linux 的系统日志一般内容 。

日志文件记录例子(以messages为例):

以下log messages 是从目前运行的SFC系统中摘录下来的 messages, messages.1, messages.2 , messages.3 , messages.4 ,纪录所有Linux系统相关变化及状态,用户登入信息等 。


[root@dmdii-node2 log]# pwd

/var/log

[root@dmdii-node2 log]#

[root@dmdii-node2 log]# vi messages.1


messages.1 文件内容

Aug 7 04:03:02 dmdii-node1 syslogd 1.4.1: restart. (最开始的一句)

......

Aug 14 04:03:02 dmdii-node1 cups: cupsd startup succeeded (最后的一句)

 

messages.2 文件内容

Jul 31 04:03:02 dmdii-node1 syslogd 1.4.1: restart. (最开始的一句)


.......

Aug 7 04:03:02 dmdii-node1 cups: cupsd startup succeeded (最后的一句)

 

messages.3 文件内容

Jul 24 04:03:02 dmdii-node1 syslogd 1.4.1: restart. (最开始的一句)

.......

Jul 31 04:03:02 dmdii-node1 cups: cupsd startup succeeded (最后的一句)

 

messages.4文件内容

Jul 17 04:03:02 dmdii-node1 syslogd 1.4.1: restart. (最开始的一句)

.......

Jul 24 04:03:02 dmdii-node1 cups: cupsd startup succeeded (最后的一句)


messages 文件内容

Aug 14 04:03:02 dmdii-node1 syslogd 1.4.1: restart.

Aug 15 08:01:42 dmdii-node1 login(pam_unix)[7840]: session opened for user oracle by (uid=0)

Aug 15 08:01:42 dmdii-node1 -- oracle[7840]: LOGIN ON pts/0 BY oracle FROM 10.134.48.86

Aug 15 08:17:06 dmdii-node1 su(pam_unix)[8024]: session opened for user root by oracle(uid=500)

Aug 15 08:18:42 dmdii-node1 login(pam_unix)[8086]: session opened for user oracle by (uid=0)


大家通过观察上面每个日志最开始的一句和最后的一句的时间差, 注意到日志纪录是轮换的,而且是有规律的轮换 (这里是weekly轮换,即达到一周时间的messages文件中的log会转储到messges.1 或其他messages.2,…. 等文件中) 。 syslogd 1.4.1: restart 表示重新初始化系统日志守护程序 syslogd 。

 

三. Logrotate 的配置 。

Logrotate顾名思义就是 log rotate , 即日志的轮换 。 Logrotate是Linux系统自身带的一个日志轮循程序,它的执行程序所在的目录是/usr/sbin/logrotate ,是专门对各种系统日志(syslogd,mail)进行轮循的程序。该程序是由运行程序的服务crond来每天凌晨4:02运行的(可以回过头看看上面二中的一些日志的开始发生时间都是04:03, 抱歉,这里我们在深圳的测试server比实际时间早了点,^_^), 可以在/etc/cron.daily目录下可以看到logrotate文件

Logrotate 用来将旧的日志文件删除,并创建新的日志文件, 叫做”转储” 。

我们可以根据日志文件大小,也可以根据天数来转储(比如上面的例子是一周转储一次) 。 logrotate 程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 。


logrotate 的配置文件是 /etc/logrotate.conf。主要参数如下表:参数 功能
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).

 

 


四. 默认Logrotate 的配置 。
logrotate 缺省的配置文件 /etc/logrotate.conf。
Red Hat Linux 缺省安装的文件内容是 :

 

缺省的配置一般放在logrotate.conf 文件的最开始处,影响整个系统。在本例中就是前面12行。

weekly 指定所有的日志文件每周转储一次。 rotate 4 指定转储文件的保留 4份。
errors root 指定错误信息发送给root。
create 指定 logrotate 自动建立新的日志文件,新的日志文件具有和原来的文件一样的权限。
#compress 指定不压缩转储文件,如果需要压缩,去掉注释就可以了。

Include /etc/logrotate.d 告诉 logrotate 读入存放在/etc/logrotate.d 目录中的日志转储参数,当系统中安装了RPM 软件包时,使用include 选项十分有用。RPM 软件包的日志转储参数一般存放在/etc/logrotate.d 目录。 include 选项十分重要,一些应用把日志转储参数存放在 /etc/logrotate.d 。典型的应用有:apache, linuxconf, samba, cron 以及syslog。 这样,系统管理员只要管理一个 /etc/logrotate.conf 文件就可以了。

 

 


五. Logrotate 的运行 。


1. 判断系统的日志文件,建立转储计划以及参数,通过cron daemon 运行下面的代码是 Red Hat Linux 缺省的crontab 来每天运行logrotate。

#/etc/cron.daily/logrotate (即/etc/cron.daily/logrotate 每天运行内容如下)

#! /bin/sh

/usr/sbin/logrotate /etc/logrotate.conf