日志管理服务
系统日志中记录系统各种重大活动记录,如系统的严重问题日志、系统中立即要更改的信息、程序报错等
systemd-journald.service
journald的系统日志服务是默认记录系统活动的服务程序,这个服务是在rhel7开始出现使用的服务程序主要针对本机
默认日志存放路径: /run/log/journal
可以看出存放在 /run 目录中的日志是会随着系统的关闭被清空
journalctl命令的用法
journald服务使用命令是 “journalctl”
直接使用journalctl命令就是显示从系统启动到现在的系统日志,如下图:
journalctl的参数
参数 | 说明 |
---|---|
-n | 显示日志最近的几条,如 -n 5 |
-p | 显示指定级别的日志 |
-o | 设定日志的显示方式 |
-F PRIORITY | 查看可控日志级别 |
-u | 指定查看服务 |
-f | 监控日志 |
- -since | 查看日志从哪个时间开始 |
- -until | 查看日志到什么时间 |
- -disk-usage | 查看日志大小 |
- -vacuum-size | 设定日志存放大小,在命令中设置属于临时性,重启系统会失效 |
- -vacuum-time | 日志在系统中最长存放时间,在命令中设置属于临时性,重启系统会失效 |
- -n 后面加数字来查询日志
- -p
journald的日志采集内容分为8个级别,分别是
0 emerg 系统的严重问题日志
1 alert 系统中立即要更改的信息
2 crit 严重级别会导致系统软件不能正常工作
3 err 程序报错
4 warning 程序警告
5 notice 重要信息的普通日志
6 info 普通信息
7 debug 程序排错信息
实验操作:
除了输入对应级别名称,也可以输入对应的数字来查询
- -o
日志的显示方式有很多种,可以用 “man journalctl” 来具体查看
我这里只介绍和演示几种常用的格式
short | 经典模式显示日志 |
---|---|
verbose | 显示日志的全部字节 |
export | 适合传出和备份的二进制格式 |
json | js格式显示输出 |
- -F PRIORITY
可以看到我们可控的日志级别只有3、4、5、6、7这几个级别 - -u
参数-u 后面接具体的服务名称,如sshd、NetworkManager、fierwall等信息,来查看相关服务的日志报告
- f
日志监控,简单来说就是实时更新采集的日志
- –since --until
这两个参数连起来就是从什么时间到什么时间,是在查询某个时间点后时间段时用到的参数
这里我们根据现在的系统时间查看03:10到03:25这个时间内产生的日志 - –disk-usage
显示日志存放的大小,因为这里的日志会随着系统重启被清空,所以我们看到的也只是本次系统使用产生的日志大小
- –vacuum-size
参数–vacuum-size后面接=1G,意思就是设定日志的存放大小最多占用1Gb的储存
- –vacuum-time
在参数后面接=1day,这样的时间来进行设定
要说明的是命令设定的 - -vacuum-time、- -vacuum-size 都是临时性的,系统重启后会失效,如果想要永久更改设定,我们需要进入journald服务的配置文件,路径是 /etc/systemd/journald.conf
并且我们可以用 “man 5 journald.conf” 来查看里面的参数用法,例:
- 除了上述参数应用,还有一种方式来精确查看方式
例如 firewalld 火墙服务眼前的进程在被重启后就会成为一个新的进程,PID也是会改变
如果我们就是要看重启前的火墙产生的日志,首先我们用-o verbose来查看信息
命令:journalctl -o verbose
/11364:搜索重启前进程的PID
可以看到搜索出的信息,_PID=11364(进程号)_SYSTEMD_UNIT=firewalld.service(程序名)
然后直接用 journalctl 命令加上这两个信息
查询出的信息就是属于PID:11364 的日志
用journald服务永久存放日志
因为journald服务日志存放的路径 /run/log/journal 里,上面也说过重启系统会清空日志,所以我们如果需要永久保存这些日志,需要建立新的采集路径
步骤 | 说明 |
---|---|
mkdir /var/log/journal | 创建日志采集的目录 |
chgrp systemd-journal /var/log/journal | 修改目录的拥有组为systemd-journal |
chmod 2775 /var/log/journal | 修改目录的权限为rwxrwxr-x,并开启group位的超级权限s表示该目录下创建的文件拥有组都属于上一步设定的systemd-journal组 |
systemctl restart systemd-journald.service | 重启服务 |
设置完后,我们再去看 /run/log 里面已经没有journal 这个目录了,然后我们重启系统用 “journalctl” 看之前的日志是否会保存下来
rsyslog.service
rsyslog是具有一定定制性的日志采集服务
rsyslog日志存放路径:
路径 | 说明 |
---|---|
/var/log/messages | #系统服务日志,常规信息,服务报错 |
/var/log/secure | #系统认证信息日志 |
/var/log/maillog | #系统邮件日志信息 |
/var/log/cron | #系统定时任务信息 |
/var/log/boot.log | #系统启动日志信息 |
以上文件都是系统自动建立的文件
rsyslog的配置文件:/etc/rsyslog.conf
自定义日志采集路径
自定义日志采集,我们需要设置rsyslog的配置文件
编辑:vim /etc/rsyslog.conf
看到配置文件下面有RULES,规则设置,
以49行的这个规则为例
authpriv | 日志的类型 |
---|---|
* | 日志的级别, *表示所有的级别 |
/var/log/secure | 指定日志的存放路径 |
实验测试:
我们写一条采集日志的指定信息和路径
指定规则将产生的所有日志放进/var/log/test文件下,而且可以使用 “;” 给 “ * . * ” 后面再加一条规则,例如 “ * .* ;authpriv.none ” ,就是采集所有类型的所有级别,但是不采集authpiv。
日志类型 | 说明 |
---|---|
auth | #用户认证 |
authpriv | #服务认证 |
cron | #时间任务 |
kern | #内核类型 |
#邮件 | |
news | #系统更新信息 |
user | #用户 |
日志级别 | 说明 |
---|---|
emerg | 系统的严重问题日志 |
alert | 系统中立即要更改的信息 |
crit | 严重级别会导致系统软件不能正常工作 |
err | 程序报错 |
warning | 程序警告 |
notice | 重要信息的普通日志 |
info | 普通信息 |
debug | 程序排错信息 |
none | 不采集任何信息 |
更改日志采集格式
正常的日志格式我们看到的日志格式是这样的
这个日志格式我们是可以在配置文件里进行设置
这里是系统的默认采集格式,我们可以在这里进行自定义格式如下
TEST | 格式名称 |
---|---|
%FRMHOST-IP% | 日志来源主机IP |
%timegenerated% | 日志生成时间 |
%syslogtag% | 日志生成服务 |
%msg% | 日志内容 |
\n | 换行 |
格式设施完后,在日志采集路径后面写入格式名称,使之使用我们设置的格式,如下图所示
然后重启服务,再查看test文件,就可以看到我们设置的格式
日志的远程同步
在rsyslog.service服务中,提供了远程日志同步服务,帮助我们去采集其他服务端主机的日志方便查看
实验操作,我们还是准备两个主机
rhel7-work :IPADDR=192.168.0.10 作为日志发送端
rhel8-work :IPADDR=192.168.0.20 作为日志接受端
发送方式分为UDP,TCP,此处我们为了传输效率所以选择UDP传输方式
首先在rhel8-work中设定接受所有人日志,并且关闭火墙防止被拦截
- systemctl stop firewalld 关闭火墙
- vim /etc/rsyslog.conf 编辑配置文件
module(load=“imudp”) # needs to be done just once ##打开日志接受插件
input(type=“imudp” port=“514”) ##指定插件使用接口
配置完后,重启服务并去查看端口是否开启
- 然后在rnel7-work里设置配置文件发送日志到rhel8-work中
设置方法我们可以用 “man rsyslog.conf” 查看
格式根据示例来写,@表示UDP传输,@@表示TCP传输,@符之后加的是接收日志的主机IP
vim /etc/rsyslog.conf
- 写完后,重启服务,我们清空两边的日志文件再测试看效果
使用命令: /var/log/messages 清空内容
logger test 加载测试信息
我们就看到了在rhel7中的测试日志被传输到了rhel8中
系统时间管理
命令:timedatectl 查看系统时间信息
命令参数
参数 | 说明 |
---|---|
set-time | ##设定系统时间 |
list-timezones | ##显示系统的所有时区 |
set-timezone | ##设定系统时区 |
set-local-rtc | 后面加 0/1 ##设定系统时间计算方式,0表示使用utc时间计算方式,1表示使用local时间 |
时间同步服务
时间同步服务是为了我们在采集其他主机传输的日志时和本机时间保持一致,防止时间差别太大导致无法正确查看日志
服务名称: chronyd.service
配置文件: /etc/chrony.conf
实验操作,还是之前的两台主机
rhel7-work :IPADDR=192.168.0.10 同步rhel8的时间
rhel8-work :IPADDR=192.168.0.20 作为时间源
- 首先在rhel8-work中,
配置vim /etc/chrony.conf
allow 192.168.0.0/24 ##允许192.168.0.0/24网段主机同步时间
local stratum 10 ##开启时间同步服务器功能并设定级别为10
- 配置完后重启服务,依然关闭火墙,完成后在rhel7-work中配置
因为这个服务默认时关闭的,所以我们去开启chronyd.service服务,并设置开机自动开启
并且配置vim /etc/chrony.conf,然后重启服务
完成上面的配置后在rhel7-work中可以看到时间已经同步了
而且可以用命令 “chronyc sources -v” 查看
可以看到查看到的信息里显示了^* 192.168.0.20,
根据上面的提示 “ ^ ” 表示服务, “ * ” 已经同步。
这样就完成了服务端可主机的时间同步
但在rhel8中 /etc/chrony.conf 这个配置文件对于接收时间同步方的参数显示是有一些区别的
对于这个格式我们更改配置的的格式是如下
这是rhel7和rhel8中的一些配置区别,其他的设置还是一样的
以上讲述就是对Linux的日志管理及日志同步的知识解析,并且包括了系统时间的更改和同步管理