复习之linux系统中的日志管理

本文详细介绍了Linux系统中的日志管理,包括journalctl命令的使用,如查看、筛选和管理日志,以及如何设置日志的回滚和永久存放。此外,还探讨了rsyslog服务的日志采集规则和TCP/UDP协议在日志同步中的作用。最后,讲解了时间管理命令timedatectl和时间同步服务的部署,确保系统间的时间一致性。
摘要由CSDN通过智能技术生成

----------------------------------------实验环境-------------------------------

两台虚拟机

  • aa : 172.25.254.100
  • bb : 172.25.254.200
  • 两台虚拟机均关闭火墙
  • 软件仓库配置正常

一、日志的基本概念

日志是Linux系统中最重要的一项工具,它可以帮助用户及时了解系统运行状况,帮助诊断和解决各种问题,这对系统调试和维护有着重要的意义。

首先日志由程序本身产生,再由服务:systemd-journald.service 存放到  /run/log 下!由  journalctl  进行管理!!

  • 默认存放路径:  /run/log
  • 采集服务:systemd-journald.service
  • 管理服务:journalctl 

无法用cat命令进行查看,是乱码的!!!日志查看用journalctl 命令!

二、journalctl 命令

1. 命令的使用

(1)基本查看命令

# journalctl : 查看该机器所有的日志

“/” 搜索具体内容

# journalctl   -n   3 :查看日志最新的3条

# journalctl    --since   "12:02":显示12:02后的日志

ps:时间中间是冒号握!

 # journalctl   --since     "12:20"    --until    "14:30" :显示从12:20到14:30的日志

(2)日志查看模式

# journalctl   -o   short :经典模式显示日志

经典模式:时间+主机名+具体信息

 # journalctl -o verbose:显示日志的全部细节

显示细节后可以查看具体的日志

# journalctl -o export :适合传出和备份的二进制格式

 # journalctl -o json:js格式

 (3)显示定制级别的日志

  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

数字越小,级别越高。问题越严重!

# 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

 (4)日志的回滚

# journalctl   -u  sshd:查看指定服务日志

 # journalctl      --disk-usage:查看日志大小

日志大小与存放日志目录大小一致!

 当然,日志一直记录会沾满磁盘空间,因此我们要设置日志的回滚。

日志的回滚:设置日志的存放大小最长存放时间定期处理日志。

  • 存放大小:# journalctl     --vacuum-size=1G
  • 最长存放时间:# journalctl   --vacuum-time=1w   (1周)

 三、永久存放日志

1. 默认存放日志

系统默认存放日志路径:/run/log 是暂时的,存放在内存中,重启系统日志会消失!

# ls -i /run/log/journal/c68b2f12ca4d4887992f50cb5e9efb79/system.journal : 查看默认存放路径id

查看目前时间后重启系统

 重启后,再次连接bb虚拟机,如果此时日志id不变,说明是永久存放,反之,是暂时存放!

发现id变化,且日志时间是14:33之后的,说明之前的日志都被清空了!!

 2. 永久存放日志

如果想永久存放日志,可以将日志存放在硬盘中,具体步骤如下:

(1)新建目录

# mkdir /var/log/journal:新建目录存放日志

(2)修改权限

# chgrp   systemd-journal   /var/log/journal/:将新建目录的所有组设置为 systemd-journal 服务

# chmod  2775   /var/log/journal/ :将新建目录的权限设置为2775,2代表强制位,生成的文件全部属于所有组。

(3)服务重启

# systemctl   restart   systemd-journald.service : 重启服务后,日志存放路径会改变!

 (4)测试

首先查看日志id ,及目前时间,然后重启系统!

 重启后再次查看日志id,及日志时间!

发现id没变,并且日志时间有14:50之前的,说明日志是永久保存的!

 四、rsyslog采集日志

1. rsyslog 服务

服务名称:  rsyslog.service  与systemd-journald.service功能类似--采集日志!

配置文件:/etc/rsyslog.conf

日志存放路径:

  • /var/log/messages :系统服务日志,常规信息,服务报错
  • /var/log/secure:系统认证信息日志
  • /var/log/maillog:系统邮件日志信息
  • /var/log/cron:系统定时任务信息
  • /var/log/boot.log:系统启动日志信息

2. 日志采集规则

(1)采集规则详解

配置文件 /etc/rsyslog.conf 中有日志采集规则:

  • 日志类型.日志级别        存放路径

 具体的日志类型和日志级别如下:

日志类型:

  • auth:用户认证
  • authpriv:服务认证
  • cron:时间任务
  • kern:内核类型
  • mail:邮件
  • news:系统更新信息
  • user:用户

日志级别:

  • debug:程序排错信息
  • info:程序常规运行信息
  • notice:重要信息的普通日志
  • waring:程序警告
  • err:程序报错
  • crit:严重级别导致系统软件不能正常工作
  • alert:系统中立即要更改的信息
  • emerg:严重问题日志
  • none:不采集

(2)设定采集规则(实验)

进入配置文件,设定新的采集规则。

所有日志存放在/var/log/westos目录中,不采集认证日志!

设定成功后保存退出,此时查看/var/log/westos目录,发现该目录不存在!

因为要重启rsyslog服务,配置文件的修改才会生效!

 生效后清空存放目录,方便查看实验对比!

在打开一个shell ssh连接200后产生日志,但没有ssh日志信息!符合采集规则!

 重新设定采集规则,所有日志都采集在/var/log/westos目录中!!

 再次测试!!发现ssh日志也被采集!!符合采集规则!!

 五、日志同步设定

1. TCP 和 UDP 协议详解

在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol、UDP(用户数据报协议,User Data Protocol)是传输层最重要的两种协议,为上层用户提供级别的通信可靠性。

(1)TCP协议

TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式,所以需要四次挥手关闭连接

  • TCP 三次握手建立连接

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个报文。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 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连接。

(2)UDP协议

UDP传输协议是一种不可靠的、面向无连接、可以实现多对一、一对多和一对一连接的通信协议。UDP在传输数据前既不需要建立通道,在数据传输完毕后也不需要将通道关闭。只要客户端给服务端发送一个请求,服务端就会一次性地把所有数据发送完毕。UDP在传输数据时不会对数据的完整性进行验证,在数据丢失或数据出错时也不会要求重新传输,因此也节省了很多用于验证数据包的时间,所以以UDP建立的连接的延迟会比以TCP建立的连接的延迟更低。UDP不会根据当前的网络情况来控制数据的发送速度,因此无论网络情况是好是坏,服务端都会以恒定的速率发送数据。虽然这样有时会造成数据的丢失与损坏,但是这一点对于一些实时应用来说是十分重要的。基于以上三点,UDP在数据传输方面速度更快,延迟更低,实时性更好因此被广泛地用于通信领域和视频网站当中。

 2. 同步日志设定

同步前需要先确定客户端和服务端,本次实验设定如下

  • 虚拟机aa:服务端--接受端
  • 虚拟机bb:客户端--发送端

(1)客户端设定---虚拟机bb

# man 5 rsyslog.conf :查看帮助

搜索remote,查看同步日志设定!

由帮助可见,同步利用的是UDP协议,有模板!!

因此,进入主配置文件设定同步日志!!

# vim   /etc/rsyslog.conf

 (2) 服务端设定(虚拟机aa)

# vim   /etc/rsyslog.conf : 设定接受日志同步

ps:利用udp协议通过接口514同步

打开日志接受插件+指定插件使用接口!

 # systemctl   restart   rsyslog.service:重启服务

# netstat -atnlupe | grep rsyslog :查看rsyslog服务端口情况

发现514端口已开!

(3)共同设定

#  systemctl  restart  rsyslog.service:重启服务

#  >   /var/log/messages :清空日志存放路径,为了实验效果!!

 (4)测试

  • 在服务端--接受端(aa) 利用监控查看日志存放目录中 是否同步日志
  • 在客户端--发送端(bb) 利用logger产生新日志

六、日志采集格式的设定

首先测试日志同步是否设定成功

 但此时日志同步格式是默认的,如果想修改日志采集格式怎么办?

注意在那儿看日志就在那儿修改日志采集格式!!!则本次实验在接受端---服务端 修改日志采集格式!!

1. 修改日志采集格式

# vim   /etc/rsyslog.conf :进入主配置文件

(1)设定新采集格式

$template  WESTOS, "%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"

WESTOS:格式名,必须大写!

%timegenerated% :显示日志生成的时间

%FROMHOST-IP%:生成日志的ip地址

%syslogtag% :生成日志的服务

%msg%:日志内容

ps:需要什么格式可以自己设定!

 (2)应用新采集格式

设定采集格式成功后,需要应用该格式在对应的目录!

例如下图,/var/log/message 应用新采集格式

/var/log/secure 仍然用默认采集格式

 (3)重启服务

修改完配置文件,保存退出,然后重启rsyslog服务!!

# systemctl restart rsyslog.service

 2. 测试

在客户端生成日志,在服务端aa进行查看日志的格式

发现与设置的新采集格式相符!设置成功!

 

3. 设定默认采集格式

如果想要所有的日志路径都采用新采集格式!需要做以下设定!

  • 设定新日志采集格式----同上
  • 将默认采集格式修改为“WESTOS”----新采集格式名
  • 目录后不需要写新采集格式名
  • 修改成功后保存退出
  • 重启服务

ps: 在非插入格式下,安yy复制  p粘贴!

 测试:发现生成的日志格式已更改!修改成功!!

 七、时间管理命令

之前做实验利用 #date 查看命令,13:00 显示为1:00

利用timedatectl查看发现时区设置为美国,重新设置为中国上海即可!!

 1.几种time的解释

  • Universal time /  UTC time

UTC是世界协调时间,即每一个地方在同一时刻的UTC时间是相同的。一般用UTC+或UTC- 来表示各个时区的时间,比如中国的时区时间就是UTC+8。

  • RTC time

实时时钟(Real-time clock,RTC)是指可以像时钟一样输出实际时间的电子设备,一般会是集成电路,因此也称为时钟芯片。启动时根据硬件时钟设置系统时间;运行时通过 NTP 守护进程联网校正时间,关机时根据系统时间设置硬件时间。

  • Local time

可以把localtime想象成我们看到的正确的时间,就UTC+时区偏移。localtime 与硬件时间有关,Linux 中,会认为硬件中存储的时间是 UTC 时间,它想让你看到localtime,就会在硬件中存储的时间的基础上加上时区的偏移。而在windows 中就认为硬件中存储的时间是UTC+时区偏移了,它会直接进行显示。这也是我们在电脑上装了双系统之后,时间会发生错乱的原因。

2. timedatectl 基本命令

  • timedatectl   set-local-rtc   0|1 : 1表示使用rtc的计算方式,0表示不使用
  • timedatectl list-timezones:列出所有时区
  • timedatectl set-timezone "Asia/Shanghai":设定系统时区
  • timedatectl set-time "11:11:11":设定系统当前时间

-------------------------------------实验---------------------------------------------

# timedatectl   set-local-rtc   1

ps: 一般设置为no:0

# timedatectl list-timezones:列出所有时区

# timedatectl set-timezone "Asia/Shanghai":设定系统时区

 # timedatectl set-time "11:11:11":设定系统当前时间

此时设置时间,应该先关闭同步服务,在设置时间! 

 八、时间同步服务部署

当想要同步不同系统的时间,我们可以部署时间同步服务!

首先选中,共享时间的主机,成为时间源,这里选择虚拟机bb作为时间源

1. 时间源的部署

  • 关闭火墙
  • 开启时间同步服务
  • 设置允许同步时间的网段
  • 重启时间同步服务

首先关闭火墙,接着编辑主配置文件!

# vim   /etc/chrony.conf

在配置文件中, 开启时间同步服务+设置允许同步时间的网段

最后重启服务!即可!!

2. 需要同步时间主机的设定

  • 配置文件中编辑 时间源的ip 即可!
  • 重启服务

然后重启服务即可!

3. 测试

在两台主机利用监控查看时间,发现时间已同步!

# watch   -n   1   date:监控查看时间

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值