# 系统日志服务

 如果某些程序没有自己提供日志功能,系统日志可为其提供日志功能,但有些程序可自行提供日志工能,如httpd
         syslog:
                    syslogd:system
                    klogd:kernel
         rsyslog:syslog的升级版,centos6上使用
                    多线程
                    可为远程主机记录日志
                    支持加密远程传输
                    支持mysql,pgsql,oracle实现日志存储
                    强大的过滤器,可实现过滤日志中的任何部分
                    自定义输出格式

rsyslog程序环境

 主程序:rsyslogd
 配置文件:/etc/rsyslog.conf
 服务脚本:/etc/rc.d/init.d/rsyslog

日志收集

 facility:
 将多个应用程序的日志统一成一个数据流放置在rsyslog中,多个应用程序一般与系统某个功能相关
 系统中有很多不同的facility,如与安全相关的facility是authpriv,将所有与安全相关的程序的日志放入同一日志

/etc/rsyslog.conf配置文件

默认情况下主配置文件/etc/rsyslog.conf由3部分组成:

1) #### MODULES ####  --->启动/sbin/rsyslogd要加载的模块
    格式:$ModLoad module-name #注释
                 $ModLoad 是关键字(/sbin/rsyslogd程序中定义的变量名)
                 module-name:出现在/lib64/rsyslog/ 中的模块名称,记住不带.so
2)  #### GLOBAL DIRECTIVES #### ----->全局规则设定
     格式:
           #注释
           规则内容
      例如:
         # Include all config files in /etc/rsyslog.d/
         $IncludeConfig /etc/rsyslog.d/*.conf
         含义为启动时要读取/etc/rsyslog.d/中所有以.conf为结尾的文件
3) #### RULES #### ----->明细程序日志记录设定
   格式:
       #注释
       facility.priority         target

        facility:可理解为“产生日志对象”,例如:authpriv 是登陆认证的,mail 是邮件系统的。
                    auth
                    authpriv
                    cron
                    daemon
                    kern
                    lpr
                    mail
                    mark
                    news
                    security
                    user    
                    uucp
                    syslog
                    local0-local7(用户可自定义使用的facility)

        priority:指定的是日志级别,centos使用的日志级别如下,由低到高为:
                    debug,
                    info
                    notice
                    warning
                    error
                    critial
                    alert
                    emergency(panic)
      指定级别:
           *:所有级别
           none:没有级别
           priority:此级别及更高级别的日志信息
           =priority:仅此级别的信息

        级别越低产生的日志越明细越多,级别越高产生的日志越危险越少。
        指定级别的方式:
               *: 所有级别
               none: 没有级别,就是不记录的意思
               priority: 比此级别低的(包含该级别的)所有日志信息都会记录
               =priority: 仅记录指定级别

    target:将日志记录于指定的目标地点,可以有:
         系统文件中,例如:/var/log/secure
         用户:将日志信息通知给用户。
              例如:系统默认emerg等级的日志就显示给系统上登陆用户:
               # Everybody gets emergency messages
               *.emerg                                                 *
         日志服务器:使用 @SERVER_ADDRESS 定义日志服务器地址,@@表示使用tcp514端口,@表示使用udp514端口
         管道:通过管道传递给某些命令。 | COMMAND
         在target前使用“-”表示异步写入

动态创建日志文件以及日志翻滚

    1、可以在配置文件的RULES中配置使用动态创建日志文件

            例如根据来源IP和日志创建不同的文件和日志文件名

            $template DynamicFile,"/var/log/mylog/%FROMHOSTIP%/%$YEAR%/%$MONTH%/%$YEAR%-%$MONTH%-%$DAY%.log"
         *.* ?DynamicFile
             #声明template DynamicFile并引用template。

2、使用日志翻滚,按照日志的大小或者时间来创建,压缩,删除,发送日志文件
        /var/log/log-file {
            monthly
            rotate 5
            compress
            delaycompress
            missingok
            notifempty
            create 644 root root
            postrotate
            /usr/bin/killall -HUP rsyslogd
            endscript
}

记录系统中各个用户的操作记录
vi /etc/bashrc 加入如下内容:

export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'

source /etc/bashrc