1、启用日志服务:
[root@www ~]#/etc/init.d/rsyslog start (redhel 6)
[root@www ~]#/etc/init.d/syslog  start (redhel 5)


2、日志通常存放路径

[root@www ~]#ls /var/log/ --此目录下很多系统日志都存放在此
/var/log/messages --非常重要的日志文件,几乎所有系统发生的重要错误都会记录在此
/var/log/secure --ssh ftp telnet pop3 pam等有关
/var/log/dmesg --开机时核心检测过程中所产生的信息
/var/log/cron --查看时间任务有关的日志
/var/log/wtmp --用last查看,不能直接cat
/var/log/btmp --用lastb查看,不能直接cat
/var/log/lastlog --用lastlog查看
/var/log/boot.log --系统启动过程日志记录存放
/var/log/rpmpkgs --rpm相关
/var/log/maillog --mail相关
/var/log/spooler --news,uucp
/var/log/acpid --高级电源管理
/var/log/yum.log --yum程序相关的日志

连接符号
. 记录大于等于此等级
.= 只记录等于此等级的信息
.! 不等于此等级,也就是记录此等级之外的信息

(1)只记录mail的info级别信息到/var/log/newmaillog
mail.=info /var/log/newmaillog

(2)记录时间任务的info级别以上的所有信息(除了err外)到/var/log/newcron
cron.info;cron.!err /var/log/newcron

(3)把ssh的日志单独记录到/var/log/ssh
提示 local0-local7是自定义的日志设备,可以使用其中一种
如果拖管到xinetd下,可以这样做:
log_type =syslog local5 info
然后在syslog的主配置文件里加上
local5.info /var/log/ssh

如果没有ssh托管到超级守护进程的话配置如下

[root@www ~]#vim /etc/ssh/sshd_config

SyslogFacility local5 --修改成local5,把ssh的日志定义由local5来记录


[root@www ~]#/etc/init.d/sshd restart --重启使之生效


[root@www ~]#vim /etc/rsyslog.conf  

local5.* /var/log/ssh --添加加一句


[root@www ~]#/etc/init.d/rsyslog restart --重启后/var/log/ssh文件被自动创建

2、日志集中化管理
如果想将其他机器的日志全部发送到一台服务器上收集该如何配置。
假设客户端ip:10.10.10.10 服务器上ip:10.10.10.254现在想将客户端上的ssh日志自动发送到服务器上保存。
(1)在客户端10上的配置
vim /etc/ssh/sshd_config
修改:SyslogFacility local5 ---------local5是自己自定义的,自定义范围有local0---local7

vim /etc/rsyslog.conf
添加一项
local5.* @@10.10.10.254:514 --------指定服务器IP和端口

然后刷新服务:/etc/init.d/rsyslog reload (restart)

(2)在服务器上254配置
vim /etc/rsyslog_conf
打开远程接收日志功能:
$ModLoad imtcp
$InputTCPServerRun 514
然后添加一项:
local5.* /var/log/remotessh.log ---------后面的路径和文件可以自己自定义,但是local5必须和前面定义的一样

保存然后刷新服务或者重启服务:

[root@www ~]#/etc/init.d/rsyslog reload (restart)

此时当有计算机通过ssh链接到客户端10时日志全部保存在服务器254下的/var/log/下的remotessh.log文件里面


3、日志切割论转备份
rotate
默认情况以下日志每过一个星期将自动论转备份。
/var/log/messages
/var/log/cron
/var/log/boot.log
/var/log/maillog
/var/log/secure


(1)配置全局论转备份文件
[root@www ~]#vim /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly --默认是一个星期rotate一次

# keep 4 weeks worth of backlogs
rotate 4 --默认保留4份备份文件

# use date as a suffix of the rotated file
dateext --rhel6里的新参数,表示轮转后,名字后不再以.1,.2这样的结尾,而以时间来结尾,时间格式也可以由dataformat参数来设定

# create new (empty) log files after rotating old ones
create --rotate后,创建一个新的代替

# uncomment this if you want your log files compressed
#compress --默认没有打开日志压缩功能

# RPM packages drop log rotation information into thisdirectory
include /etc/logrotate.d --这表示/etc/logrotate.d目录下的所有配置文件都生效

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp { --针对wtmp单独的配置,这里是绝对路径
monthly --一个月rotate一次,取代上面的全局配置里的一个星期一次
minsize1M --指定最小大小为1M,才rotate,就算大小到了,但时间没到,不轮转;如果时间到了,大小没到,也不轮转;要两个条件都满足才轮转
create 0664root utmp --定义创建的为属性为0664,属主为root,属组utmp
rotate1 --保留一个
}

/var/log/btmp {
missingok
monthly
create 0600root utmp
rotate1
}

***做原理测试:
把主配置文件里的dateext参数给注释掉,再来做下面的测试;如果不注释,时间也不变的话,就不会轮转出4个文件出来,因为名字一样

[root@www ~]#logrotate -f /etc/logrotate.conf --强制轮转,然后可以看到/var/log/下很多时间都开始轮转了


*****如果想在rotate论转之前进行备份或者执行其他脚本,该如何实现?
结构如下:
sharedscripts
prerotate          -----不一样的地方****
    xxxxx             --轮转之前执行XXXX
endscript

sharedscripts
postrotate          - ----不一样的地方***
     xxxxx          --轮转之后执行xxxx
endscript

(2)例题:
[root@www ~]#vim /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler/var/log/boot.log /var/log/cron{                      --对哪些日志文件进行定义
sharedscripts                                       --脚本开始
postrotate                                            --表示rotate结束
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2>/dev/null || true
endscript                                              --脚本结束

--------上面的/bin/kill -HUP的这两句其实就是做了/etc/init.d/syslog reload
----------为什么轮转完了,要对rsyslog服务进行kill -HUP,假设一个服务使用的日志为/var/log/aaa.log  ,对其手动mv /var/log/aaa.log /var/log/aaa.log.1 然后再touch /var/log/aaa.log ,请问新的日志会记录到哪个日志文件
****结果:还会记录到/var/log/aaa.log.1,因为mv后inode不变
解决方法:再加一步 kill -HUP `cat xxx.pid`
因为如果aaa.log轮转成aaa.log.1,又新create一个aaa.log,如果不reload的话,则新的日志还是会记录到aaa.log.1里去,只有reload后,才会记录到新的aaa.log里


*******如果想程序论转完成之后发送邮件告知管理员,该如何配置
# vim /etc/logrotate.d/ssh  --对ssh这个子配置文件进行邮件通知
/var/log/ssh {
rotate 2
missingok
minsize 2M
create 0664 root root
sharedscripts
postrotate
kill -HUP `cat /var/run/sshd.pid`
echo "ssh.2 is gone, ssh.1 变成了ssh.2 ,ssh 变成 了ssh.1 " |mail -s'ssh日志轮转了' user1
endscript
}

思考题:
如果现在针对ssh服务做日志轮转,要求每两天日志轮转一次,保留所有的日志,并且以时间来对其分类

[root@www ~]#vim /test/1.sh
#!/bin/bash
mv /var/log/ssh/ssh.log /var/log/ssh/`date +%F`.ssh.log
touch /var/log/ssh/ssh.log
kill -HUP `cat /var/run/sshd.pid`
然后把上面的脚本用crontab实现每两天做一次
crontab -e

1 1 */2 * * run-parts /test/

--------表示每两天的1点1分钟进行执行/test/目录下的脚本