/var/log/cron:crontab 排程
/var/log/dmesg:记录系统在启动的时候核心侦测过程所产生的各项资讯。
/var/log/lastlog:可以记录系统上面所有的帐号最近一次登陆系统时的相关资讯。
/var/log/maillog 或 /var/log/mail/*:记录邮件的往来资讯,其实主要是记录 sendmail (SMTP 协议提供者) 与 dovecot (POP3 协议提供者) 所产生的信息。
/var/log/messages:几乎系统发生的错误信息 (或者是重要的资讯) 都会记录在这个文件中。
/var/log/secure:基本上,只要牵涉到『需要输入帐号口令』的软件,那么当登陆时 (不管登陆正确或错误) 都会被记录在此文件中。
/var/log/wtmp, /var/log/faillog:这两个文件可以记录正确登陆系统者的帐号资讯 (wtmp) 与错误登陆时所使用的帐号资讯 (faillog) 。
/var/log/httpd/*, /var/log/news/*, /var/log/samba/*:不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项信息.
CentOS 提供 syslogd 这个服务来统一管理登录文件。
还有klogd来专门记录核心资讯的登录文件。
由于登录文件会不断变大,所以需要备份和升级,我们可以透过 logrotate (登录文件轮替) 来自动化处理登录文件容量与升级的问题。
logrotate 基本上,就是将旧的登录文件更改名称,然后创建一个空的登录文件,新的登录文件将重新开始记录,然后只要将旧的登录文件留下一阵子,就可以达到将登录文件『轮转』的目的。 如果旧的纪录 (大概要保存几个月吧!) 保存了一段时间没有问题,那么就可以让系统自动的将他删除。
总结一下,针对登录文件所需的功能,我们需要的服务与程序有:
syslogd:主要登录系统与网络等服务的信息;
klogd:主要登录核心产生的各项资讯;
logrotate:主要在进行登录文件的轮替功能。
1.事件发生的日期与时间;
2.发生此事件的主机名称;
3.启动此事件的服务名称 (如 samba, xinetd 等) 或函式名称 (如 libpam ..);
4.该信息的实际数据内容。
syslog 针对各种服务与信息记录在某些文件的配置档就是 /etc/syslog.conf, 这个文件规定了『(1)什么服务 (2)的什么等级信息 (3)需要被记录在哪里(装置或文件)』
配置的语法会是这样:
服务名称[.=!]信息等级 信息记录的档名或装置或主机
# 底下以 mail 这个服务产生的 info 等级为例:
mail.info /var/log/maillog_info
# 这一行说明:mail 服务产生的大於等於 info 等级的信息,都记录到
# /var/log/maillog_info 文件中的意思。
同一个服务所产生的信息是有差别的,有启动时仅通知系统而已的一般信息 (information), 有出现还不至於影响到正常运行的警告信息 (warn) ,还有系统硬件发生严重错误时,所产生的重大问题信息 (error 等等),syslog 将信息分为七个主要的等级。
. :代表『比后面还要高的等级 (含该等级) 都被记录下来』的意思,例如: mail.info 代表只要是 mail 的资讯,而且该资讯等级高於 info (含 info 本身)时,就会被记录下来的意思。
.=:代表所需要的等级就是后面接的等级而已, 其他的不要!
.!:代表不等於, 亦即是除了该等级外的其他等级都记录。
一些常见的放置处:
文件的绝对路径:通常就是放在 /var/log 里头的文件。
打印机或其他:例如 /dev/lp0 这个打印机装置
使用者名称:显示给使用者!
远程主机:例如 @www.vbird.tsai 要对方主机也能支持才行!
*:代表『目前在线上的所有人』,类似 wall 这个命令的意义!
1.如果我要将我的 mail 相关的数据给他写入 /var/log/maillog 当中,那么在 /etc/syslog.conf 的语法如何设计?
答:
mail.info /var/log/maillog
2.我要将新闻群组数据 (news) 及例行性工作排程 (cron) 的信息都写入到一个称为 /var/log/cronnews 的文件中,但是这两个程序的警告信息则额外的记录在 /var/log/cronnews.warn 中, 那该如何配置我的 syslog.conf 呢?
答:
既然是两个程序,那么只好以分号来隔开了,此外,由於第二个指定文件中,我只要记录警告信息, 因此配置上需要指定『.=』这个符号,所以语法成为了:
news.\*;cron.\* /var/log/cronnews
news.=warn;cron.=warn /var/log/cronnews.warn
3.我的 messages 这个文件需要记录所有的资讯,但是就是不想要记录 cron, mail 及 news 的资讯,那么应该怎么写才好?
答:
可以有两种写法,分别是:
*.*;news,cron,mail.none /var/log/messages
*.*;news.none;cron.none;mail.none /var/log/messages
使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话, 那么就需要将服务与等级都写上去。
我们可以透过一个隐藏的属性来配置你的登录文件,成为『 只可以添加数据,但是不能被删除 』的状态:
[root@www ~]# chattr +a /var/log/messages
[root@www ~]# lsattr /var/log/messages
-----a------- /var/log/messages
登录文件服务器默认的端口是 UDP 的 514 。
服务器会启动监听的端口,用户端则将登录文件再转出一份送到服务器去。
通过服务器,我们可以统一查看多台主机的登录文件!
配置:
# 1. Server 端:修改 syslogd 的启动配置档,通常在 /etc/sysconfig 内!
[root@www ~]# vim /etc/sysconfig/syslog
# 找到底下这一行:
SYSLOGD_OPTIONS="-m 0"
# 改成底下这样子!
SYSLOGD_OPTIONS="-m 0 -r"
# 2. 重新启动与观察 syslogd !
[root@www ~]# /etc/init.d/syslog restart
[root@www ~]# netstat -lunp | grep syslog
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:514 0.0.0.0:* 13981/syslogd
# 嘿嘿!你的登录文件主机已经配置妥当了!
client 端的配置就简单多了!只要指定某个资讯传送到这部主机即可! 举例来说,我们的登录文件服务器 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机, 所以,可以在 /etc/syslog.conf 里面新增这样的一行:
[root@www ~]# vim /etc/syslog.conf
*.* @192.168.1.100
再重新启动 syslog 后,立刻就搞定了!
syslog 利用的是 daemon 的方式来启动的, 当有需求的时候立刻就会被运行的,但是 logrotate 却是在规定的时间到了之后才来进行登录文件的轮替, 所以这个 logrotate 程序当然就是挂在 cron 底下进行的。
/etc/cron.daily/logrotate 记录了每天要进行的登录文件轮替的行为。
logrotate要记载『 在什么状态下才将登录文件进行轮替』的配置,那么 logrotate 这个程序的参数配置档在哪里呢?那就是:
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf 才是主要的参数文件,至於 logrotate.d 是一个目录, 该目录里面的所有文件都会被主动的读入 /etc/logrotate.conf 当中来进行!另外,在 /etc/logrotate.d/ 里面的文件中,如果没有规定到的一些细部配置,则以 /etc/logrotate.conf 这个文件的规定来指定为默认值!
轮替例子:
当第一次运行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存登录文件。而第二次运行之后,则 messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存登录文件!那么如果我们仅配置保留三个登录文件而已的话,那么运行第四次时,则 messages.3 这个文件就会被删除,并由后面的较新的保存登录文件所取代。
[root@www ~]# vim /etc/logrotate.conf
# 底下的配置是 "logrotate 的默认配置值" ,如果个别的文件配置了其他的参数,
# 则将以个别的文件配置为主,若该文件没有配置到的参数则以这个文件的内容为默认值!
weekly <==默认每个礼拜对登录文件进行一次 rotate 的工作
rotate 4 <==保留几个登录文件呢?默认是保留四个!
create <==由於登录文件被更名,因此创建一个新的来继续储存之意!
#compress <==被更动的登录文件是否需要压缩?如果登录文件太大则可考虑此参数启动
include /etc/logrotate.d
# 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来运行 rotate 的工作!
/var/log/wtmp { <==仅针对 /var/log/wtmp 所配置的参数
monthly <==每个月一次,取代每周!
minsize 1M <==文件容量一定要超过 1M 后才进行rotate (略过时间参数)
create 0664 root utmp <==指定新建文件的权限与所属帐号/群组
rotate 1 <==仅保留一个,亦即仅有 wtmp.1 保留而已。
}
# 这个 wtmp 可记录登陆者与系统重新启动时的时间与来源主机及登陆期间的时间。
# 由於具有 minsize 的参数,因此不见得每个月一定会进行一次喔!要看文件容量。
# 由於仅保留一个登录文件而已,不满意的话可以将他改成 rotate 5 吧!
/etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录而已,这样子方便合理一点。
例子:
[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/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
}
#该配置只对 /var/log/ 内的 messages, secure, maillog, spooler, boot.log, cron 有效;
#登录文件轮替每周一次、保留四个、且轮替下来的登录文件不进行压缩(未更改默认值);
#轮替完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd
正确的 logrotate 的写法为:
档名:被处理的登录文件绝对路径档名写在前面,可以使用空白字节分隔多个登录文件;
参数:上述档名进行轮替的参数使用 { } 包括起来;
运行脚本:可呼叫外部命令来进行额外的命令下达,这个配置需与 sharedscripts …. endscript 配置合用才行。至於可用的环境为:
prerotate:在启动 logrotate 之前进行的命令,例如修改登录文件的属性等动作;
postrotate:在做完 logrotate 之后启动的命令,例如重新启动 (kill -HUP) 某个服务!
Prerotate 与 postrotate 对於已加上特殊属性的文件处理上面,是相当重要的运行程序!
[root@www ~]# logrotate [-vf] logfile
选项与参数:
-v :启动显示模式,会显示 logrotate 运行的过程喔!
-f :不论是否符合配置档的数据,强制每个登录文件都进行 rotate 的动作!
假设你已经创建了 /var/log/admin.log 这个文件, 现在,你想要将该文件加上 +a 这个隐藏标签,而且配置底下的相关资讯:
登录文件轮替一个月进行一次;
该登录文件若大於 10MB 时,则主动进行轮替,不需要考虑一个月的期限;
保存五个备份文件;
备份文件需要压缩。
# 1. 先创建 +a 这个属性!
[root@www ~]# chattr +a /var/log/admin.log
[root@www ~]# lsattr /var/log/admin.log
-----a------- /var/log/admin.log
[root@www ~]# mv /var/log/admin.log /var/log/admin.log.1
mv: cannot move `/var/log/admin.log' to `/var/log/admin.log.1':
Operation not permitted
# 这里确定了加入 a 的隐藏属性!所以 root 无法移动此登录文件!
# 2. 开始创建 logrotate 的配置档,添加一个文件在 /etc/logrotate.d 内就对了!
[root@www ~]# vi /etc/logrotate.d/admin
# This configuration is from VBird 2009/04/08
/var/log/admin.log {
monthly <==每个月进行一次
size=10M <==文件容量大於 10M 则开始处置
rotate 5 <==保留五个!
compress <==进行压缩工作!
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
sharedscripts
postrotate
/usr/bin/killall -HUP syslogd
/usr/bin/chattr +a /var/log/admin.log
endscript
}
Centos默认的 logwatch 这个套件所提供的分析工具, 会每天分析一次登录文件,并且将数据以 email 的格式寄送给 root。
当然,也可以自己写一直程序来分析自己想要的内容~
1.登录文件可以记录一个事件的何时、何地、何人、何事等四大资讯,故系统有问题时务必查询登录文件;
2.系统的登录文件默认都集中放置到 /var/log/ 目录内,其中又以 messages 记录的资讯最多!
3.登录文件记录的主要服务与程序为: syslogd, klogd, log;
4.syslogd 的配置档在 /etc/syslog.conf ,内容语法为:『 服务.等级 记载装置或文件』;
5.syslogd 本身有提供登录文件服务器的功能,透过修改/etc/sysconfig/syslog 内容即可达成;
6.logrotate 程序利用 crontab 来进行登录文件的轮替功能;
7.logrotate的配置档为/etc/logrotate.conf,而额外的配置则可写入 /etc/logrotate.d/* 内;
8.logwatch 为 CentOS 5 默认提供的一个登录文件分析软件。