Linux 系统日志查看分析(Rsyslog)

Linux系统有一个非常灵活和强大的日志系统,能够记录系统正常运行和发生错误异常情况下的日志信息,通过日志信息可以方便排查系统或应用软件出现的问题,大部分Linux系统都有通用日志记录工具Rsyslog。rsyslog 是syslog 的升级版。本文主要介绍 Linux 系统日志查看分析(Rsyslog)。

1、Rsyslog简介

Rsyslog是一个主机可配置的、统一的系统日志记录工具。系统使用一个集中的系统日志进程,/etc/rsyslog.conf是rsyslog的主配置文件。/etc/rsyslog.conf/etc/rsyslog.d/*.conf/etc/sysconfig/rsyslog来配置rsyslog的行为。/etc/sysconfig/rsyslog文件用于配置守护进程的运行参数。

2、配置文件

配置文件格式

Facility.Priority;Facility1.Priority1...    Action

配置文件中每条配置项的格式,配置说明如下表:

配置项

说明

Facility

用来描述提交日志消息的应用程序或进程的标识符。例如,mail、kernel和ftp。

Priority

日志级别用来说明日志记录的优先级,例如,debug、info、warning等

Action

日志记录位置,Action可以将消息写入日志文件,将日志回显到控制台或其他设备,将日志写入已登录用户,或将消息发送到另一个rsyslog服务器。

1)Facility

配置值说明如下表:

auth    

认证相关的

authpriv   

权限,授权相关的

cron    

任务计划相关的

daemon  

守护进程相关的

kern    

内核相关的

lpr     

打印相关的

mail    

邮件相关的

mark    

标记相关的

news    

新闻相关的

security   

安全相关的,与auth类似

user    

用户相关的

uucp     

unix to unix cp 相关的

local0-local7  

用户自定义

*

*表示所有类型

2)Priority

日志优先级的配置值说明如下表:

debug 

程序或者系统调试信息

info      

一般信息

notice

不影响正常功能,需要注意的信息

warning/warn

可能影响系统功能,需要提醒用户的重要事件

err/error

错误信息

crit

比较严重的

alert

必须马上处理的,警告

emerg/oanic 

  

会导致系统不可用的

* 

所有日志级别

none

与 * 的设置相反,不记录日志

3)Action

日志记录位置的配置值说明如下表:

系统上的绝对路径    

普通文件 如:/var/log/xxxx

|

管道,发送给其他命令处理,数据进一步加工

终端

终端   如,/dev/console

@HOST

远程主机 如:@192.168.101.122

也可以后面更上该机器的对应路径 ,  @192.168.101.122:/var/log/xxxxx

用户

系统用户,发送给此用户处理,按照此用户的日志来记录

*

登录到系统上的所有用户,一般emerg级别日志就是这样处理的

配置文件说明

/etc/rsyslog.conf 是rsyslog服务的总配置文件,而/etc/rsyslog.d 目录是单独配置的rsyslog配置文件。

/etc/rsyslog.conf配置文件内容: 

# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
# 推荐将所有的rule都配置在该目录下,/etc/rsyslog.conf中不写rule

例如,

/etc/rsyslog.d/message.conf配置文件中内容如下:

auth.*                       @prep.ai.mit.edu
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name

/etc/rsyslog.d/app.conf配置内容如下:

*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
mark.* /dev/console

/etc/rsyslog.d/comm.conf配置内容如下:

# 记录mail日志等级为error及以上日志
mail.err							/var/log/mail_err.log
# 记录mail所有等级为warn级别的日志(仅记录warn级别)
mail.=warn							/var/log/mail_err.log
# 记录kern所有日志
kern.*								/var/log/kern.log
# 将mail的所有信息,除了info以外,其他的都写入/var/adm/mail
mail.*;mail.!=info   /var/adm/mail
# 将日志等级为crit或更高的内核消息定向到远程主机finlandia
# 如果主机崩溃,磁盘出现不可修复的错误,可能无法读取存储的消息。如果有日志在远程主机上,可以尝试找出崩溃的原因。
kern.crit    						 @finlandia
# 记录所有类型的warning等级及以上日志
*.warning							/var/log/syslog_warn.log
# 记录mail的warning日志和kern的error日志,其他所有的info日志
*.info;mail.warning;kern.error		/var/log/messages
# 记录kernel的info到warning日志
kern.info;kern.!err   /var/adm/kernel-info
# 将mail和news的info级别日志写入/var/adminfo
mail,news.=info    /var/adm/info
# 将所有系统中所有类型的info日志和notice日志存入/var/log/massages,mail的所有日志除外。
*.=info;*.=notice;\
mail.none /var/log/messages
# 紧急消息(emerg级别)将使用wall显示给当前所有登录的用户
*.=emerg   		*
# 该规则将所有alert以及更高级别的消息定向到操作员的终端,即登录的用户“root”和“joey”的终端。
*.alert      root,joey

3、logger命令

Linux中的logger命令,处理系统日志的一个非常有用的命令。logger命令将日志消息发送到rsyslogd守护进程,从而引发系统日志记录。我们可以在任何时候从命令行检查syslogd守护进程及其配置。logger命令可以从命令行向系统日志文件添加一行日志规则。

语法如下:

logger [-i] [-f file] [-p priority] [-t tag] [message]...

选项说明:

-d, --udp  

使用数据报(UDP)而不是使用默认的流连接(TCP)

-i, --id   

逐行记录每一次logger的进程ID

-f, --file file_name

记录特定的文件

-h, --help 

显示帮助文本并退出

-n, --server 

写入指定的远程syslog服务器,

使用UDP代替内装式syslog的例程

-P, --port port_num

使用指定的UDP端口。默认的端口号是514

-p, --priority priority_level

指定输入消息的优先级,

优先级可以是数字

或者指定为 "facility.level" 的格式。

比如:"-p local3.info "

local3 这个设备的消息级别为info。

默认级别是 "user.notice"

-s, --stderr

输出标准错误到系统日志。

-t, --tag tag

指定标记记录

-u, --socket socket

写入指定的socket,

而不是到内置系统日志例程。

-V, --version

现实版本信息并退出

 参考文档Linux shell man命令查看帮助文档

4、常用日志文件位置

所有的系统应用程序都在/var/log及其子目录中创建日志文件。

例如:

程序

目录

httpd

/var/log/httpd

samba

/var/log/samba

cron

/var/log/

mail

/var/log/

mysql

/var/log/

5、logrotate日志分割

logrotate是一个日志文件管理工具。用于分割日志文件,防止单个文件占用空间太大,通常是删除旧的日志文件,并创建新的日志文件。可以节省磁盘空间。

logrotate 命令格式

logrotate [OPTION...] <configfile>

选项说明

-d, --debug 

debug模式,测试配置文件是否有错误。

-f, --force 

强制转储文件。

-m, --mail=command 

压缩日志后,发送日志到指定邮箱。

-s, --state=statefile 

使用指定的状态文件。

-v, --verbose 

显示转储过程。

例如,

/etc/logrotate.conf配置文件内容:

# 下面设定是 "logrotate 的默认值" ,如有另外文件设定了其他的值,
# 则就以其它文件的设定为主
weekly          //默认每一周执行一次rotate轮转工作
rotate 4       //保留多少个日志文件(轮转几次).默认保留四个.就是指定日志文件删除之前轮转的次数,0 指没有备份
create         //自动创建新的日志文件,新的日志文件具有和原来的文件相同的权限;因为日志被改名,因此要创建一个新的来继续存储之前的日志
dateext       //这个参数很重要!就是切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式
compress      //是否通过gzip压缩转储以后的日志文件,如xxx.log-20131216.gz ;如果不需要压缩,注释掉就行
include /etc/logrotate.d
# 将 /etc/logrotate.d/ 目录中的所有文件都加载进来
/var/log/wtmp {                 //仅针对 /var/log/wtmp 所设定的参数
monthly                    //每月一次切割,取代默认的一周
minsize 1M              //文件大小超过 1M 后才会切割
create 0664 root utmp            //指定新建的日志文件权限以及所属用户和组
rotate 1                    //只保留一个日志.
}
# wtmp 可记录用户登录系统及系统重启的时间
# 配置中有minsize 的参数,要是文件大小没到设定值,可能不会每个月执行一次。

推荐阅读
cjavapy编程之路首页