Linux系统的日志管理
- Journalctl服务
- Rsyslog服务
- 设置系统时间
Journalctl服务
程序运行时可能会产生日志用于记录运行情况,对于日志的管理在Linux系统中有单独的服务.
systemd-journald.service
journalctl
/run/log
Journalctl命令基础用法
journalctl
命令用于对journald-service
服务内存放的信息进行查看.
值得一提的是,systemd-journald
是用于内存的登录文件记录方式,因此在重启后之前保留的信息也会消失;换言之,journalctl
查看您的是启动之后系统中的日志.
journalctl
journalctl -n 5
journalctl --since "2021-01-01 00:00:00"
journalctl --until "2021-01-01 00:00:00"
journalctl -o -o short -o verbose -o export -o json -p
日志在系统中是按照重要程度分级的,不同等级的权限和存储的日志内容不同.
0 emerg 系统的严重问题日志
1 laert 系统中立即需要更改的信息
2 cirt 严重级别,会导致系统软件不正常的日志
3 err 程序报错
4 warning 程序警告
5 notice 重要信息的普通日志
6 info 普通信息
7 debug 系统排错信息journalctl -F PRIORITY
journalctl -u
journalctl --disk-usage
日志的永久存放
默认情况下日志存放在/run/log/journal
目录下,当系统重启后内容就会重置,这显然是不符合我们的需求的.可以通过以下方式更改日志的存储来实现永久存放.
mkdir /var/log/journal
chgrp systemd-journal /var/log/journal
chmod 2775 /var/log/journal
systemctl restart systemd-journald.service
服务重启后,日志的存放路径就会被重新定向到刚刚设置的/var/log/journal
中,实现了永久存放.
Rsyslog服务
Journal
服务是RHEL7企业版之后新增的用于进行系统登陆服务的服务,而在这之前rsyslog
用于对系统内的登陆进行记录抓取,有自己的配置文件,可以进行自定义.
rsyslog.service
日志存放位置:
/var/log/message
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/boot.log 配置文件:
/etc/rsyslog.conf
日志采集的自定义
通过对配置文件的修改,我们可以实现日志采集的自定义.如采集文件的内容筛选,日志的存放位置.
日志存放内容类型的筛选
auth
authpriv
cron
kern
mail
news
user 日志级别
debug
info
notice
warning
err
crit
alert
emerg
none
日志的存放位置不仅可以为本地位置,同样可以为远端位置.在选择远端位置时同样可以选择TCP或者UDP连接.
- 选择UDP协议时,写法为
@网络地址IP
- 选择TCP协议时,写法为
@@网络地址
因为可以设置将文件发送到远程主机,所以配置文件的设置分成了两个部分:即服务端和客户端都需要进行设置.
- 服务端设置日志类型,修改存放位置为客户端IP,实现定向自定义存放
- 客户端设置接受协议和接受端口,修改或关闭火墙设置.
- 重启双边服务,对发送和接受情况进行测试,
更改日志采集格式
通过上面的实验,我们发现通过配置文档可以自定义以下内容
但是系统日志本身的格式冗长复杂,无用项多,不利于我们进行信息筛选.查看日志的目的是寻找能够解决我们遇到问题的信息,过于冗杂的信息应该丢弃以避免对于我们查阅的影响.那么理所当然的,日志的采集格式也是可以修改的,同样在配置文件/etc/rsyslog.conf
中.
对于日志采集格式的修改分为两方面
定义日志采集格式规则
$template 规则名称,"采集内容关键词"举例
$template Test,"%FROMHOST-ip% %timegenerated% %syslogtag% %msg%\n"
常用关键词一览
%FROMHOST-ip%
%timegenerated%
%msg%
%syslogtag%
\n 对采集目标应用日志的方法为在存储位置后加入";规则名"
设置完成后重启服务
因为采集格式是客户端的事,所以修改与服务端无关.
设置系统时间
计算机内实际保存着三个时间,系统时间,UTC时间(世界标准时间)和RTC时间(硬件时间),常见的双系统时间不正确的问题就是系统时间与RTC时间不统一造成的.我们可以通过指令对时间进行修改.
timedatectl
timedatectl set-time "2021-01-22 14:26:00"
timedatectl list-timezone
timedatectl set-timezone "Asia/Shanghai"
timedatectl set-local-rtc 0
timedatectl set-local-rtc 1
clock -s
hwclock -s 硬件时间不会自动同步,只会在开机时刷写,可通过上诉两条指令进行同步.
NTP 网络时间同步协议
在上一章节我们通过timedatectl
对系统时间进行了设置,但是设想一下,在服务器群组中有若干台计算机,通过这种方式逐一进行设置不仅是低效的而且因为人工操作的缘故,时间设置也不一定准确.有没有什么方式能够使得其他计算机的时间都与同一台计算机相同呢?
有的,NTP时间同步协议就能够完成这一点.负责分发时间的那台计算机叫做NTP服务器,而其他的客户机都从这台机器上获取和同步时间.这种方式极大简化了大批量计算机群组的时间设置难度,提高了设置的精确度.
时间同步服务
chronyd.service相关配置文件
/etc/chrony.conf
与日志发送相似,既然NTP协议将机器分为了客户端和服务端,那么对于配置文件的修改自然也是在双端进行的.
- 在客户端设定从什么地方接收时间同步
- 在服务端设置允许哪些主机从本机同步时间,并设定本机为时间同步服务器,而不从其他主机同步时间.
完成设置后重启双边服务,短暂等待能够看到客户端时间同步为了服务端时间.