Linux系统中的日志管理 ---systemd-journald日志(journalctl命令的用法)和 rsyslog 日志(自定义日志采集路径、更改日志采集格式和日志的远程同步)

一、实验环境

1 | yxy.westos.com : 172.25.254.10
2 | lww.westos.com : 172.25.254.20
3 | yxy.westos.com & lww.westos.com : systemctl stop firewalld.service  ##关闭火墙

二、systemd-journald

1.systemd-journald

服务名称:systemd-journald.service

systemd-journald可移植性高,资源消耗少、结构简单、可扩展、安全性高等优点。

安全性之所以高是因为此程序只负责对日志进行查看而不能对日志进行保存和采集,那么关机后再开机(重启),只能查看到开机后的日志,因为系统之前的日志是保存在内存中的,所以关机后就被清空了,那么再开机时用journalctl是看不到的之前的日志信息的。

命令:journalctl

默认日志存放路径: / run / log
 

 2. journalctl命令的用法

1 | journalctl      
2 |		-n 3 			        ##日志的最新3条
3 |		--since "2020-06-01 12:00:00" 	##显示12:00后的日志
4 |		--until "2020-06-01 12:10:00" 	##显示日志到12:10

1 | journalctl
2 |        -o					##设定日志的显示方式
3 |			short 			经典模式显示日志
4 |			verbose 		显示日志的全部字节
5 |		 	export 			适合传出和备份的二进制格式
6 |		 	json 			js格式显示输出

1 | journalctl
2 |      -p 					##显示制定级别的日志
3 |			#0 	emerg 		系统的严重问题日志
4 |			#1 	alert 		系统中立即要更改的信息
5 |			#2 	crit 		严重级别会导致系统软件不能正常工作
6 |			#3 	err 		程序报错
7 |			#4 	warning 	程序警告
8 |			#5 	notice 		重要信息的普通日志
9 |			#6 	info 		普通信息
10|			#7 	debug 		程序拍错信息     

1 | journalctl
2 |             -F 	PRIORITY 		    ##查看可控日志级别
3 |		-u 	sshd 			    ##指定查看服务
4 |		--disk-usage 			    ##查看日志大小
5 |		--vacuum-size=1G 		    ##设定日志存放大小
6 |		--vacuum-time=1W 		    ##日志在系统中最长存放时间
7 |		-f 			            ##监控日志

1 | journalctl  _TRANSPORT=kernel  ##直接查看该程序产生的日志
2 | journalctl  _PID=***           ##直接查看PID为**的程序产生的日志

3.用journald服务永久存放日志

系统中默认日志在:/run/log/journal中

1 | 默认方式在系统重启后日志会被清理要永久保存日志请完成以下操作: 
2 | mkdir  	  /var/log/journal
3 | chgrp  	  systemd-journal 	/var/log/journal    ##更改目录的所有组
4 | ##/var/log/journal/中的日志信息只能被systemd-journal组所识别
5 | chmod  	  2775 			/var/log/journal
6 | ##使在/var/log/journal目录中出现的文件的所有组自动归属于该目录的所有组
7 | systemctl restart 	systemd-journald.service
8 | 当服务重启日志存放路径会被制定到:/var/log/journal

测试:

1.在操作以上步骤之前查看日志

2.重启系统

3.再次查看日志

4.可以看到日志是不会被保存下来的只能看到重启之后的日志

5.完成以上操作后再次重启系统可以看到日志是被保存下来

三、rsyslog日志

Linux内核由很多的子系统组成,包含网络、文件访问、内存管理等,子系统需要给用户传送一些消息,这些消息内容包括消息的重要来源以及重要性等,所有这些子系统都要把消息传送到一个可以维护的公共消息区,于是产生了rsyslog。

 1.日志类型

1 | auth 		#用户认证日志(登录日志)
2 | authpriv     	#服务认证日志(sshd认证)
3 | cron 		#时间任务日志(定时任务日志)
4 | kern 		#内核类型日志
5 | mail 		#邮件日志
6 | news 		#系统更新信息日志
7 | user 		#用户相关程序日志
8 | local  1-7          #用户自定义日志

2.日志级别

1 | debug 		#程序排错信息
2 | info 		#程序常规运行信息
3 | notice 		#重要信息的普通日志
4 | waring 		#程序警告
5 | err 		#程序报错
6 | crit 		#严重级别会导致系统软件不能正常工作
7 | alert 		#系统中立即要更改的信息
8 | emerg 		#系统的严重问题日志
9 | none 		#不采集

3.系统常用日志存放

1 | /var/log/messages 	#系统服务日志,常规信息,服务报错
2 | /var/log/secure 	#系统认证信息日志
3 | /var/log/maillog 	#系统邮件日志信息
4 | /var/log/cron 		#系统定时任务信息
5 | /var/log/boot.log 	#系统启动日志信息
6 | 配置文件:/etc/rsyslog.conf

4.自定义日志采集路径

1 | vim /etc/rsyslog.conf
2 | 日志类型.日志级别 		日志存放路径
3 | *.* 			/var/log/westos         ##把系统中所有级别的日志存放到westos中
4 | *.*;authpriv.none 	        /var/log/westos 	##把系统中所有级别的日志存放到westos中
							##但是authpriv不存放到westos中

5.如何更改日志采集格式

<1> 定义日志采集格式

1 | vim /etc/rsyslog.conf    ##找默认采集格式 use default 在之后添加采集格式
2 | $template WESTOS_FORMAT, "%FROMHOST-IP% %timegenerated% %FROMHOST-IP% %syslogtag% 
3 | %msg%\n"
4 | #WESTOS_FORMAT: 	    格式名称
5 | #%FROMHOST-IP%: 	    日志来源主机IP
6 | #%timegenerated%: 	    日志生成时间
7 | #%syslogtag%: 	    日志生成服务
8 | #%msg%: 	            日志内容
9 | #\n: 		    换行

<2> 设定日志采集格式应用

1 | *.*;authpriv.none 			/var/log/westos;WESTOS_FORMAT
2 | module(load="builtin:omfile" Template="WESTOS_FORMAT") ##默认采用WESTOS_FORMAT格式

<3>操作流程

1 | vim  /etc/rsyslog.conf
2 | 完成<1><2>操作
3 | > /var/log/messages   			##清空messages中的日志
4 | > /var/log/westos	  		        ##清空Westos中的日志
5 | systemctl restart rsyslog.service           ##重启服务
6 | tail -n 1 /var/log/messages			##查看日志最后一行,格式是默认格式
7 | tail -n 1 /var/log/westos			##查看日志最后一行,格式是定义的格式WESTOS_FORMAT

 

6. 日志的远程同步

lww.westos.com:                172.25.254.20    存放日志作为日志接受端,所有人日志都存放到此台主机

yxy.westos.com:                 172.25.254.10     发送日志到westos_node1主机

<1>在lww中设定接受所有人的日志 

1 | systemctl stop firewalld.service        ##关闭火墙
2 | vim /etc/rsyslog.conf
3 | 19 module(load="imudp")           	##打开日志接受插件
4 | 20 input(type="imudp" port="514") 	##指定插件使用接口
5 | systemctl restart rsyslog.service
6 | 查询端口 在[root@lww ~]# ss  -antlupe | grep rsyslog   (netstat -antlupe |grep rsyslog
)

 

<2>yxy中设定发送日志到lww中

1 | vim  /etc/rsyslog.conf
2 | *.*        @172.25.254.20
3 | systemctl restart rsyslog.service    ##重启服务
4 |		## @  			  	表示使用udp传输日志
5 |		## @@ 			  	表示使用tcp传输日志
6 |		## @172.25.254.20 	把本机日志用udp的传输方式发送到172.25.254.20主机

<3>测试

1 | 完成上面两步操作后
2 | 在yxy和lww中
3 | > /var/log/messages
4 | 在yxy中
5 | logger westos test message
6 | 在lww中可以看到yxy中生成的日志!!

注意:以上实验模式经常清空日志,在实际中操作切忌请勿随便清空