一、日志的作用
用于记录系统、运行程序中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
Linux系统日志路径:/var/log/messages(记录很多类型的日志)
(修改终端的Scrollback szie值可以看到历史操作记录)
(对于操作日志,会话关闭之后也不能查看历史操作信息的,可以写到文件中去,便于显示排错)
![](/qrcode.jpg)
二、日志文件的分类(内核及系统日志、用户日志、程序日志)
1.内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
软件包:rsyslog-5.8.10-8
主要程序:/sbin/rsyslogd(此程序完成服务,程序启动会产生进程)
配置文件:/etc/rsyslog.conf(程序根据配置文件工作)
系统日志保存位置
默认位于:/var/log 目录下
主要日志文件介绍
内核及公共消息日志:/var/log/messages
计划任务日志:/var/log/cron
系统引导日志:/var/log/dmesg
邮件系统日志:/var/log/maillog
保存了用户登录、退出系统等相关信息(数据文件----)
/var/log/lastlog:最近的用户登录事件
[root@111 log]# cat lastlog
]¼\pts/1172.16.2.504甜pts/1172.16.2.50X䛰ts/2172.16.2.50[root@111 log]#
[root@111 log]# file lastlog------------文件是数据文件,不是文本文件
lastlog: data
[root@111 log]# last--------查看命令
/var/log/wtmp:用户登录、注销及系统开、关机事件
[root@111 log]# file wtmp----------数据文件
wtmp: data
[root@111 log]# w---------查看命令
20:31:26 up 2:28, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.16.2.50 19:13 0.00s 0.06s 0.00s w
root pts/1 172.16.2.50 19:32 57:24 3.64s 0.00s /usr/local/mysql/b
/var/run/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
用户登录分析
who、w、users、last、ac、lastlog(都是读取以上数据文件内容显示出来的结果)
日志记录的一般格式
[root@localhost log]# tail -1 /var/log/messages
Jan 11 10:41:02 localhost abrtd: Init complete, entering main loop
(时间、主机名、子系统名、消息字段)
语法(规则)
日志设备(类型).(连接符号)日志级别 日志处理方式(action)
可以自己修改配置文件规则,但是要重启rsyslog服务
日志级别
NONE:什么都不记录
EMERG(紧急):会导致主机系统不可用的情况
ALERT(警告):必须马上采取措施解决的问题
CRIT(严重):比较严重的情况
ERR(错误):运行出现错误
WARNING(提醒):可能会影响系统功能的事件
NOTICE(注意):不会影响系统但值得注意
INFO(信息):一般信息
DEBUG(调试):程序或系统调试信息等
从下到上,级别从低到高,记录的信息越来越少
连接符号
. :记录大于等于后面的级别日志
.=:只记录等于后面的级别日志
.!=:只记录不等于后面的级别日志
了解日志处理方式
本地文件:通常就是文件的绝对路径
打印机:例如 /dev/lp0 这个打印机装置
用户名称:显示给登录中的某些用户
远程主机(日志服务器):例如 @202.100.100.1
*:所有在线的用户
2.用户日志
记录系统用户登录及退出系统的相关信息
3.程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
三、logger(主动记录日志工具)
通过logger命令发送日志内容给rsyslog,rsyslog再将内容做进一步处理
logger:从命令行直接向系统日志文件写入一行信息,需要标准输入,可以使用管道
例如:logger -it "testlog" -p local2.info 会卡住等待输入日志的内容
-p:指定规则
-it:指定日志模式
注意:当添加一条日志内容,而内容没有生效时,看SELinux是否关闭
修改配置文件/etc/selinux/config ,将enforcing改为disabled
四、日志管理策略:
1.及时作好备份和归档
2.控制日 志访问权限
日志中可能会包含各类敏感信息,如账户、口令等
3.集中管理日志
使用日志服务器便于日志的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
应用示例:
将客户机B中所有日志消息,自动发送到服务器A的日志文件中
在服务器A配置:
1、修改/etc/rsyslog.conf文件,把以下2项的注释取消(看开放TCP还是UDP)---#去掉
$ModLoad imudp
$UDPServerRun 514
2、重启rsyslog服务
service rsyslog restart
在客户机B配置:
1、修改/etc/rsyslog.conf文件,在最后加一行,内容如下:
*.* @服务器IP
2、重启rsyslog服务
service rsyslog restart
注意事项:
一个@是UDP协议传输 两个@@是用TCP协议传输
注意防火墙的开关
[root@centos6 ~]# service iptables status
iptables: Firewall is not running.
在客户机通过logger添加日志
在服务器上查看日志(日志处理方式根据服务端的规则)
五、日志转储功能(logrotate):与rsyslog无关
logrotate把旧的日志文件删除,并创建新的日志文件,叫做"转储"。可以根据日志文件的大小,天数来转储(周期性任务:这个过程一般通过crond进程来执行)logrotate还可以用于压缩日志文件
logrotate的主配置文件:/etc/logrotate.conf
logrotate -v /etc/logrotate.conf
-f:强制转储 -v:查看转储输出的信息
Logrotate的次要配置文件(每个文件代表一种日志的配置):/etc/logrotate.d/*
次要配置文件内容:
要转储的文件(可以有多个){
参数
postrotate
service rsyslog restart-------转储完之后,自动重启rsyslog服务
endscript
}
参数:
compress 通过gzip 压缩转储以后的日志
create mode owner group 转储文件使用指定的文件模式创建新的日志文件(指定文件属主和属组)
mail address 把转储的日志文件发送到指定的E-mail 地址
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0是没有备份,5是保留5个备份
size size 当日志文件到达指定的大小时才转储,可以指定byte以及KB(sizek)或者MB(sizem)
(如果设定参数是每天转储和大于20M转储的话,假设今天文件大小已经大于20M,那么会转储一次,过一段时间又到达了20M,转储是不会进行的)
六、阶段试验
实验1、如果设定参数是每天转储和大于1k转储的话,假设今天文件大小已经大于1k,那么会转储一次,过一段时间又到达了1k,转储是不会进行的,因为设定的是每天一次
步骤1、
对于local2.*的日志都存放到/var/log/local2.log文件中
[root@111 log]# ls | grep local2--------没有重启rsyslog服务,文件没有生成
[root@111 log]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@111 log]# ls | grep local2
local2.log
步骤2、
[root@111 logrotate.d]# pwd
/etc/logrotate.d
[root@111 logrotate.d]# vim local2
[root@111 logrotate.d]# cat local2
/var/log/local2.log{
daily
rotate 3
size 1k
postrotate
service rsyslog restart-------转储完之后,自动重启rsyslog服务
endscript
}----------------------此时是没有重新启动rsyslog服务
步骤3、向local2.info文件中添加内容,使其大小达到1K
[root@111 log]# ll -h local2.log
-rw------- 1 root root 1.5K Mar 26 20:07 local2.log
[root@111 log]# logrotate -v /etc/logrotate.conf
[root@111 log]# ll -h local2.log
-rw------- 1 root root 0 Mar 26 20:08 local2.log
[root@111 log]# ll -h local2.log*
-rw------- 1 root root 0 Mar 26 20:08 local2.log
-rw------- 1 root root 1.5K Mar 26 20:07 local2.log-20190326
步骤4、现在文件已经转储完成一次,如果继续增加内容,看是向哪个文件里面增加、如果再次达到1k,看是否还会转储
[root@111 log]# ll -h local2.log*
-rw------- 1 root root 1.1K Mar 26 20:09 local2.log
-rw------- 1 root root 1.5K Mar 26 20:07 local2.log-20190326
[root@111 log]# logrotate -v /etc/logrotate.conf
rotating pattern: /var/log/local2.log 1024 bytes (2 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/local2.log
log needs rotating
rotating log /var/log/local2.log, log->rotateCount is 2
dateext suffix '-20190326'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/local2.log-20190326 already exists, skipping rotation
[root@111 log]# ll -h local2.log*------------------------------没有新的转储文件生出
-rw------- 1 root root 1.1K Mar 26 20:09 local2.log
-rw------- 1 root root 1.5K Mar 26 20:07 local2.log-20190326
实验2、将主机2上与计划任务相关的日志都发到主机1上去;修改主机1配置文件,将计划任务相关的日志记录到日志文件/var/log/newcron.log,注意该文件不能被随意删除和篡改;设定该日志文件的轮转,每周轮转一次,若该文件大于5k,则自动轮转,保留6个备份
主机1:客户端
主机2:服务端
在服务器上配置:
1、修改/etc/rsyslog.conf文件,把以下2项的注释取消---#去掉,增加计划任务日志文件
2、重启rsyslog服务
[root@111 logrotate.d]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
在客户机上配置:
1、修改/etc/rsyslog.conf文:件,在最后加一行,内
容如下:
*.* @服务器IP
2、重启rsyslog服务
[root@centos6 ~]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
3、服务端次要配置文件修改/etc/logrotate.d
[root@111 logrotate.d]# vim newcron
[root@111 logrotate.d]# cat newcron
/var/log/newcron.log{
weekly
create 0600 root root
size 5k
rotate 6
postrotate
service rsyslog restart
endscript
}
测试
在客户端输入
[root@centos6 ~]# echo 123456789 | logger -it "test" -p cron.info
在服务端查看,并向文件添加内容,达到5k,然后转储
[root@111 logrotate.d]# tail -3 /var/log/newcron.log
Apr 4 14:56:14 centos6 test[2306]: 123456789
[root@111 log]# ll -h newcron.log
-rw------- 1 root root 5.8K Mar 26 20:41 newcron.log
[root@111 log]# logrotate -v /etc/logrotate.conf
[root@111 log]# ll -h newcron.log*
-rw------- 1 root root 0 Mar 26 20:42 newcron.log
-rw------- 1 root root 5.9K Mar 26 20:42 newcron.log-20190326