一、日志概述

1、rsyslog简介

   syslog是日志收集存储系统,负责记录遵守此服务的内核、程序的日志信息。可以理解为编年体的日志记录信息,一般记录为:“日期时间,主机,进程:事件”。syslog不仅可以记录本地的系统日志,也可以通过tcp, udp协议记录远程主机的程序日志信息。


syslog:系统日志,是一种服务,有两个进程

   syslogd:记录应用程序相关的日志

   klogd:记录相关的日志


rsyslog:是syslog的升级版,使用多线程并发记录本地或远程日志,支持存储日志信息在MySQL,PGSQL, Oracle等RDBMS中。同时拥有强大的过滤器功能,可以对日志中任意内容进行过滤。

   rsyslog是CentOS 6以后的系统使用的日志系统,与之前的syslog日志系统相比,具有以下优点:

     支持多线程

     支持TCP、SSL、TLS、RELP等协议

     强大的过滤器,可实现过滤日志信息中的任意部分

     支持自定义输出格式

     适用于企业级别日志记录需求

     模块化


日志的记录格式:

   日期时间 主机 进程[pid]:事件内容


2、rsyslog的一些概念 

   系统上的应用程序指定某一信道记录日志,信道默认已经设定了日志的记录级别,一旦应用程序产生了日志信息,通过该信道就会把日志文件记录在指定的本地文件、数据库或远程rsyslog服务器中。

当然应用程序输出的日志一般也会按照级别划分,比如sshd_conf中就定义了信道为authpriv,级别为info的日志输出: 
# Logging — SyslogFacility AUTHPRIV — #LogLevel INFO


3、rsyslog支持的facility与priority

facility:设施、信道

   从功能或程序上对日志进行分类,并由专门的工具负责记录其日志

常用的facility:
      lpr: 打印相关的日志
     auth: 认证相关的日志
     user: 用户相关的日志
     cron: 计划任务相关的日志
     kern: 内核相关的日志
     mail: 邮件相关的日志
     mark: 标记相关的日志
     news: 新闻相关的日志
     uucp: 文件copy相关的日志
   daemon: 系统服务相关的日志
  authpri: 授权相关的日志
 security: 安全相关的日志
   syslog: 由syslogd服务产生的日志信息,虽然服务名称改为rsyslogd,但是很多配置都还是沿用了syslogd的,这里并没有修改服务名
 local0-local7:自定义相关的日志信息(自定义时可以使用通配符)
priority:级别
debug           #有调式信息的,日志信息最多
info            #一般信息的日志,最常用
notice          #最具有重要性的普通条件的信息
warning, warn   #警告级别
err, error      #错误级别,阻止某个功能或者模块不能正常工作的信息
crit            #严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert           #需要立刻修改的信息
emerg, panic    #内核崩溃等严重信息
###从上到下,级别从低到高,记录的信息越来越少,如果设置的日志内性为err,则日志不会记录比err级别低的日志


二、rsyslog配置

1、程序环境

程序包:rsyslog

配置文件:/etc/rsyslog.conf, /etc/rsyslog.d/*.conf

主程序:/usr/sbin/rsyslogd

模块路径:/lib64/rsyslog/

Unit File:/usr/lib/systemd/system/rsyslog.service


2、配置文件/etc/rsyslog.conf格式详解

由三部分组成,必须严格按照配置段位置添加配置

[12:58 root@centos6.8~]# grep "####" /etc/rsyslog.conf
#### MODULES ####
#### GLOBAL DIRECTIVES ####
#### RULES ####

MODULES:定义装载的模块,如接下来的使用mysql模块记录日志则需要在这里配置

GLOBAL DIRECTIVES:定义了全局的环境

RULES:定义了记录日志的设施以及等级等信息

  定义规则的格式为:

     facility.priority  Target


facility可以使用的通配符:

   *:所有

   ,:列表,如f1,f2,f3...

   !:取反         

        

priority可以使用的通配符:

   *:所有日志级别

 none:没有任何级别,也就是不记录日志信息

             

Target:目标,指日志保存的位置

    可以使用的有:

        文件,如/var/log/messages

      用户:* 表示当前登录系统的所有用户

      日志服务器:@SERAVER_IP

      管道:| COMMAND

例如:

mail.info /var/log/maillog 

       表示将mail产生的info日志级别以上的信息都记录在/var/log/maillog文件中

mail.=info  表示仅记录info级别日志

mail.!info  表示记录info以下级别的日志 

*.info     表示所有设施的info级别

mail,news.info  表示mail和news都使用info级别


3、配置文件/etc/rsyslog.conf详解

#### MODULES 日志的模块####
$ModLoad imuxsock   #imuxsock是模块名,支持本地系统日志的模块
$ModLoad imklog     #imklog是模块名, 支持内核日志的模块
#$ModLoad immark    #immark是模块名,支持日志标记
#$ModLoad imudp     #imupd是模块名,支持udp协议
#$UDPServerRun 514  #允许514端口接收使用UDP和TCP协议转发过来的日志
#$ModLoad imtcp     #imtcp是模块名,支持tcp协议
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####定义全局日志格式的指令
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定义日志格式默认模板
$IncludeConfig /etc/rsyslog.d/*.conf   #载入rsyslog.d文件中所有以conf结尾的文件
#### RULES ####
*.info;mail.none;authpriv.none;cron.none    /var/log/messages
#####记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间#任务相关的信息除外
authpriv.*             /var/log/secure
#####authpriv验证相关的所有信息存放在/var/log/secure
mail.*                -/var/log/maillog
#####邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大
cron.*                /var/log/cron
####计划任务有关的信息存放在/var/log/cron
*.emerg                * (*表示所有用户)
###记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人
uucp,news.crit        /var/log/spooler
####记录uucp,news.crit等存放在/var/log/spooler
local7.*              /var/log/boot.log
####本地服务器的启动的所有日志存放在/var/log/boot.log中


三、日志收集、分析工具

分析单机产生的日志

  rsyslog产生的日志

     把日志记入(RMDB)mysql数据库

     使用loganalyzer分析

  httpd产生的日志

     使用webanalyzer或awstats