几个登录档
* /var/log/secure:记录登入系统存取数据的档案,例如 pop3, ssh, telnet, ftp 等都会记录在此档案中;
* /var/log/wtmp:记录登入者的讯息数据,由于本档案已经被编码过,所以必须使用 last 这个指令来取出档案的内容;
* /var/log/messages:这个档案相当的重要,几乎系统发生的错误讯息(或者是重要的信息)都会记录在这个档案中;
* /var/log/boot.log:记录开机或者是一些服务启动的时候,所显示的启动或关闭讯息;
* /var/log/maillog 或 /var/log/mail/*:纪录邮件存取或往来( sendmail 与 pop3 )的使用者记录;
* /var/log/cron:这个是用来记录 crontab 这个例行性服务的内容的!
* /var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log: 分别是几个不同的网络服务的记录文件。
Linux 登录档的规划: syslogd服务, logrotate
* syslogd:进行系统或者是网络服务的登录文件记录工作;
* logrotate:将旧的数据更名,并且建立新的登录档,以保持登录档的『新鲜』,并视设定将最旧的登录档删除。
-------------------------------------------------------------------
syslogd:
而通常syslog提供的记录参数主要有:
* 事件发生时间;
* 主机名称;
* 启动此事件的服务名称(例如 httpd, samba...)
* 讯息数据内容
其实预设的 syslogd 程序的参数档案就是 /etc/syslog.conf 这个档案内容啦!这个档案的内容可以规定『什么服务需要被记录、该服务被纪录的讯息等级如何?』。基本上,可以使用底下的句子语法来说明:
服务名称.讯息等级 存放或显示地点
* 服务名称:例如 mail, http, news, cron, at 等等的服务名称;
* 讯息等级:总共分成下列几种等级:
info : 提示一些讯息数据;
notice : 注意!需要比较留意的讯息;
waring 或 warn : 警示的讯息,以上三个讯息都还是没有错误的情况,虽然是需要留意,但是还没有到错误的情况;
err 或 error : 呀!错误讯息出现了!该要检验错误的问题发生原因了;
crit : 临界点了!再不处理可就伤脑筋了!
alert : 错误讯息一再地警告警告!你将要完蛋了!
emerg 或 panic : 阿!系统已经进入混乱的阶段!真的是完蛋了~~
特殊等级:例如 debug (显示较多的信息!)及 none (不要记录该服务的内容!)等!
* 存放或显示地点:通常我们使用的都是记录的档案啦!但是也可以输出到装置呦!例如打印机之类的!
档案的绝对路径:通常就是放在 /var/log 里头的档案啦!
打印机或其它:例如 /dev/lp0 这个打印机装置
使用者名称:显示给使用者啰!
远程主机:例如 @test.adsldns.org
例题一:如果我要将我的mail相关的数据给他写入/var/log/maillog当中,那么在/etc/syslog.conf就要写成:
mail.info /var/log/maillog
注意到上面喔,当我们的等级使用info时,那么『任何大于info等级(含info这个等级)之上的讯息,都会被写入到后面接的档案之中!』这样可以了解吗?也就是说,我们可以将所有mail的登录信息都纪录在/var/log/maillog里面的意思啦!
例题二:我要将新闻群组数据(news)及例行性命令的信息(cron)都写入到一个称为/var/log/cronnews的档案中,但是这两个程序的警告讯息记录在/var/log/cronnews.warn该如何设定我的档案呢?很简单啦!既然是两个程序,那么只好以分号来隔开了,此外,由于第二个指定档案中,我只要记录警告讯息,因此设定上需要指定『=』这个符号,所以就成为了:
news.*;cron.* /var/log/cronnews
news.=warn;cron.=warn /var/log/cronnews.warn
上面那个『=』就是在指定等级的意思啦!由于指定了等级,因此,只有这个等级的讯息才会被纪录在这个档案里面呢!
例题三:我的messages这个档案需要记录所有的信息,但是就是不想要记录cron,mail及news的信息,那么应该怎么写才好?可以有两种写法,分别是:
*.*;news,cron,mail.none /var/log/messages
或
*.*;news.none;cron.none;mail.none /var/log/messages
使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话,那么就需要将服务与等级都写上去啰!这样会设定了吧!
了解语法之后,我们来看一看在尚未开启网络服务的情况下,我们的 syslog 有哪些系统服务已经在纪录了呢?!那就是瞧一瞧 /etc/syslog.conf 这个档案的预设内容。
------------------------------------------------------------------
logrotate:
* /etc/logrotate.conf
* /etc/logrotate.d
我们来看一下预设的 logrotate.conf 的内容吧!
# 底下的设定是 logrotate 的预设设定值,如果个别的档案设定了其它的参数,
# 那么将以个别的档案设定为主,若该档案没有设定到的参数,
# 则以这个档案的内容为默认值!
# 每个礼拜进行一次 rotate 的工作
weekly
# 保留几个登录档呢?预设是保留四个!
rotate 4
# 是否建立新的登录文件来记录呢?因为我们要继续记录,所以当然是建立啰!
create
# rotate之后的登录档,要不要压缩,通常是不要压缩啦,
# 但是如果你的系统很忙碌,表示你的登录档很庞大的时候,
# 那么最好就是给他压缩一下比较不会占空间!
Compress
# 将底下这个目录中的所有档案都读进来执行 rotate 的工作!
include /etc/logrotate.d
# 至于登录的信息部分,有使用 last 来纪录的登录者信息就是记录在这个档案中!
# 底下就是 /var/log/wtmp 这个档案的 rotate 情况,他的意思是:
# 1. 每个月进行一次 log rotate 的工作;
# 2. 将档案的权限设定为 664 啰!
# 3. 仅保存前一个月的 rotate 备份!这个可以改大一点,例如 5 !保存五个月,以利追踪
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
# 底下这个档案跟 /var/log/wtmp 类似!
/var/log/lastlog {
monthly
rotate 1
}
正确的 logrotate 的写法中:
将 log file 名称(包含绝对路径)写在前面,可以使用空格符分隔多个 log files ;
用 { } 包括所有的设定;
设定的项目与前面提到的相同,并且可加入 rotate 前 (pre) 与后 (post) 的一些特殊执行的指令!
+ prerotate:在启动 logrotate 之前进行的指令,例如修改 log file 的属性!!
+ postrotate:在做完 logrotate 之后启动的指令,例如重新启动( kill -1 或 kill -HUP )某个服务!
+ Prerotate与postrotate对于已经加上了特殊属性的档案处理上面,是相当重要的执行程序!
一个例子:
/var/log/auth.log /var/log/syslog /var/log/user.log /var/log/secure /var/log/messages /var/log/boot.log /var/log/mail/errors /var/log/mail/info /var/log/mail/warnings /var/log/cron/errors /var/log/cron/info /var/log/cron/warnings /var/log/kernel/errors /var/log/kernel/info /var/log/kernel/warnings /var/log/lpr/errors /var/log/lpr/info /var/log/lpr/warnings /var/log/news/news.err /var/log/news/news.notice /var/log/news/news.crit /var/log/daemons/errors /var/log/daemons/info /var/log/daemons/warnings /var/log/explanations {
sharedscripts
rotate 5
weekly
prerotate
/usr/bin/chattr -a /var/log/auth.log
/usr/bin/chattr -a /var/log/messages
/usr/bin/chattr -a /var/log/secure
endscript
postrotate
/usr/bin/killall -HUP syslogd
/usr/bin/chattr +a /var/log/auth.log
/usr/bin/chattr +a /var/log/messages
/usr/bin/chattr +a /var/log/secure
endscript
}
Logrotate的测试:
[root @test root]# logrotate –f /etc/logrotate.conf
上面那个 -f 具有『强制执行』的意思
好了,那么预设的logrotate什么时候执行呢?呵呵!不用担心,系统已经帮我们设定好了!放在哪里呢?
/etc/cron.daily/logrotate
注意看一下里面的内容:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
由于 logrotate 的工作已经加入 crontab 里头了!所以现在每天系统都会自动的给他查看 logrotate !只是要注意一下那个 /var/log/messages 里头是否常常有:『Jun 23 04:02:00 test syslogd 1.4.1: restart.』这样的字样,这说明的是 syslogd 重新启动的时间(就是因为 /etc/logrotate.d/syslog 的设定之缘故.)
例题:将 procmail 的 logfile (/var/log/procmail.log)加入 logrotate 当中!假设我们已经将 procmail 加入到 sendmail 的程序当中了,并且已经启动他,这个时候,如果我想要每个月份执行一次 logrotate ,并且保留五个月份的登录数据备份,应该怎么作呢?
答:
使用 vi 建立一个档案,档名为 /etc/logrotate.d/procmail,这个档案的内容为:
# This file is creating by VBird 2002/06/18
/var/log/procmail.log {
monthly
size=10M
rotate 5
nocompress
}
上面说的是:
1. 若该登录档工作超过一个月;
2. 或该登录档大小超过 10 MB;
3. 保存五个备份文件;
4. 备份文件不要压缩!
本文摘自《鸟哥的linux私房菜》,感谢鸟哥。
阅读(1034) | 评论(0) | 转发(0) |