Linux系统中的日志管理
引言
在进行系统日志管理操作前,我们需要先搭建实验环境,即需要2台主机并且保证这两台主机是可以通信的,一台主机作为发送方即服务器,另一台主机作为接收方即客户端。为了保证两台主机可以进行通信,我们需要关闭两台主机的防火墙—systemctl disable --now firewalld
。这里,我们的两台主机配置如下:
发送方westosb IP:172.25.254.233
接收方westosa IP:172.25.254.133
一、journald服务
journald服务名称为systemd-journald.service,是一个收集并存储各类日志数据的系统服务,其默认日志存放路径为 /run/log。借用该服务,我们可以通过journalctl
命令对系统日志进行管理。
1、journalctl命令的用法
1)基本命令
journalctl ##显示系统日志
-n 3 ##显示日志的最新3条
--since "2020-05-01 11:00:00" ##显示11:00后的日志
--until "2020-05-01 11:05:00" ##显示11:05前的日志
-F PRIORITY ##查看可控日志级别
-u sshd ##指定查看服务
--disk-usage ##查看日志大小
--vacuum-size=1G ##设定日志存放大小
--vacuum-time=1W ##日志在系统中最长存放时间
-f ##监控日志
_PID= ##查看指定进程号日志
2)设定日志显示方式
journalctl -o ##设定日志的显示方式
short ##经典模式显示日志
verbose ##显示日志的全部字节
export ##适合传出和备份的二进制格式
json ##字典格式显示输出
3)显示制定级别的日志
journalctl -p ##显示制定级别的日志
0 #emerg 系统的严重问题日志
1 #alert 系统中立即要更改的信息
2 #crit 严重级别会导致系统软件不能正常工作
3 #err 程序报错
4 #warning 程序警告
5 #notice 重要信息的普通日志
6 #info 普通信息
7 #debug 程序拍错信息
2、用journald服务永久存放日志
系统中默认将日志存放在 /run/log/journal中,这种默认方式在系统重启后日志会被清理,要永久保存日志需要完成以下操作:
1)在设置之前先查看日志,此时存放日志文件的节点号为11480
2)重启系统,再次查看日志,可以看到日志是不会被保存下来的,只能看到重启之后的日志,存放日志文件的节点号变为11472
3)完成下述操作,当systemd-journald.service服务重启后,日志存放路径会被制定到 /var/log/journal,此时日志文件的节点号为2514505
4)完成以上操作后,再次重启系统,查看日志,日志文件的节点号仍为2514505,可以看到日志是被保存下来的
二、rsyslog服务
rsyslog服务名称为 rsyslog.service,系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对用户了解系统的运行状态是非常有用的,所以需要把它们保存到对应的日志文件中,以便后续进行分析和监控系统或软件的状态。Linux 系统拥有非常灵活和强大的日志功能,几乎可以保存所有的操作记录,并可以从中检索出我们需要的信息,完成这个工作的守护进程就是 rsyslog。这一服务的配置文件为 /etc/rsyslog.conf,其中定义了将系统日志分门别类采集到指定位置,具体内容如下:
日志存放
/var/log/messages #系统服务日志,常规信息,服务报错
/var/log/secure #系统认证信息日志
/var/log/maillog #系统邮件日志信息
/var/log/cron #系统定时任务信息
/var/log/boot.log #系统启动日志信息
1、自定义日志采集路径
我们可以通过编辑rsyslog.service服务的配置文件 /etc/rsyslog.conf来自定义日志采集路径,即在配置文件中添加下列语句:
日志类型.日志级别 日志存放路径
*.* /var/log/westos
##把系统中所有级别的日志存放westos中
*.*;authpriv.none /var/log/westos
##把系统中所有级别的日志存放到westos中
##但是authpriv不存放到westos中
日志类型
auth #用户认证
authpriv #服务认证
cron #时间任务
kern #内核类型
mail #邮件
news #系统更新信息
user #用户
日志级别
debug #程序排错信息
info #程序常规运行信息
notice #重要信息的普通日志
waring #程序警告
err #程序报错
crit #严重级别会导致系统软件不能正常工作
alert #系统中立即要更改的信息
emerg #系统的严重问题日志
none #不采集
实验步骤:
1)修改配置文件,重启服务,把系统中所有级别的日志存放在westos中
2)从另一个shell里登录主机root用户,查看westos中的日志,此时日志中有服务认证信息
3)修改配置文件,把系统中所有级别的日志存放在westos中,但authpriv不存放到westos中,重启服务,再次执行登录操作,此时日志中没有服务认证信息
2、日志的远程同步
westosa日志接受端:172.25.254.133
westosb日志发送方:172.25.254.233
实验步骤:
1)在日志接收方westosa中设定接受所有人的日志,需要修改配置文件/etc/rsyslog.conf,打开日志接受插件并指定插件使用接口(514),重启服务
2)查询接收方端口是否成功开启
3)编辑日志发送方westosb的配置文件/etc/rsyslog.conf,设定发送日志到westosa中,重启服务
@ 表示使用udp传输日志
@@ 表示使用tcp传输日志
@172.25.254.133表示把本机日志用udp的传输方式发送到172.25.254.133主机
4)测试
为了便于查看实验效果,在westosb和westosa中> /var/log/messages
清空日志,在westosb中使用logger
命令输入测试日志,在westosa中可以看到westosb中生成的日志
3、如何更改日志采集格式
日志采集格式
#WESTOS_FORMAT: 格式名称
#%FROMHOST-IP%: 日志来源主机IP
#%timegenerated%: 日志生成时间
#%syslogtag%: 日志生成服务
#%msg%: 日志内容
#\n: 换行
实验步骤:
注意:修改配置文件的操作是在接收方进行的
1)在日志接收方westosa中修改配置文件/etc/rsyslog.conf,定义日志采集格式WESTOS,/var/log/westos;WESTOS
表示只对/var/log/messages路径下的日志使用定义格式采集
2)module(load="builtin:omfile" Template="WESTOS")
,默认采用WESTOS格式,对所有路径下的日志使用定义格式采集
三、timedatectl系统时间设置
timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系统和服务管理器的一部分,代替旧的传统的用在基于Linux分布式系统的sysvinit守护进程的date命令。我们可以使用该命令查询和更改系统时钟和设置,设置或更改当前的日期,时间和时区,或实现与远程NTP服务器的自动系统时钟同步。
timedatectl set-time "2020-02-13 10:41:55"
:设定系统时间
timedatectl list-timezones
:显示系统的所有时区
timedatectl set-timezone "Asia/Shanghai"
:设定系统时区
timedatectl set-local-rtc 0|1
:设定系统时间计算方式,0表示硬件时钟设置为协调世界时(UTC),当其设置为1时,系统会显示警告
实验步骤:
注意:使用timedatectl命令更改时间设置时,需要关闭chronyd.service,否则无法设置
四、chronyd时间同步服务
chronyd服务名称为chronyd.service,其配置文件为 /etc/chrony.conf,利用该服务我们可以根据网络上其他时间服务器时间来调整系统时钟保持同步。
实验步骤: 这里westosb作为时间源,westosa同步westosb时间
1)在时间源westosb中,修改其chronyd服务的配置文件 /etc/chrony.conf,允许172.25.254.0网段主机同步时间,开启时间同步服务器功能并设定级别为10,重启chronyd.service
2)在westosa中,修改其chronyd服务的配置文件 /etc/chrony.conf,设定其接收172.25.254.233的时间,重启chronyd.service
3)在westosa中查看时间,已经变成时间源westosb中的时间,使用chronyc sources -v
查看时间效果