实验环境:
- rhel7IP:192.168.0.40
- rhel8IP:192.168.0.41
什么是日志文件呢?
简单来说,就是记录系统活动信息的几个文件,例如:何时何地何人,做了什么操作。也就是记录系统在什么时候由哪个进程做了什么样的行为时,发生了何种的事件等。对系统的日志文件的分析和备份是一个系统管理员必须掌握的。
journald
服务名称:systemd-journald.service
日志查看工具:journalctl
默认日志存放路径: /run/log
journalctl命令
用法:
参数 | 作用 |
---|---|
直接使用查看日志 | |
-n a | 查看最新的a条日志 |
- -since “2020-02-13 17:00” | 显示17:00后的日志 |
- -until “2020-02-13 17:00” | 显示日志到17:00 |
-o | 设定日志的显示方式 |
-p | #显示制定级别的日志 |
-F PRIORITY | 查看可控日志级别 |
-u (sshd) | #指定查看服务 |
- -disk-usage | 查看日志大小 |
–vacuum-size=1G | 设定日志存放大小 为1G |
–vacumm-time=1W | 日志在系统中最长存放时间 |
-f | 监控日志 |
常用日志的显示方式:
short | 经典模式显示日志 |
---|---|
verbose | 显示日志的全部字节 |
export | 适合传出和备份的二进制格式 |
json | js格式显示输出 |
日志级别:
等级 | 等级名称 | 说明 |
---|---|---|
0 | emerg | 系统的严重问题日志 |
1 | alert | 系统中立即要更改的信息 |
2 | crit | 严重级别会导致系统软件不能正常工作 |
3 | err | 程序报错 |
4 | warning | 程序警告 |
5 | notice | 重要信息的普通日志 |
6 | info | 普通信息说明 |
7 | debug | 程序排错信息 |
a.使用journalctl直接查看日志
可以使用 journalctl -n 3来查看最新的3条日志:
为了效果明显,我们重启sshd服务,查看日志产生效果:
这里要注意的是:systemd-journald.service是必须自动开启。
使用–since "2020-02-14 03:30来查看2020-02-14 03:30以后的日志:
使用–until“2020-02-14 03:30”来查看到2020-02-14 03:30产生的日志:
使用journalctl -o来指定日志的显示方式:
1.使用journalctl -o short来指定经典模式显示日志 :
2.使用journalctl -o verbose 显示日志的全部字节 :
3.使用journalctl -o export 适合传出可备份的二进制格式
4.使用journalctl -o json js格式显示输出
使用journalctl -p 显示制定级别的日志 :
journalctl -p 等级 / journalctl -p 等级名称,这里只演示journalctl -p 等级
使用 journalctl -F PRIORITY 来查看可控日志级别:
可以看到我们可控的级别为2 3 4 5 6 7。
journalctl -u 服务查看指定服务的日志
通过 journalctl -u sshd 查看ssh服务的的日志:
journalctl --disk-usage 查看日志大小:
我们可以看到,日志大小为8M。现在面临的问题为日志会越来越大,总有一天磁盘装不下日志,所以我们要对日志设置回滚(滚动存储)
journalctl --vacuum-size=1G 设定日志存放大小 为1G
journalctl --vacumm-time=1W 日志在系统中最长存放时间为一周
但是!以上两个设置为临时设置,但系统重启后,设置会失效。
若要使其永久生效,我们需要修改日志配置文件:/etc/systemd/journald.conf
journalctl -f 监控日志
如果有下边情况:
这里我们想查看pid为15472sshd的进程,当我们使用journalctl -u sshd查看时,我们发现,有关sshd的日志全部列了出来。
所以,我们可以用journalctl -o verbose 查看日志全部字节:
用/15472查找与pid有关的日志看到_SYSTEM UNIT=sshd.service
所以我们确定了两个搜索条件:第一个为PID=15472 第二个为SYSTEM UNIT=sshd.service所以我们可以使用journalctl _PID=15472 _SYSTEMD_UNIT=sshd.service
来查看我们的目标日志:
用journald服务永久存放日志
系统中默认日志在:/run/log/journal中
默认方式在系统重启后日志会被清理,只会显示系统重启以后的日志。
如果要想永久的存放日志,我们需要mkdir /var/log/journal建立目录
对所建立目录的所有组进行修改:chgrp systemd-journal /var/log/journal将直接将日志存放至硬盘,实验永久存放。
对其权限进行修改:chmod 2774 /var/log/journal使systemd-journal组成员能对目录进行可写。
接着重启 systemd-journald.service:systemctl restart systemd-journald.service 查看我们建立的目录下的文件:
产生了日志文件。重启系统后,我们可以看到重启前的日志。注意:新建目录/var/log/journal后重启systemd-journald.service服务后,系统中默认日志/run/log/journa就会被自动删除,如果将我们新建的/var/log/journal删除后重启systemd-journald.service后/run/log/journa会自动恢复!
如果担心存放的日志文件过大,可以使用上个实验的方法
–vacuum-size=1G和–vacumm-time=1W对日志文件进行永久设定,方法如前所述。
rsyslog
服务名称:rsyslog.service
日志存放路径:
路径 | 保存的信息 |
---|---|
/var/log/messages | 系统服务日志,常规信息,服务报错 |
/var/log/secure | 系统认证信息日志 |
/var/log/maillog | 系统邮件日志信息 |
/var/log/cron | 系统定时任务信息 |
/var/log/boot.log | 系统启动日志信息 |
rsyslog没有提供日志查看工具,是以文件的形式查看日志,使用cat即可直接查看。
使用cat /var/log/message即可查看系统服务日志:
rsyslog的配置文件是:/etc/rsyslog.conf
通过对其配置文件的查看,我们可以看到rsyslog日志的存放规则:不同类型日志存放在不同位置:
所以我们可以通过修改规则来实现自定义日志采集路径。
自定义日志采集路径
将所有类型的所有级别日志自定义存放在 /var/log/westos :
日志类型和日志级别:
常用日志类型 | |
---|---|
auth | 用户认证 |
authpriv | 服务认证 |
cron | 时间任务 |
kern | 内核类型产生信息的地方 |
邮件收发有关的信息 | |
news | 系统更新信息 |
user | 用户 |
比如,将服务认证的所有级别日志存放在/var/log/westos:
日志级别:
emerg | 系统的严重问题日志 |
---|---|
alert | 系统中立即要更改的信息 |
crit | 严重级别会导致系统软件不能正常工作 |
err | 程序报错 |
warning | 程序警告 |
notice | 重要信息的普通日志 |
info | 普通信息 |
debug | 程序拍错信息 |
none | 不做任何操作 |
例如我们将除服务认证日志的所有等级的所有日志全部存放在/var/log/westos:
日志采集的格式为
那么我们怎么样修改日志采集的格式?
如何更改日志采集格式
在rsyslog的配置文件中,我们可以看到系统的默认日志采集方式:
如果我们先要奶系统日志采集格式:我们可以修改配置文件:
将我们定义的格式名称添加到日志存放路径后,指定message日志以WESTOS格式输出。
保存退出后,重启rsyslog.service,查看/var/log/message日志,可以看到,message是以我们定义的WESTOS格式采集输出。
日志的远程同步
实验环境依然是rhel7和rhel8两台主机,来模拟将其他主机的日志远程同步到rhel7中。
- rhel7_node1:192.168.0.41 存放日志作为日志接受端,所有人日志都存放到此台主机。
- rhel8_node1:192.168.0.40 发送日志到rhel7_node1主机中。
在rsyslog的配置文件rsyslog.conf中的第15和16行是远程同步的的配置
15 $ModLoad imudp 为打开日志接受插件
16 $UDPServerRun 514 为指定插件使用接口
可以看到,默认前边带标注号# 关闭状态,我们只需要将这两个#号删除并保存退出。
重启服务:systemctl restart rsyslog.service
使用命令netstat -antlupe | grep rsyslog 查看rsyslog的每一个网络接口设备的状态信息:
可以看到514接口已经打开。接收端配置完成。接下来配置发送端,在rhel8中进行操作。
可以看到,发送端rhel8中的网络是可以和接收端rhel7中的网络是能够进行通讯。注意,提前关闭接收端的火墙。
同样,编辑rsyslog的配置文件rsyslog.service
可以通过 man 5 rsyslog.conf查看使用方法
可以看到,是用@代表的是udp传输协议,@@为使用tcp传输协议。我们这里使用的是udp协议。
所以在发送端rhel8中对配置文件做如下编辑:
重启rsyslog.service。并清空两边message日志,使用logger日志测试工具,
logger hahatest,并查看效果。
发送端rhel8:
接收端rhel7:
可以看到接收端rhel7成功接收到了发送端rhel8的日志文件。这里我们使用了两台主机做实验,其实实际应用中,几百台主机的日志同步和两台主机间的日志同步操作是相同的。
timedatectl
timedatectl 主要用来操作系统日期和时间的一个命令。
可以使用timedatectl
直接查看系统的时间:
通过timedatectl set-time "2020-02-14 20:48"
设定当前系统时间:
可以使用timedatectl list-timezones
显示系统所有时区:
使用timedatectl set-timezone "Asia/Shanghai"
设定系统时区为亚洲上海。
我们使用的UTC时间会更改硬件时间,这样的话如果我们的电脑装了双系统,另外一个系统的时间就会错乱。所以,当我们更改系统的计时方式为local模式。
/etc/adjtime为系统时间模式的设定
使用timedatectl set-local-rtc 0
设置系统计时方式为UTC时间。
使用timedatectl set-local-rtc 1
设置系统时间为local时间:
时间同步服务
当前rhel7系统时间为:
当前rehl8系统时间:
如果是在企业里,我们怎样使所有的主机时间保持一致?
我们可以将一台主机的时间共享出来,其他主机同步这个主机的时间即可。
我们上边已经将rhel7主机的时间配置正确,所以我们可以用rhel7当作时间源。使用rhel8进行同步。
Chrony是NTP(Network Time Protocol,网络时间协议,服务器时间同步的一种协议)的另一种实现,与ntpd不同,它可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差。
服务名称: chronyd.service
在rhel7中我们可以更改其默认配置文件: /etc/chrony.conf
允许172.25.254.0网段主机同步时间 :
开启时间同步服务器功能并设定级别为10 :
编辑后保存退出。关闭火墙并重启服务 chronyd.service 。
我们在时间源主机rhel7的设定就结束。
在rhel8中:
编辑配置文件: /etc/chrony.conf
更改为:
重启服务:systemctl restart chronyd.service
使用 chronyc sources -v
和 date命令查看效果:
此实验为两台主机同步时间,在企业中,多台主机中系统时间的同步方法与此相同。