SYSLOGD & LOGROTATE
1什么是SYSLOGD
SYSLOGD可以简单地被称为记录系统活动的一个daemons。比如可以记录谁,在什么时间,在哪里,做了什么事情;也可以记录您的系统曾经发生过什么事情,比如什么时候重新引导过、软硬件的错误信息等;当然也记录着您系统上运行着的服务的信息。
SYSLOGD记录的日志一般在/var/log/下,当然也有存储在另外的服务器上的。因为SYSLOGD记录的信息实在是太重要了,所以还要涉及日志安全的问题。
一般系统中日志信息:
/var/log/secure:记录系统的安全信息,比如SSH、FTP、POP3等;
/var/log/wtmp:记录谁曾经登陆过系统,由于本日志被编码过,只能用last命令查看;
/var/log/boot.log:顾名思义,记录开启或者关闭系统及武夫的信息;
/var/log/message:系统发生的错误信息都会记录在这个日志中;
/var/log/mail:略;
/var/log/httpd/:略;
/var/log/mysqld.d等: 记录的就是这些服务的日志。
2配置SYSLOGD的说明
2.1 启动syslogd服务
首先,您要确定您的系统是否运行着这个服务。
service syslog status
ps -aux|grep syslog
如果您的系统中并没有运行这个服务,您可以打开它。方法很多啦。
service syslog start
如果您希望系统在下次启动的时候就运行syslogd,您可以在setup中的服务中添加。如果确定您的默认引导级别,比如3,那么您也可以在/etc/rc.d/rc3.d/下添加以S开头的软连接。或者,您使用chkconfig 2345 syslog on来添加。
2.2 SYSLOGD服务的配置文件
syslogd的配置文件一般在/etc/syslog.conf中。这个文件依然遵循你所见过的其它配置文件的规则,比如 # 是注释。您可以看看您的syslogd都在帮助您记录着什么。这是我的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.
# 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.* /var/log/cron
2.3 SYSLOG.CONF的配置规则
服务名称.信息等级 存放或者显示地点
服务名称:mail http at cron kern 等等。
信息等级:1)info:一些提示信息资料;2)notice:需要您注意的信息;3)warn:警告信息;4)error:错误信息。您需要仔细检查发生错误的原因了;5)crit:很严重的错误,到达临界点了;6)alert:警告,是否想起了“Red Alert”?不过,在这里这可是相当严重的错误啊;7)emerg:系统混乱,重做吧;
存放或者显示地点:1)日志的绝对路径:比如/var/log;2)您的一个用户;3)网络上的主机:log.company.com;4)打印机:/dev/lp0
2.4 应用举例
mail.info /var/log/maillog
大于等于info的信息都会写到/var/log/maillog中。、
mail.*;cron.* /var/log/mailcron mail.=warn;cron.=warn /var/log/mailcronwarn
等级为warn的信息,写进/var/log/mailcronwarn,其它的信息写进/var/log/mailcron
*.*;mail.none;cron.none /var/log/message
记录除去mail和cron之外的所有服务的所有信息。
3 SYSLOGD和系统中服务配置中日志的关系
上面已经说了,syslogd是为系统提供日志服务的。那么,我们在配置文件中定义的日志信息和syslog.conf有什么关系呢?
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
这段话是什么意思呢?我认为是在/var/log/messages中记录除去mail、authpriv和cron之外的所有系统信息。也就是说它会记录您自己的http信息。是否这样呢?我自己安装了一个httpd,并且指定日志到另外一个文件,比如/usr/website/log/httplog。我虽然可以在/usr/website/log/httpdlog中看到我的httpd的日志信息,但是我执行
# cat /var/log/messages|grep HTTP
却得到空。syslogd不会记录你没有要求它记录的信息,虽然有上面的*.info但是这个*是不包括你自己的服务的。
4什么是LOGROTATE
LOGROTATE是对日志文件做轮换。就是把现在的log命名为log.1,然后继续写log。如果存在log.1就命名log.1为log.2然后命名log为log.1,依此类推,但并非没有尽头。这个尽头就是您在logrotate的配置文件中的定义,我的系统默认的是到4。那么对log.4做什么操作呢?删除。
syslogd是daemons方式运行的;
logrotate是按计划运行的。
5配置LOGROTATE的说明
5.1 LOGROTATE配置文件的位置
1)/etc/logrotate.conf
2)/etc/logrotate.d
/etc/logrotate.conf是主要配置文件,/etc/logrotate.d中的文件会被/etc/logrotate.conf读取。如果您在/etc/logrotate.d中的配置文件没有规定具体的参数,则这些参数由/etc/logrotate来决定。
5.2 LOGROTATE的配置规则
logrotate的主要配置是/etc/logrotate.conf,而/etc/logrotate.d中的文件是对/etc/logrotate.conf的补充。或者可以看作为了不使/etc/logrotate.conf过大而设置。
5.2.1 配置参数说明
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);
5.2.2 LOGROTATE的写法
把logfile(s)写在前面,包含文件的绝对路径,可以使用空白字元分隔多个log,也可以使用统配符置换;
用 { } 包含所有设定,一般包括:
prerotate 启动 logrotate 之前执行的命令,例:/usr/bin/charrt -a /var/log/logfile;
postrotate 执行了 logrotate 之后执行的命令,例:/usr/bin/charrt +a /var/log/logfile;
prerotate与postrotate之间的动作有:
1)weeky:每个星期执行一次
2)rotate 4:保留四个日志
3)create:logratoe之后再建立日志
4)compress:rotate之后的日志是否压缩
5)include /etc/logrotate.d:包含/etc/logrotate.d目录下面的轮换设置
如果在/etc/logrotate.d下写了自己的轮换设置可以使用命令(logrotate -f yourfile)来测试。
为指定的文件配置转储参数:
经常需要为指定文件配置参数,一个常见的例子就是每月转储/var/log/wtmp。为特定文件而使用的参数格式是:
# 注释
/full/path/to/file
{
option(s)
}
下面的例子就是每月转储 /var/log/wtmp 一次:
#Use logrotate to rotate wtmp
/var/log/wtmp
{
monthly
rotate 1
}
5.2.3 其他因该注意的问题
尽管花括号的开头可以和其他文本放在同一行上,但是结尾的花括号必须单独成行。
使用 prerotate 和 postrotate 选项
下面的例子是典型的脚本/etc/logrotate.d/syslog,这个脚本只是对/var/log/messages有效。
/var/log/messages
{
Prerotate
/usr/bin/chattr -a /var/log/messages
Endscript
Postrotate
/usr/bin/kill -HUP syslogd
/usr/bin/chattr +a /var/log/messages
Endscript
}
第一行指定脚本对 /var/log messages 有效;prerotate 命令指定转储以前的动作;/usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”属性;endscript 结束;postrotate 指定转储后的动作;/usr/bin/killall -HUP syslogd 用来重新初始化系统日志守护程序 syslogd;
/usr/bin/chattr +a /var/log/messages 重新为 /var/log/messages 文件指定“只追加”属性,这样防治程序员或用户覆盖此文件;最后的 endscript 用于结束 postrotate 部分的脚本;
5.2.4 /var/log/messages不能产生的原因:
这种情况很少见,但是如果你把/etc/services中的 514/UDP 端口关掉的话,这个文件就不能产生了。
5.3 LOGROTATE的运行步骤
LOGROTATE的运行分为三步:
1)判断系统的日志文件;
2)建立转储计划以及参数;
3)通过cron运行下面的代码是 Red Hat Linux 缺省的crontab 来每天运行logrotate。
#/etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
yashu 于 2011-06-02 08:38:12发表:
好长