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

posted @ 2015-12-22 16:35  luckysimple  阅读(283)  评论(0编辑  收藏  举报