菜单
本页目录

2 日志管理

## 两个服务都处理日志消息

$ systemd-journald		#默认记入内存
$ rsyslog				#默认记入硬盘

2.1 日志文件的作用

## 日志格式有:
		时间日期		主机名		用户	执行命令	等

/var/log/message				#大多数消息系统日志记录处
/var/log/secure					#安全和身份验证登录相关日志文件
/var/log/maillog				#与邮件相关日志
/var/log/cron					#定时任务相关日志
/var/log/boot.log				#与系统启动相关的消息记录
/var/log/dmesg					#与系统启动相关的消息记录(硬件相关)

例1:检查哪个ip在暴力破解系统用户密码

# 在/var/log/secure文件中查找Failed相关行	awk查找相关列	uniq取消重复	-c统计重复次数
[root@localhost ~]# grep "Failed" /var/log/secure | awk '{print $11}' | uniq -c
     20 192.168.18.1

例2:登录相关文件

/var/log/wtmp			#记录登录次数和持续时间相关信息
/var/log/btmp			#记录登录错误的相关信息

注意:上述两个文件都是二进制文件,无法直接打开读取

设置防火墙过滤规则

练习:将有暴力破解密码意向的IP,通过防火墙过滤

## 步骤:
		设置定时清空防火墙规则,避免过滤自己的IP
		设置防火墙过滤规则		

[root@localhost ~]# crontab -e							#设置定时关闭防火墙规则
	
*/1 * * * * iptables -F

[root@localhost ~]# iptables -A INPUT -i ens33 -s 192.168.18.1 -j DROP		#设置防火墙过滤规则
清空日志
  • 先备份,在清空日志

方法1:通过重定向的方式,覆盖写入文件为空 #inode号不改变

#检查all.log的inode号
[root@localhost ~]# ll -i /var/log/all.log 
16777613 -rw-------. 1 root root 1369 9月  21 14:45 /var/log/all.log
#检查all.log不为空
[root@localhost ~]# tail -n 5 /var/log/all.log 
Sep 21 14:45:01 localhost postfix/qmgr[6866]: 13347FBBC0: removed
Sep 21 14:45:11 localhost sshd[17952]: pam_unix(sshd:session): session closed for user root
Sep 21 14:45:11 localhost systemd-logind: Removed session 94.
Sep 21 14:45:11 localhost sshd[7797]: pam_unix(sshd:session): session closed for user root
Sep 21 14:45:11 localhost systemd-logind: Removed session 32.
#先关闭all.log的a属性,再将空覆盖写入,再将a属性给all.log加上
[root@localhost ~]# chattr -a /var/log/all.log  && > /var/log/all.log  && chattr +a /var/log/all.log 
#检查all文件为空
[root@localhost ~]# cat /var/log/all.log 
#检查all文件inode未改变
[root@localhost ~]# ll -i /var/log/all.log 
16777613 -rw-------. 1 root root 0 9月  21 14:46 /var/log/all.log

方法2:直接删除日志文件,再创建日志文件 #inode号会改变

注意:rsyslog服务无法识别新创建的日志文件,需要重启rsyslog服务

#检查inode号
[root@localhost ~]# ll -hi /var/log/all.log 
16777613 -rw-------. 1 root root 5.4K 9月  21 14:51 /var/log/all.log
#取消文件的a属性,删除,创建,给文件添加a属性
[root@localhost ~]# chattr -a /var/log/all.log  && rm -rf /var/log/all.log  && touch /var/log/all.log  && chattr +a /var/log/all.log 
#检查inode号发生改变
[root@localhost ~]# ll -hi /var/log/all.log 
17150246 -rw-r--r--. 1 root root 0 9月  21 14:52 /var/log/all.log
#重启rsyslog
[root@localhost ~]# systemctl restart rsyslog
#检查rsyslog服务状态
[root@localhost ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2022-09-21 14:53:03 CST; 11s ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 25620 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           └─25620 /usr/sbin/rsyslogd -n

9月 21 14:53:03 localhost.localdomain systemd[1]: Stopped System Logging Service.
9月 21 14:53:03 localhost.localdomain systemd[1]: Starting System Logging Service...
9月 21 14:53:03 localhost.localdomain rsyslogd[25620]:  [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="25620" x-info="htt... start
9月 21 14:53:03 localhost.localdomain systemd[1]: Started System Logging Service.
Hint: Some lines were ellipsized, use -l to show in full.

2.2 日志记录方式

类别:
daemon				#后台进程相关
kern				#内核产生的信息
lpr					#打印系统产生的
cron				#定时相关
mail				#邮件相关
syslog				#日志服务本身的
new					#新闻系统
authpriv			#安全认证
local10~7			#自定义的日志设备
local10-local17		#8个系统保留,程序使用或者用户自定义


级别:数字越小,级别越重

编码		   优先级				严重性
7			debug				信息对开发人员调试程序有用,操作过程中无用
6			info				正常操作信息
5			notice				注意,正常但重要的事件
4			warning				警告,提示如果不采取行动,将会发生错误。比如文件系统使用90%
3			err					错误,阻止某个模块或程序的功能不能正常使用
2			crit				关键的错误,已经影响整个系统或者软件不能正常工作的信息
1			alert				警报,需要立刻修改的信息
0			emerg				紧急,内核崩溃等严重信息

2.3 rsyslog日志服务

## rsyslog日志的配置文件:
		/etc/rsyslog.conf
		/etc/rsyslog.d

#rsyslog.conf
[root@localhost ~]# vi /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog		#记录到内存
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*				#广播
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

2.4 日志输入规则

.info			#大于等于info级别的信息记录
.=级别			#仅记录等于某个级别的日志

.=info          /var/log/info.log			#仅记录info级别的日志
.!级别			#除了某个级别外,记录所有

.!err           /var/log/all.log			#除了err级别外,记录所有
.none				#排除某个类别

mail.none		#所有mail类别的日志都不记录
自定义日志

修改配置文件后,需要重启服务才能启用

在/etc/rsyslog.conf中添加

*.*             /var/log/all.log			#记录所有日志

防止日志删除 添加a属性
$ chattr  +a  /var/log/all.log

3 日志切割、搭建日志收集服务器

3.1 日志切割

日志轮替

旧的日志文件剪切改名,并创建新的日志文件,超过范围则删除(可以通过脚本实现)

logrotate日志轮替配置文件:
		/etc/logrotate.conf

全局规则

[root@localhost ~]# vi /etc/logrotate.conf

weekly				#每周轮替

rotate 4			#轮替次数
		
create				#创建新文件,也可以指定新建文件的权限和所有者所属组

dateext				#使用日期作为后缀切割文件

include /etc/logrotate.d		#包括其他目录文件的规则

局部规则

[root@localhost ~]# vi /etc/logrotate.conf
#局部规则
/var/log/wtmp {					#指定日志文件的路径,名字
    monthly						#每月轮替一次
    create 0664 root utmp		#设置wtmp日志文件的权限,所有者,所属组
        minsize 1M				#日志轮替的最小值,达到最小值才会轮替,否则到时间也不会轮替
    rotate 1					#日志切割后历史文件最多保存一份,不包含当前使用的日志文件
}

/var/log/btmp {
    missingok					#轮替期间,任何错误将被忽略
    monthly
    create 0600 root utmp
    rotate 1
}

注:两者同时存在时,则按照局部规则执行

其它参数说明: 
		monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
		rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。 
		compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
		delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归 档压缩。
		missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
		notifempty: 如果日志文件为空,轮循不会进行。 
		create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志 文件。
		sharedscripts				#关键字之后指定脚本
		prerotate/endscript			#执行命令之前执行			比如取消文件a属性
		postrotate/endscript		#执行命令之后执行			比如重启服务,给文件添加a属性

日志轮替配置文件目录

## /etc/logrotate.d				#日志轮替配置文件目录,子文件中写着不同的局部规则

[root@localhost ~]# ls /etc/logrotate.d
bootlog  chrony  syslog  wpa_supplicant  yum
命令 logrotate
## logrotate			[选项]
		-v					#显示过程
		-f					#强制轮替	(需要指定规则)
#查看指定的轮替规则
[root@localhost ~]# cat /etc/logrotate.d/alog
/var/log/all.log{
	weekly
	rotate	6
	dateext
	sharedscripts
	prerotate
		/usr/bin/chattr -a /var/log/all.log
	endscript
	sharedscripts
	postrotate
		/usr/bin/chattr +a /var/log/all.log
		/usr/bin/systemctl restart rsyslog.service
	endscript
}
#检查当前日志目录下的子文件
[root@localhost ~]# ls /var/log
all.log            btmp           dmesg               maillog            secure            tuned                   vmware-vmsvc.log
anaconda           btmp-20220921  dmesg.old           maillog-20220921   secure-20220921   vmware-network.1.log    wtmp
audit              chrony         firewalld           messages           spooler           vmware-network.2.log    wtmp-20220921
boot.log           cron           grubby_prune_debug  messages-20220921  spooler-20220921  vmware-network.log      yum.log
boot.log-20220921  cron-20220921  lastlog             rhsm               tallylog          vmware-vgauthsvc.log.0  yum.log-20220921
#执行强制轮替
[root@localhost ~]# logrotate -vf /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file alog
.
.
.
.
rotating pattern: /var/log/btmp  forced from command line (1 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/btmp
  log needs rotating
rotating log /var/log/btmp, log->rotateCount is 1
dateext suffix '-20220921'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/btmp-20220921 already exists, skipping rotation
set default create context
#再次检查当前日志目录下的子文件,发现多了一些轮替产生的文件
[root@localhost ~]# ls /var/log
all.log            btmp           dmesg.old           messages           spooler-20220921      vmware-vgauthsvc.log.0
all.log-20220921   btmp-20220921  firewalld           messages-20220921  tallylog              vmware-vmsvc.log
anaconda           chrony         grubby_prune_debug  rhsm               tuned                 wtmp
audit              cron           lastlog             secure             vmware-network.1.log  wtmp-20220921
boot.log           cron-20220921  maillog             secure-20220921    vmware-network.2.log  yum.log
boot.log-20220921  dmesg          maillog-20220921    spooler            vmware-network.log    yum.log-20220921
日志拆分
## split		文件拆分
		-a			#指定输出后缀长度,默认为2个字符
		-d			#指定输出后缀用数字代替
		-b			#指定输出大小:k、m、g
[root@localhost ~]# cp /var/log/lastlog /root/					#复制日志文件到家目录下
[root@localhost ~]# ls											#查看文件
alog  anaconda-ks.cfg  lastlog
[root@localhost ~]# ll -h /root/
总用量 24K
-rw-r--r--. 1 root root  243 9月  21 16:06 alog
-rw-------. 1 root root 1.4K 8月  23 01:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 286K 9月  21 16:20 lastlog
[root@localhost ~]# split -db 50k /root/lastlog 				#以50k拆分,以数字为后缀拆分lastlog
[root@localhost ~]# ll -h /root/								#查看文件
总用量 320K
-rw-r--r--. 1 root root  243 9月  21 16:06 alog
-rw-------. 1 root root 1.4K 8月  23 01:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 286K 9月  21 16:20 lastlog
-rw-r--r--. 1 root root  50K 9月  21 16:21 x00
-rw-r--r--. 1 root root  50K 9月  21 16:21 x01
-rw-r--r--. 1 root root  50K 9月  21 16:21 x02
-rw-r--r--. 1 root root  50K 9月  21 16:21 x03
-rw-r--r--. 1 root root  50K 9月  21 16:21 x04
-rw-r--r--. 1 root root  36K 9月  21 16:21 x05
cat 文件合并
格式:
		cat    	 /拆分文件1		 /拆分文件2		....		/拆分文件n 	>	 合并文件 
[root@localhost ~]# ll -h /root/											#查看文件
总用量 320K
-rw-r--r--. 1 root root  243 9月  21 16:06 alog
-rw-------. 1 root root 1.4K 8月  23 01:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 286K 9月  21 16:20 lastlog
-rw-r--r--. 1 root root  50K 9月  21 16:21 x00
-rw-r--r--. 1 root root  50K 9月  21 16:21 x01
-rw-r--r--. 1 root root  50K 9月  21 16:21 x02
-rw-r--r--. 1 root root  50K 9月  21 16:21 x03
-rw-r--r--. 1 root root  50K 9月  21 16:21 x04
-rw-r--r--. 1 root root  36K 9月  21 16:21 x05
[root@localhost ~]# cat ./x00 ./x01 ./x02 ./x03 ./x04 ./x05 > /root/lalog		#合并文件
[root@localhost ~]# ll -h /root/
总用量 608K
-rw-r--r--. 1 root root  243 9月  21 16:06 alog
-rw-------. 1 root root 1.4K 8月  23 01:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 286K 9月  21 16:22 lalog
-rw-r--r--. 1 root root 286K 9月  21 16:20 lastlog
-rw-r--r--. 1 root root  50K 9月  21 16:21 x00
-rw-r--r--. 1 root root  50K 9月  21 16:21 x01
-rw-r--r--. 1 root root  50K 9月  21 16:21 x02
-rw-r--r--. 1 root root  50K 9月  21 16:21 x03
-rw-r--r--. 1 root root  50K 9月  21 16:21 x04
-rw-r--r--. 1 root root  36K 9月  21 16:21 x05

3.2 远程日志服务器 (可实现日志集中管理)

server端配置

## 1)vim		/etc/rsyslog.conf			#修改配置文件
[root@localhost ~]# vim /etc/rsyslog.conf		#进入配置文件修改
#取消注释以下两行代码
$ModLoad imtcp									
$InputTCPServerRun 514

## 2)重启rsyslog服务

[root@localhost ~]# systemctl restart rsyslog.service
## 3)清空防火墙规则

[root@localhost ~]# iptables -F

客户端配置

## 1)修改主机名

[root@localhost ~]# hostnamectl set-hostname yq
## 2)修改配置文件/etc/rsyslog.conf
		若服务端取消注释的是UDP,则客户端配置文件用一个@		
		若服务端取消注释的是TCP,则客户端配置文件用两个@

[root@yq ~]# vi /etc/rsyslog.conf 
*.*             @@192.168.18.134:514
## 3)重启rsyslog服务,清空防火墙

[root@yq ~]# systemctl restart rsyslog && iptables -F

测试

## #客户端执行添加用户等会记录日志的操作,然后进入服务端查看

#客户端
[root@yq ~]# useradd yq1
[root@yq ~]# useradd yq2
#服务端
[root@localhost ~]# tail -n 10 /var/log/secure				#检查服务端是否记录客服端日志
Sep 21 16:30:59 localhost polkitd[6151]: Registered Authentication Agent for unix-process:15058:566757 (system bus name :1.54 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8)
Sep 21 16:30:59 localhost polkitd[6151]: Unregistered Authentication Agent for unix-process:15058:566757 (system bus name :1.54, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
Sep 21 16:36:08 yq polkitd[6387]: Unregistered Authentication Agent for unix-process:7095:49226 (system bus name :1.27, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
Sep 21 16:38:10 yq useradd[7113]: new group: name=yq1, GID=1000
Sep 21 16:38:10 yq useradd[7113]: new user: name=yq1, UID=1000, GID=1000, home=/home/yq1, shell=/bin/bash
Sep 21 16:38:13 yq useradd[7118]: new group: name=yq2, GID=1001
Sep 21 16:38:13 yq useradd[7118]: new user: name=yq2, UID=1001, GID=1001, home=/home/yq2, shell=/bin/bash
[root@localhost ~]#
[root@localhost ~]# grep yq /var/log/all.log | grep useradd		#检查服务端是否记录客服端日志
Sep 21 16:38:10 yq useradd[7113]: new group: name=yq1, GID=1000
Sep 21 16:38:10 yq useradd[7113]: new user: name=yq1, UID=1000, GID=1000, home=/home/yq1, shell=/bin/bash
Sep 21 16:38:13 yq useradd[7118]: new group: name=yq2, GID=1001
Sep 21 16:38:13 yq useradd[7118]: new user: name=yq2, UID=1001, GID=1001, home=/home/yq2, shell=/bin/bash