Linux认识与分析日志文件
当Linux系统出现问题时,查阅日志文件可以定位错误。
- 解决系统方面的错误
- 解决网络服务的问题
- 过往事件记录簿
日志文件产生所需的相关服务与进程
- syslogd:主要登陆系统与网络等服务的信息;
- klogd:主要登陆内核产生的各项信息;
- logrotate:主要进行日志文件的轮替功能。
系统的日志文件默认都集中放在/var/log目录内,其中以messages记录的信息最多。
syslogd:记录日志文件的服务
日志文件内容的一般格式
- 事件发生的日期与时间
- 发生此事件的主机名
- 启动此事件的服务名称或函数名称
- 该信息的实际数据内容
syslog的配置文件:/etc/syslog.conf
syslog.conf规定了指定服务的指定等级信息需要被记录在哪里(设备或文件)。设置的语法如下
服务名称[.=!]信息等级 信息记录的文件名或设备或主机
# mail服务产生的大于等于info等级的信息,都记录到/var/log/maillog_info文件
mail.info /var/log/maillog_info
特别说明连接符合[.=!]的意思
- “.”代表比后面还要高的等级(含该等级)都被记录下来;
- “.=”代表所需要的等级就是后面接的等级,其他等级不要!
- “.!”代表不等于,即是除了该等级外的其他等级都记录。
比较常用的是“.”。
日志文件的安全性设置
使用隐藏属性a,设置日志文件只能增加,不能删除。
[root@www ~]# chattr +a /var/log/messages
[root@www ~]# lsattr /var/log/messages
-----a------- /var/log/messages
设置成功后,日志文件轮替将会无法移动改日志文件的文件名!这个问题可以使用logrotate的配置文件来解决。
日志文件服务器的设置
为了方便查看多台Linux主机的日志,可以设置将多台主机的日志发送到一台日志文件服务器。
日志文件服务器的默认端口是UDP的514。具体设置如下:
# 1. Server端:修改syslogd的启动配置文件,通常在 /etc/sysconfig
[root@www ~]# vim /etc/sysconfig/syslog
# 找到下面这一行
SYSLOGD_OPTIONS=”-m 0”
# 改成如下这样
SYSLOGD_OPTIONS=”-m 0 -r”
# 重新启动与查看syslogd
[root@www ~]# /etc/init.d/syslog restart
[root@www ~]# netstat –lunp | grep syslog
Proto Recev-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
客户端设置如下
[root@www ~]# vi /etc/syslog.conf
*.* @192.168.1.100
日志文件的轮替(logrotate)
logrotate的主要功能是将旧的日志文件移动成旧文件,并且重新新建一个新的空文件来记录。
其配置文件有
- /etc/logrotate.conf
- /etc/logrotate.d/
logrotate.conf是主要的参数文件,logrotate.d目录的所有文件都会主动读入/etc/logrotate.conf来执行。一般来说,/etc/logrotate.conf是默认的轮替设置,各个服务可以在logrotate.d目录有自己的轮替设置。
logrotate配置可调用外部命令来执行额外的命令,这个设置需与sharedscripts…endscript设置起作用才行。例如:
- preroate: 在启动logrotate之前执行命令,如修改日志文件的属性等操作;
- postrotate: 在做完logrotate之后启动命令,如重新启动(kill –HUP)服务。
例如解决上述/var/log/messages安全性设置的问题。可以这样修改配置文件
[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages {
sharedscripts
prerotate
/usr/bin/chattr –a /var/log/messages
endscript
sharedscripts
postrotate
/usr/bin/chattr +a /var/log/messages
endscript
}
这样设置后,在进行轮替之前删除/var/log/messages的隐藏属性,完成轮替之后再给它加入隐藏属性。
References
- 《鸟哥的Linux私房菜》,第19章,认识与分析日志文件
- 文件隐藏属性: chattr, lsattr