一
通过
logger
命令记录日志
logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。
日志的级别
日志的级别分为七级,从紧急程度由高到底:
emerg 系统已经不可用,级别为紧急
alert 警报,需要立即处理和解决
crit 既将发生,得需要预防。事件就要发生
warnig 警告
err 错误信息,普通的错误信息
notice 提醒信息,很重要的信息
info 通知信息,属于一般信息
debug 这是调试类信息
alert 警报,需要立即处理和解决
crit 既将发生,得需要预防。事件就要发生
warnig 警告
err 错误信息,普通的错误信息
notice 提醒信息,很重要的信息
info 通知信息,属于一般信息
debug 这是调试类信息
1。
解决方法:
编辑syslog.conf,
#vi /etc/syslog.conf
在第一行加入local3.none,使得设备local3的日志不记录在messages文件里,
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages
将设备local3的所有级别的信息都记录在userlog文件里,
#user log
local3.* /var/log/userlog
重新加载syslog服务的配置文件,
[root@KEVEIN Slides]# service syslog reload
Reloading syslogd... [ OK ]
Reloading klogd... [ OK ]
2
。测试
:
测试机器的环境:
OS:Red Hat Enterprise Linux 5 update 3
Network: 192.168.0.100/24 Gateway:192.168.0.1
[root@KEVEIN Slides]# ping 192.168.0.1 | logger -it logger_test -p local3.notice&
[2] 22484
命令logger -it logger_test -p local3.notice中的参数含义:
-i 在每行都记录进程ID
-t logger_test 每行记录都加上“logger_test”这个标签
-p local3.notice 设置记录的设备和级别
[root@KEVEIN Slides]# tail -f /var/log/userlog
Oct 6 12:48:43 kevein logger_test[22484]: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
Oct 6 12:48:43 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=1 ttl=253 time=49.7 ms
Oct 6 12:48:44 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=2 ttl=253 time=68.4 ms
Oct 6 12:48:45 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=3 ttl=253 time=315 ms
Oct 6 12:48:46 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=4 ttl=253 time=279 ms
Oct 6 12:48:47 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=5 ttl=253 time=347 ms
Oct 6 12:48:49 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=6 ttl=253 time=701 ms
Oct 6 12:48:50 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=7 ttl=253 time=591 ms
Oct 6 12:48:51 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=8 ttl=253 time=592 ms
Oct 6 12:48:52 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=9 ttl=253 time=611 ms
Oct 6 12:48:53 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=10 ttl=253 time=931 ms
ping命令的输出成功输出到/var/log/userlog文件中,实验成功。
二
日志回卷
系统时时刻刻都在产生日志,如果不及时清理,很快就会灌满硬盘,但如果要手工清理,又很麻烦。这种情况下,logrotate 这个程序很好的完成这个任务。
logrotate 用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过一个叫做 crond的守护进程来执行,logrotate 还可以用于压缩日志文件,以及发送日志到指定的E-mail 。
logrotate 的配置文件是 /etc/logrotate.conf。主要参数如下表:
参数 功能
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress
参数 功能
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
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory
转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript
在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript
postrotate/endscript
在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count
指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list
tabootext [+] list
让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm- orig, .rpmsave, v, 和 ~
size size
size size
当日志文件到达指定的大小时才转储,Size 可以指定bytes (缺省)以及KB (sizek)或者MB (sizem).
系统对 logrotate
的执行和操作:
在/etc/cron.daily/路径下,有一个logrotate 的shell脚本,所以cron程序会每天调用一次logrotate程序,然后logrotate程序回去检查日志文件是否符合回滚条件,并执行相应动作。
执行操作:/usr/sbin/logrotate /etc/cron.daily/logrotate.conf;
在/etc/logrotate.conf文件中,有如下选项:
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
这个选项说明在执行logrotate程序时,同时执行/etc/logrotated目录下的所有脚本。
执行动作示例:每月清除/var/log/wtmp目录中的相关内容:
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
实验:
1.
环境: Red Hat Enterprise Linux 5.3
实验描述:
(1)用Cron执行logrotate命令,每分钟检查一次目标日志文件是否满足回卷限制。(2)配置/etc/logrotate.conf 或者建立一个自定义的/etc/logrotate.d /userlog
(3)编辑/etc/syslog.conf 使得记录的日志信息可以写入到/var/log/userlog中。
[root@KEVEIN ~]# crontab -e
* * * * * /usr/sbin/logrotate /etc/logrotate.conf //写入这条命令
[root@KEVEIN ~]# vi /etc/logrotate.conf
***
省略***
/var/log/userlog {
daily
size 10k ////
在这里单位大小写敏感应,应为 k or M
create 0664 root root
rotate 3
prerotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
在这里一定要加prerotate这段脚本,这样可以使syslog程序重新读取配置文件,这样做的作用是让syslog程序释放对userlog文件持有的文件描述符,否则即使日志文件
回滚,syslog也不会向新产生的日志文件写数据。举个例子,如果不加这段脚本,即使logrotate程序将userlog文件截断并重命名为userlog.1,但是syslog程序仍然会向原userlog文件即userlog.1中写入数据。
[root@localhost ~]# vi /etc/syslog.conf
*****
省略*****
*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages
#user log
local3.* /var/log/userlog
重新加载配置文件
[root@KEVEIN ~]# service syslog reload
Reloading syslogd... [ OK ]
Reloading klogd... [ OK ]
重启crond服务
[root@KEVEIN ~]# service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
测试:
通过logger命令向userlog中写入数据,测试logrotate的功能
[root@KEVEIN ~]# ping 192.168.1.1 | logger -it logger_test -p local3.notice&
[1] 5144
[root@KEVEIN ~]# cd /var/log/
[root@KEVEIN log]# ll -h userlog*
-rw-r--r-- 1 root root 1.6K Oct 11 19:59 userlog
[root@KEVEIN log]# ll -h userlog*
-rw-r--r-- 1 root root 6.1K Oct 11 20:00 userlog
//虽然执行过logrotate,但是没有达到限制值
[root@KEVEIN log]# ll -h userlog*
-rw-rw-r-- 1 root root 0 Oct 11 20:08 userlog
-rw-rw-r-- 1 root root 15K Oct 11 20:08 userlog.1
-rw-r--r-- 1 root root 18K Oct 11 20:05 userlog.2
需要注意的是,当达到限制条件时,logrotate程序会将目标日志文件userlog截断,并命名为userlog.1,将原userlog.1改名为userlog.2,以此类推,syslog程序始终向userlog文件中写数据。