一、linux日志文件及日志分析


   1、linux日志简介

     Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。

大部分Linux发行版默认的日志守护进程为 syslog(后续升级rsyslog),位于 /etc/syslog 或 /etc/syslogd,默认配置文件为 /etc/syslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息。 

Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。完成这个过程的程序就是syslog。syslog可以根据日志的类别和优先级将日志保存到不同的文件中。例如,为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。默认配置下,日志文件通常都保存在“/var/log”目录下。

2、日志类型

下面是常见的日志类型,但并不是所有的Linux发行版都包含这些类型:

类型 说明

auth 用户认证时产生的日志,如login命令、su命令。

authpriv 与 auth 类似,但是只能被特定用户查看。

console 针对系统控制台的消息。

cron 系统定期执行计划任务时产生的日志。

daemon 某些守护进程产生的日志。

ftp FTP服务。http://write.blog.csdn.net/postedit/72920400

kern 系统内核消息。

local0.local7 由自定义程序使用。

lpr 与打印机活动有关。

mail 邮件日志。

mark 产生时间戳。系统每隔一段时间向日志文件中输出当前时间,每行的格式类似于 May 26 11:17:09 rs2 -- MARK --,可以由此推断系统发生故障的大概时间。

news 网络新闻传输协议(nntp)产生的消息。

ntp 网络时间协议(ntp)产生的消息。

user 用户进程。

uucp UUCP子系统

3、常见日志文件

所有的系统应用都会在/var/log 目录下创建日志文件,或创建子目录再创建日志文件。如:

我们可以粗略的分为两类日志:系统日志和应用日志,系统日志主要存放系统内置程序或系统内核之类的日志信息如alternatives.log 、btmp等,应用日志主要是安装的第三方应用产生的日志如tomcat7 、apache2等。

文件目录/日志名称 记录信息

/var/log/alternatives.log 系统的一些更新替代信息记录,如系统软件包升级更新,记录了程序作用,日期,命令,成功与否的返回码

/var/log/apport.log 应用程序崩溃信息记录,暂时这方面日志信息

/var/log/apt/history.log 使用apt-get安装卸载软件的信息记录,包含时间、安装命令、版本信息、结束时间等

/var/log/apt/term.log 使用apt-get时的具体操作,如 package 的下载打开等

/var/log/auth.log 登录认证的信息记录,包含:日期与 ip 地址的来源以及登陆的用户与工具

/var/log/boot.log 系统启动时的程序服务的日志信息

/var/log/btmp 错误登陆的信息记录

/var/log/Consolekit/history 控制台的信息记录

/var/log/dist-upgrade dist-upgrade这种更新方式的信息记录

/var/log/dmesg 启动时,显示屏幕上内核缓冲信息,与硬件有关的信息

/var/log/dpkg.log dpkg命令管理包的日志。

/var/log/faillog 用户登录失败详细信息记录

/var/log/fontconfig.log 与字体配置有关的信息记录

/var/log/kern.log 内核产生的信息记录,在自己修改内核时有很大帮助

/var/log/lastlog 用户的最近信息记录

/var/log/wtmp 登录信息的记录。wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等

/var/log/syslog 系统信息记录

二、rsyslog日志采集

1、rsyslog介绍

       linux下的日志是如何产生的,从上面可以看出大部分的日志信息似乎格式都都很类似,并且为什么都会出现在这个文件夹中。

这样的实现可以通过两种方式,一种是由软件开发商自己来自定义日志格式然后指定输出日志位置,还有一种方式就是 Linux 提供的日志服务程序,而我们这里系统日志是通过 syslog 来实现,提供日志管理服务。

       syslog 是一个系统日志记录程序,在早期的大部分 Linux 发行版都是内置 syslog,让其作为系统的默认日志收集工具,虽然时代的进步与发展,syslog 已经年老体衰跟不上时代的需求,所以他被 rsyslog 所代替了,较新的Ubuntu、Fedora 等等都是默认使用 rsyslog 作为系统的日志收集工具

       rsyslog的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计。rsyslog能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。rsyslog可以提供超过每秒一百万条消息给目标文件,

这样能实时收集日志信息的程序都会有其守护进程如 rsyslog 的守护进程便是 rsyslogd

rsyslog的特性:1.多线程

                 2.支持加密协议:ssl,tls,relp

                 3.mysql、oracle、postgreSQL

                 4.过滤日志内容的部分信息

                        5.配置日志输出格式

                        6.等等..

2、rsyslog配置

1)首先查看一下当前linux系统中rsyslog是哪个版本,

rsyslogd -version

[root@master ~]# rsyslogd -version

rsyslogd 5.8.10, compiled with:

    FEATURE_REGEXP:                Yes

    FEATURE_LARGEFILE:            No

    GSSAPI Kerberos 5 support:        Yes

    FEATURE_DEBUG (debug build, slow code):    No

    32bit Atomic operations supported:    Yes

    64bit Atomic operations supported:    Yes

    Runtime Instrumentation (slow code):    No

See http://www.rsyslog.com for more information.

如果rsyslog不存在,安装rsyslog

 centos:yum -y rsyslog

debian:apt-get install rsyslog

2)rsyslog配置文件

配置文件/etc/rsyslog.conf大概分为三个部分:MODULES、GLOBAL DIRECTIVES、RULES

  #MODULES

  这个部分是针对接收配置的,主要是指定接收日志的协议和端口。若要配置日志服务器,则需要将相应的配置项去掉注释。

  #GLOBAL DIRECTIVES

  这个部分主要用来配置模板,模板的作用是指定你希望在日志文件中保存的日志格式。

  默认配置为:    # Use default timestamp format

                                    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

debian7默认的配置文件

#################

#### MODULES ####

#################

$ModLoad imuxsock #装载imuxsock模块

$ModLoad imklog     #装载imklog模块

*.* @192.168.2.72:514

###########################

#### GLOBAL DIRECTIVES ####

###########################

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

$FileOwner root

$FileGroup adm

$FileCreateMode 0640

$DirCreateMode 0755

$Umask 0022

$WorkDirectory /var/spool/rsyslog

$IncludeConfig /etc/rsyslog.d/*.conf

###############

#### RULES ####

###############

auth,authpriv.*            /var/log/auth.log

*.*;auth,authpriv.none        -/var/log/syslog

daemon.*            -/var/log/daemon.log

kern.*                -/var/log/kern.log

lpr.*                -/var/log/lpr.log

mail.*                -/var/log/mail.log

user.*                -/var/log/user.log

mail.info            -/var/log/mail.info

mail.warn            -/var/log/mail.warn

mail.err            /var/log/mail.err

news.crit            /var/log/news/news.crit

news.err            /var/log/news/news.err

news.notice            -/var/log/news/news.notice

*.=debug;\

    auth,authpriv.none;\

    news.none;mail.none    -/var/log/debug

*.=info;*.=notice;*.=warn;\

    auth,authpriv.none;\

    cron,daemon.none;\

    mail,news.none        -/var/log/messages

*.emerg                :omusrmsg:*

daemon.*;mail.*;\

    news.err;\

    *.=debug;*.=info;\

    *.=notice;*.=warn    |/dev/xconsole

3、rsyslog工作流程

简单的来说:首先数据通过输入模块进入主队列,然后经由过滤条件分解到各个子队列,最后交给输出模块。

4、日志采集案例

1)Apache日志配置远程Syslog采集

第一步:初始化日志采集环境

先确保系统中的/var/spool/rsyslog 目录已存在:

mkdir -v /var/spool/rsyslog

if [ "$(grep Ubuntu /etc/issue)" != "" ]; then

  chown -R syslog:adm /var/spool/rsyslog

fi

第二步:创建Apahce日志文件采集配置

新建Rsyslog的子配置文件,他通常在/etc/rsyslog.d下,需要/etc/rsyslog.conf去包含这个目录下的子配置文件:

vim /etc/rsyslog.d/apache-biglog.conf

复制以下内容到apache-biglog.conf,注意注释部分的修改:

$ModLoad imfile

$InputFilePollInterval 10

$WorkDirectory /var/spool/rsyslog

$PrivDropToGroup adm

## Apache访问日志文件路径,根据实际情况修改:

$InputFileName /var/log/apache2/access.log

$InputFileTag apache-access:

$InputFileStateFile stat-apache-access

$InputFileSeverity info

$InputFilePersistStateInterval 25000

$InputRunFileMonitor

## Apache错误日志文件路径,根据实际情况修改:

$InputFileName /var/log/apache2/error.log

$InputFileTag apache-error:

$InputFileStateFile stat-apache-error

$InputFileSeverity error

$InputFilePersistStateInterval 25000

$InputRunFileMonitor

## 指定日志格式模板:

$template BiglogFormatApache,"%msg%\n"

## 注意syslog日志服务器接收地址,根据实际情况修改:

if $programname == 'apache-access' then @10.x.x.x:514;BiglogFormatApache

if $programname == 'apache-access' then ~

if $programname == 'apache-error' then @10.x.x.x:514;BiglogFormatApache

if $programname == 'apache-error' then ~

注:通过Rsyslog配置日志接收端的时候,如上示例@10.x.x.x:514,用于指定接收日志的服务器的协议、IP地址和端口号。使用@代表走UDP协议,使用@@代表走TCP协议,冒号后面的514代表接收端口。

第三步:重启Rsyslog服务,日志采集开始工作

service rsyslog restart

此时可以通过观察系统中的Rsyslog日志,确定是否正常工作。

cat /var/log/messages |grep rsyslog

2)Linux系统日志配置远程Syslog采集

第一步:创建Liunx系统日志采集配置

新建Rsyslog的子配置文件,他通常在/etc/rsyslog.d下,需要/etc/rsyslog.conf去包含这个目录下的子配置文件:

vim /etc/rsyslog.d/linux-biglog.conf

复制以下内容到linux-biglog.conf,注意注释部分的修改:

## 定义日志格式模板:

$template BiglogFormatLinux,"%msg%\n"

## 注意syslog日志服务器接收地址,根据实际情况修改:

*.*  @10.x.x.x:514;BiglogFormatLinux

注:通过Rsyslog配置日志接收端的时候,如上示例@10.x.x.x:514,用于指定接收日志的服务器的协议、IP地址和端口号。使用@代表走UDP协议,使用@@代表走TCP协议,冒号后面的514代表接收端口。

第二步:重启Rsyslog服务,日志采集开始工作

service rsyslog restart

此时可以通过观察系统中的Rsyslog日志,确定是否正常工作。

cat /var/log/messages |grep rsyslog

3)Tomcat日志配置远程Syslog采集

第一步:初始化日志采集环境

先确保系统中的/var/spool/rsyslog 目录已存在:

mkdir -v /var/spool/rsyslog

if [ "$(grep Ubuntu /etc/issue)" != "" ]; then

  chown -R syslog:adm /var/spool/rsyslog

fi

第二步:创建Tomcat日志文件采集配置

新建Rsyslog的子配置文件,他通常在/etc/rsyslog.d下,需要/etc/rsyslog.conf去包含这个目录下的子配置文件:

vim /etc/rsyslog.d/tomcat-biglog.conf

复制以下内容到tomcat-biglog.conf,注意注释部分的修改:

$ModLoad imfile

$InputFilePollInterval 10

$WorkDirectory /var/spool/rsyslog

$PrivDropToGroup adm

## 指定日志格式模板:

$template BiglogFormatTomcat,"%msg%\n"

## Tomcat的catalina.log路径,根据实际情况修改:

$InputFileName /var/log/tomcat6/catalina.log

$InputFileTag catalina-log

$InputFileStateFile stat-catalina-log

$InputFileSeverity info

$InputFilePersistStateInterval 25000

$InputRunFileMonitor

## Tomcat的catalina.out路径,根据实际情况修改:

$InputFileName /var/log/tomcat6/catalina.out

$InputFileTag catalina-out

$InputFileStateFile stat-catalina-out

$InputFileSeverity info

$InputFilePersistStateInterval 25000

$InputRunFileMonitor

## Tomcat的host-manager.log路径,根据实际情况修改:

$InputFileName /var/log/tomcat6/host-manager.log

$InputFileTag host-manager

$InputFileStateFile stat-host-manager

$InputFileSeverity info

$InputFilePersistStateInterval 25000

$InputRunFileMonitor

## Tomcat的initd.log路径,根据实际情况修改:

$InputFileName /var/log/tomcat6/initd.log

$InputFileTag initd

$InputFileStateFile stat-initd

$InputFileSeverity info

$InputFilePersistStateInterval 25000

$InputRunFileMonitor

## Tomcat的localhost.log路径,根据实际情况修改:

$InputFileName /var/log/tomcat6/localhost.log

$InputFileTag localhost-log

$InputFileStateFile stat-localhost-log

$InputFileSeverity info

$InputFilePersistStateInterval 25000

$InputRunFileMonitor

## Tomcat的manager.log路径,根据实际情况修改:

$InputFileName /var/log/tomcat6/manager.log

$InputFileTag manager

$InputFileStateFile stat-manager

$InputFileSeverity info

$InputFilePersistStateInterval 25000

$InputRunFileMonitor

## 注意syslog日志服务器接收地址,根据实际情况修改:

if $programname == 'catalina-log' then @10.x.x.x:514;BiglogFormatTomcat

if $programname == 'catalina-log' then ~

if $programname == 'catalina-out' then @10.x.x.x:514;BiglogFormatTomcat

if $programname == 'catalina-out' then ~

if $programname == 'host-manager' then @10.x.x.x:514;BiglogFormatTomcat

if $programname == 'host-manager' then ~

if $programname == 'initd' then @10.x.x.x:514;BiglogFormatTomcat

if $programname == 'initd' then ~

if $programname == 'localhost-log' then @10.x.x.x:514;BiglogFormatTomcat

if $programname == 'localhost-log' then ~

if $programname == 'manager' then @10.x.x.x:514;BiglogFormatTomcat

if $programname == 'manager' then ~

注:通过Rsyslog配置日志接收端的时候,如上示例@10.x.x.x:514,用于指定接收日志的服务器的协议、IP地址和端口号。使用@代表走UDP协议,使用@@代表走TCP协议,冒号后面的514代表接收端口。

第三步:重启Rsyslog服务,日志采集开始工作

service rsyslog restart

此时可以通过观察系统中的Rsyslog日志,确定是否正常工作。

cat /var/log/messages |grep rsyslog

————————————————

版权声明:本文为CSDN博主「xianjie0318」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xianjie0318/article/details/72920400


Linux 2021-09-01 06:38:19 通过 网页 浏览(53)

共有0条评论!

发表评论