注意:

  • 关闭selinux(执行rsyslog、logger、logrotate时都关闭selinux)
    /etc/selinux/config中设置, 修改SELINUX为disabled , 重启 reboot(一定要重启虚拟机)
    可以使用getenforce来查看如果是disabled表示是关闭的
[root@rhel1 ~]# getenforce
Disabled
  • 关闭防火墙(转储时,服务器一定要关闭防火墙)
service  iptables stop

rsyslog:

rsyslog系统日志由系统服务rsyslog统一管理
rpm -q rsyslog来查看安装,rsyslogd -v查看版本
主要程序:/sbin/rsyslogd、配置文件:/etc/rsyslog.conf

配置文件语法日志设备(类型).日志级别 日志处理方式
例如:local2.info /opt/local.log
意思就是将local2的日志级别大于等于info的日志都写入/opt/local.log

配置文件里面除了注释和空格之外的内容如下:(格式如下)

[root@rhel1 ~]# vi /etc/rsyslog.conf
[root@rhel1 ~]# grep -v ^# /etc/rsyslog.conf |grep -v ^$
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

在这里插入图片描述
日志级别:
NONE: 什么都不记录
EMERG(紧急):会导致主机系统不可用的情况
ALERT(警告):必须马上采取措施解决的问题
CRIT(严重):比较严重的情况
ERR(错误):运行出现错误
WARNING(提醒):可能会影响系统功能的事件
NOTICE(注意):不会影响系统但值得注意
INFO(信息):一般信息
DEBUG(调试):程序或系统调试信息等
从下到上,级别从低到高,记录的信息越来越少

连接符号
. :记录大于等于后面的级别日志
.=:只记录等于后面的级别日志
.!=:只记录不等于后面的级别日志
日志处理方式
本地文件:通常就是文件的绝对路径
打印机:例如 /dev/lp0 这个打印机装置
用户名称:显示给用户
远程主机:例如 @202.100.100.1
*:所有在线的用户

logger:

从命令行直接向系统日志文件写入一行信息

[root@rhel1 ~]# echo "test log" | logger -it "test" -p authpriv.info
[root@rhel1 ~]# tail -1 /var/log/secure
Apr  2 20:33:50 rhel1 test[3139]: test log

logger发送(记录)日志,rsyslog根据规则来处理。比如 echo "test log" | logger -it "test" -p authpriv.info
意思就是logger将test log发送出去,rsyslog根据/etc/rsyslog.conf中的规则来判断将test log如何处理,
authpriv.info,表示将test log添加到/var/log/secure文件中。于是在/var/log/secure文件中就能查看到这一行内容

日志集中管理及logrotate:

集中管理日志(客户机的日志消息发送给服务器的日志文件中)
前提条件: 两台机器都有rsyslog,服务器的防火墙是关闭的,两台机器的selinux是关闭的。

如下:
(我的主机名为为rhel1、IP为172.16.8.9的机器为客户机,主机名rhel2、IP为172.16.8.10的机器为服务器)

客户机配置:

  • 修改规则,在规则最后一行加上一行*.* @172.16.8.10
[root@rhel1 ~]# vi /etc/rsyslog.conf
...........................................
#### RULES ####
............................................
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
*.*                                                     @172.16.8.10
..............................................
  • 然后重启rsyslog服务(一定要重启)
[root@rhel1 ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

服务器配置:

  • 修改配置文件/etc/rsyslog.conf把以下两行注释取消
$ModLoad imudp
$UDPServerRun 514
  • 配置规则,在规则最后一行加上一行*.* /opt/all.log
[root@rhel2 ~]# vi /etc/rsyslog.conf
.....................................................................
#### RULES ####
......................................................................
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
*.*                                                     /opt/all.log
..........................................................................
  • 重启rsyslog服务 (一定要重启)
[root@rhel2 ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

日志的转储功能:当日志到达一定大小,进行转储
比如:a.log 到达100MB时进行mv a.log a.log_日期,touch a.log(接下来日志又写进a.log中去)
logrotate主要配置文件/etc/logrotate.conf
主要参数:
daily 、weekly、monthly、yearly等-----多久转储一次
rotate count -----旧日志保留多少份
size size ------日志到达多少大小开始转储
create 600 -----可以设置权限
prerotate 、 endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
次要配置文件/etc/logrotate.d
不同的日志文件可以通过不同的次要配置文件来写转储的规则
创建 /etc/logrotate.d/下的文件
(注意(很重要):转储完后自动重启rsyslog,否则,日志还是写入旧 的日志文件中去)

转储操作:
在服务器端操作

  • 创建 /etc/logrotate.d/下的文件
[root@rhel2 ~]# vi /etc/logrotate.d/log_all

/opt/all.log{                        #表示转储哪个文件
        daily                         #表示多久转储一次
        size 5k                     #表示达到多大进行转储
        rotate 2                       #表示旧日志保留几份
        prerotate
                service rsyslog restart
        endscript
}
  • 重启rsyslog服务
[root@rhel2 ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
  • 手工进行转储
    (为了演示,所以手工进行)
[root@rhel2 ~]# logrotate /etc/logrotate.conf
[root@rhel2 ~]# 

/opt/all.log到达5k时会进行转储

[root@rhel2 ~]# ll -h /opt/all.log
-rw------- 1 root root 5.6K Apr  2 20:45 /opt/all.log

转储文件带日期。

[root@rhel2 ~]# ll /opt/
total 16
-rw-------  1 root root    0 Apr  2 20:46 all.log
-rw-------  1 root root 6070 Apr  2 20:46 all.log-20190402

为了测试只保留2份旧日志,下面我修改时间来验证

[root@rhel2 ~]# date -s "2019-04-03 10:00:00"
Wed Apr  3 10:00:00 CST 2019

增加/opt/all.log文件内容,到它重新大于5k,再查看是否转储

[root@rhel2 ~]# ll -h /opt/
total 28K
-rw-------  1 root root 8.2K Apr  3 10:07 all.log
-rw-------  1 root root 7.7K Apr  3 10:05 all.log-20190402
[root@rhel2 logrotate.d]#  logrotate   /etc/logrotate.conf
[root@rhel2 logrotate.d]# 
[root@rhel2 ~]# ll  /opt/
total 28
-rw-------  1 root root    0 Apr  3 10:08 all.log
-rw-------  1 root root 7849 Apr  3 10:05 all.log-20190402
-rw-------  1 root root 8800 Apr  3 10:08 all.log-20190403

再修改时间。再查看

[root@rhel2 ~]# date -s "2019-04-04 10:00:00"
Thu Apr  4 10:00:00 CST 2019

使/opt/all.log文件内容增加,直到大于5k,查看转储情况

[root@rhel2 ~]# ll -h  /opt/
total 36K
-rw-------  1 root root 7.0K Apr  4 10:02 all.log
-rw-------  1 root root 7.7K Apr  3 10:05 all.log-20190402
-rw-------  1 root root  11K Apr  4 10:01 all.log-20190403

转储

[root@rhel2 logrotate.d]#  logrotate   /etc/logrotate.conf
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
[root@rhel2 logrotate.d]# 

查看转储情况:
(如下,发现时间为20190402的日志文件没有了,换成了最新的两份日志文件,所以说也实现了只保留两份旧日志文件)

[root@rhel2 ~]# ll -h  /opt/
total 28K
-rw-------  1 root root    0 Apr  4 10:02 all.log
-rw-------  1 root root  11K Apr  4 10:01 all.log-20190403
-rw-------  1 root root 7.4K Apr  4 10:02 all.log-20190404
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐