----------------------------------------实验环境-------------------------------
两台虚拟机
日志是Linux系统中最重要的一项工具,它可以帮助用户及时了解系统运行状况,帮助诊断和解决各种问题,这对系统调试和维护有着重要的意义。
首先日志由程序本身产生,再由服务:systemd-journald.service 存放到 /run/log 下!由 journalctl 进行管理!!
无法用cat命令进行查看,是乱码的!!!日志查看用journalctl 命令!
# journalctl : 查看该机器所有的日志
“/” 搜索具体内容
# journalctl -n 3 :查看日志最新的3条
# journalctl --since "12:02":显示12:02后的日志
ps:时间中间是冒号握!
# journalctl --since "12:20" --until "14:30" :显示从12:20到14:30的日志
# journalctl -o short :经典模式显示日志
经典模式:时间+主机名+具体信息
# journalctl -o verbose:显示日志的全部细节
显示细节后可以查看具体的日志
# journalctl -o export :适合传出和备份的二进制格式
# journalctl -o json:js格式
数字越小,级别越高。问题越严重!
# journalctl -p 0:系统的严重问题日志
ps:一般没有,如果有,系统都起不来了
# journalctl -p 1:系统中立即要更改的信息
# journalctl -p 2:导致系统软件不能正常工作
# journalctl -p 3:程序报错
# journalctl -p 4:程序警告
# journalctl -p 5:重要信息的普通日志
# journalctl -p 6:普通信息
# journalctl -p 7:程序排错信息
# journalctl -F PRIORITY:查看可控日志级别
234567
# journalctl -u sshd:查看指定服务日志
# journalctl --disk-usage:查看日志大小
日志大小与存放日志目录大小一致!
当然,日志一直记录会沾满磁盘空间,因此我们要设置日志的回滚。
日志的回滚:设置日志的存放大小和最长存放时间定期处理日志。
系统默认存放日志路径:/run/log 是暂时的,存放在内存中,重启系统日志会消失!
# ls -i /run/log/journal/c68b2f12ca4d4887992f50cb5e9efb79/system.journal : 查看默认存放路径id
查看目前时间后重启系统
重启后,再次连接bb虚拟机,如果此时日志id不变,说明是永久存放,反之,是暂时存放!
发现id变化,且日志时间是14:33之后的,说明之前的日志都被清空了!!
如果想永久存放日志,可以将日志存放在硬盘中,具体步骤如下:
# mkdir /var/log/journal:新建目录存放日志
# chgrp systemd-journal /var/log/journal/:将新建目录的所有组设置为 systemd-journal 服务
# chmod 2775 /var/log/journal/ :将新建目录的权限设置为2775,2代表强制位,生成的文件全部属于所有组。
# systemctl restart systemd-journald.service : 重启服务后,日志存放路径会改变!
首先查看日志id ,及目前时间,然后重启系统!
重启后再次查看日志id,及日志时间!
发现id没变,并且日志时间有14:50之前的,说明日志是永久保存的!
服务名称: rsyslog.service 与systemd-journald.service功能类似--采集日志!
配置文件:/etc/rsyslog.conf
日志存放路径:
配置文件 /etc/rsyslog.conf 中有日志采集规则:
具体的日志类型和日志级别如下:
日志类型:
日志级别:
进入配置文件,设定新的采集规则。
所有日志存放在/var/log/westos目录中,不采集认证日志!
设定成功后保存退出,此时查看/var/log/westos目录,发现该目录不存在!
因为要重启rsyslog服务,配置文件的修改才会生效!
生效后清空存放目录,方便查看实验对比!
在打开一个shell ssh连接200后产生日志,但没有ssh日志信息!符合采集规则!
重新设定采集规则,所有日志都采集在/var/log/westos目录中!!
在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol、UDP(用户数据报协议,User Data Protocol)是传输层最重要的两种协议,为上层用户提供级别的通信可靠性。
TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式,所以需要四次挥手关闭连接。
所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个报文。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。
三次握手过程的示意图如下:
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
四次挥手过程的示意图如下:
为什么连接的时候是三次握手,关闭的时候却是四次握手?
建立连接时因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。所以建立连接只需要三次握手。
由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式。
这就意味着,关闭连接时,当Client端发出FIN报文段时,只是表示Client端告诉Server端数据已经发送完毕了。当Server端收到FIN报文并返回ACK报文段,表示它已经知道Client端没有数据发送了,但是Server端还是可以发送数据到Client端的,所以Server很可能并不会立即关SOCKET,直到Server端把数据也发送完毕。当Server端也发送了FIN报文段时,这个时候就表示Server端也没有数据要发送了,就会告诉Client端,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。
UDP传输协议是一种不可靠的、面向无连接、可以实现多对一、一对多和一对一连接的通信协议。UDP在传输数据前既不需要建立通道,在数据传输完毕后也不需要将通道关闭。只要客户端给服务端发送一个请求,服务端就会一次性地把所有数据发送完毕。UDP在传输数据时不会对数据的完整性进行验证,在数据丢失或数据出错时也不会要求重新传输,因此也节省了很多用于验证数据包的时间,所以以UDP建立的连接的延迟会比以TCP建立的连接的延迟更低。UDP不会根据当前的网络情况来控制数据的发送速度,因此无论网络情况是好是坏,服务端都会以恒定的速率发送数据。虽然这样有时会造成数据的丢失与损坏,但是这一点对于一些实时应用来说是十分重要的。基于以上三点,UDP在数据传输方面速度更快,延迟更低,实时性更好,因此被广泛地用于通信领域和视频网站当中。
同步前需要先确定客户端和服务端,本次实验设定如下:
# man 5 rsyslog.conf :查看帮助
搜索remote,查看同步日志设定!
因此,进入主配置文件设定同步日志!!
# vim /etc/rsyslog.conf
# vim /etc/rsyslog.conf : 设定接受日志同步
ps:利用udp协议通过接口514同步
打开日志接受插件+指定插件使用接口!
# systemctl restart rsyslog.service:重启服务
# netstat -atnlupe | grep rsyslog :查看rsyslog服务端口情况
发现514端口已开!
# systemctl restart rsyslog.service:重启服务
# > /var/log/messages :清空日志存放路径,为了实验效果!!
首先测试日志同步是否设定成功
但此时日志同步格式是默认的,如果想修改日志采集格式怎么办?
注意在那儿看日志就在那儿修改日志采集格式!!!则本次实验在接受端---服务端 修改日志采集格式!!
# vim /etc/rsyslog.conf :进入主配置文件
$template WESTOS, "%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"
WESTOS:格式名,必须大写!
%timegenerated% :显示日志生成的时间
%FROMHOST-IP%:生成日志的ip地址
%syslogtag% :生成日志的服务
%msg%:日志内容
ps:需要什么格式可以自己设定!
设定采集格式成功后,需要应用该格式在对应的目录!
例如下图,/var/log/message 应用新采集格式
/var/log/secure 仍然用默认采集格式
修改完配置文件,保存退出,然后重启rsyslog服务!!
# systemctl restart rsyslog.service
在客户端生成日志,在服务端aa进行查看日志的格式!
发现与设置的新采集格式相符!设置成功!
如果想要所有的日志路径都采用新采集格式!需要做以下设定!
ps: 在非插入格式下,安yy复制 p粘贴!
测试:发现生成的日志格式已更改!修改成功!!
之前做实验利用 #date 查看命令,13:00 显示为1:00
利用timedatectl查看发现时区设置为美国,重新设置为中国上海即可!!
UTC是世界协调时间,即每一个地方在同一时刻的UTC时间是相同的。一般用UTC+或UTC- 来表示各个时区的时间,比如中国的时区时间就是UTC+8。
实时时钟(Real-time clock,RTC)是指可以像时钟一样输出实际时间的电子设备,一般会是集成电路,因此也称为时钟芯片。启动时根据硬件时钟设置系统时间;运行时通过 NTP 守护进程联网校正时间,关机时根据系统时间设置硬件时间。
可以把localtime想象成我们看到的正确的时间,就是UTC+时区偏移。localtime 与硬件时间有关,Linux 中,会认为硬件中存储的时间是 UTC 时间,它想让你看到localtime,就会在硬件中存储的时间的基础上加上时区的偏移。而在windows 中就认为硬件中存储的时间是UTC+时区偏移了,它会直接进行显示。这也是我们在电脑上装了双系统之后,时间会发生错乱的原因。
-------------------------------------实验---------------------------------------------
# timedatectl set-local-rtc 1
ps: 一般设置为no:0
# timedatectl list-timezones:列出所有时区
# timedatectl set-timezone "Asia/Shanghai":设定系统时区
# timedatectl set-time "11:11:11":设定系统当前时间
此时设置时间,应该先关闭同步服务,在设置时间!
当想要同步不同系统的时间,我们可以部署时间同步服务!
首先选中,共享时间的主机,成为时间源,这里选择虚拟机bb作为时间源
首先关闭火墙,接着编辑主配置文件!
# vim /etc/chrony.conf
在配置文件中, 开启时间同步服务+设置允许同步时间的网段
最后重启服务!即可!!
然后重启服务即可!
在两台主机利用监控查看时间,发现时间已同步!
# watch -n 1 date:监控查看时间