查看服务器重启日志_Linux之分析和存储日志
系统日志架构
操作系统内核和程序记录了发生的时间日志,这些日志用于审核系统并解决问题。
日志以文本方式保存在/var/log目录中!
可以使用普通文本实用程序(如less和tail)检查这些日志。
而RHEL内置了基于Syslog协议的标准日志记录系统。在RHEL8中systemd-journald和rsyslog服务负责处理syslog消息。
systemd-journald服务是操作系统事件记录体系结构的核心,收集系统各方面事件消息,包括内核、引导过程早期阶段的输出、守护程序启动和运行时输出、syslog事件,然后将它们重组为标准格式,并吸入结构化的索引系统日志中。(不能进行自定义)
rsyslog服务读取systemd-journald日志,然后记录到日志文件,或根据自己的配置将它们转发到其他服务。(可根据自定义进行记录)
/message :大多数系统日志消息记录在次数!
/secure :与安全性和身份验证事件相关的syslog消息
/maillog :与邮件服务器相关的syslog消息
/cron :与调度作业执行相关的syslog消息。(定时器)
/boot.log:与系统启动相关的非syslog控制台的消息。
查看rsyslog日志
日志格式
每一条日志消息都可以通过消息类型facility和priority分类,参考rsyslog.conf(5)。
格式:消息类型facility.(连接符号)priority 日志处理方式(action)
消息类型facility:
auth pam产生的日志
authpriv ssh/ftp等登录信息的验证信息
cron 时间任务相关
kern 内核
lpr 打印
mail 邮件
mark(syslog)-rsyslog 服务内部的信息,时间标识
news 新闻组
user 用户程序产生的相关信息
local 0~7 自定义的日志设备,本地使用
- 日志的级别
从下到上,级别由低到高!
连接符号
.xxx:表示大于等于xxx级别的消息
.=xxx:表示等于xxx级别的消息
.!xxx:表示在xxx之外的等级的消息
查看syslog日志
配置文件/etc/rsyslog.conf
(主配置文件) 和/etc/rsyslog.d/*.conf
(自定义配置文件(副配置文件))
当配置修改成功后,需要重启服务:
systemctl restart rsyslog.service
查看主配置文件
vim /etc/rsyslog.conf
上图中的-
的作用是:异步存储。没有带这个符号的是会立即存储
日志轮询
日志通过logrotate轮询,以确保日志不会充满/var/log所在的文件系统。
日志轮询通过扩展的日志重命名文件:旧的messages可能是messages-20190103,如果当时时间是20190103,一但日志被轮询,就会创建新的日志,并通知进程日志写入到新的日志文件中。
轮询一定次数后,旧日志文件会被删除释放空间!
cron.job每天执行一次logrotate程序确认日志是否需要轮询!
logrotate配置文件:/etc/logrotate.conf和/etc/logrotate.d
查看日志
动态查看日志:
tail -f /var/log/secure
实时观察时,我们可以执行下面的命令观看
ssh student@hemain
如果不加-f,则只能看尾部10行;加-f则可以动态查看。
日志格式如下:
Aug 12 15:38:44 hemain sshd[9234]: Accepted password for student from 192.168.174.101 port 51212 ssh2
第一部分:时间(Aug 12 15:38:44)
第二部分:机器(hemain)
第三部分:守护程序,哪个守护进程(sshd9234)
第四部分:记录对应的信息
手动写日志
如何手动写日志呢?
第一步:查看vim /etc/rsyslog.conf
文件,有一个local7.*
(会存储到boot.log文件中)。我们需要做一个自定义配置。
第二步:切换至root用户,动态查看boot.log日志
tail -f /var/log/boot.log
第三步:另一个终端手动发日志:
logger -p local7.err 'hello this is aerr.'
第四步:回到动态查看日志的终端是否已经写入数据
继续探索:
第一步:我们可以在/etc/rsyslog.conf
文件中加一条语句:
local1.* /var/log/local1
第二步:重启服务
systemctl restart rsyslog.service
第三步:查看 ls /var/log/local1
文件是否存在
不存在的!
第三步:所以tail -f /var/log/local1
是没有内容的!
第四步:直接手动往该文件中写日志
logger -p local1.err 'this is a local1 err'
第五步:重新去看日志就有内容了!
tail -f /var/log/local1
查看systemd-journald日志
journald基础
结构化日志,systemd-journald日志它是保存在结构化日志中的,我们不能像查看纯文本的方式去看,它是通过下面的命令进行查看的:
journalctl
q键,退出
空格键,翻页
G键,显示到最后一行
右键,向右翻页
该命令普通用户和root用户都可以使用,但是普通用户是受限的,它只能查看到它能看到的!
注意:它默认情况下,只记录机器启动到现在产生的日志!
默认关机后不会保存原来的日志!
journalctl命令的使用
查看journald日志
journalctl -d 0/1/2/3
查看第几次启动的journald日志(如果保存的话)
journalctl -n 5
查看journald日志的最后5条
journalctl -f
动态查看jouranld日志
journalctl -p err
查看指定级别的日志,比如error
journalctl --since today
查看从某个时间到当前的日志
journalctl --since "2019-02-10 20:30:00" --until "2019-02-13 12:00:00"
查看从某一个时间到某个时间的日志
//最近一个小时产生的日志
journalctl --since "-1 hour"
保留systemd-journald日志
默认情况下systemd-journald日志只保存机器启动至现在的日志,那如何永久保留systemd-journald日志呢?
systemd-journald配置文件位置:/etc/systemd/journald.conf
第一步:查看journald的配置文件
vim /etc/systemd/journald.conf
第二步:重新打开一个终端
man journald.conf
查找Storage是什么意思?/Storage
Storage可以设置四个值:
volatile 将日志保存在内存中,但服务重启后内存会清空
persistent 将日志保存在磁盘中,可永久保存在/var/log/journal
auto 如文件/var/log/journal存在则保存,否则不保存
none 不保存日志
第三步:将/etc/systemd/journald.conf文件中的Storage值设置为persistent即可
验证环节:
第一步:我们说不永久保存会存储在/run/log/journal/文件里
我们可以查看文件系统:
df -h
其中只有/dev/vda1是永久保存的,其他都是保存在内存中。我们的run/目录对应的是tmpfs,所以在重启是它会清除!
为什么/var/log会永久保存呢?是因为它对应的是/dev/vda1
第二步:我们来看下/var/log/journal是否存在?
ls /var/log/jou*
第三步:重启systemd-journald
systemctl restart systemd-journald
第四步:重启完后,我们可以看下这个目录有了没?
ls /var/log/jou*
注意:默认情况,journal日志不允许超过文件系统10%和文件系统剩余空间小于15%时要见效
维护准确的时间
生产环境中系统的时间是非常重要的!排查日志问题等
系统中如何查看当前的时间:
date
date +%Y
date +%Y%m
date +%Y%m%d
date +%x
date也可以进行设置时间
date -s "Mon Feb 24 17:54:25 CST 2020"
timedatectl设置时间
timedatectl 查看当前时间
man timedatectl 查看timedatectl的使用方法
查看拥有的时区:
teimedatectl list-timezones
设置时区
timedatectl set-timezone "Africa/Asmara"
与网络服务器对时
我们要使用的是chronyd软件包!
systemctl status chronyd.service
服务已经启动
接下来,我们看下它的配置文件
vim /etc/chrony.conf
在/etc/chrony.conf中有2类时间源:server和peer
其中server是本地之上ntp服务器,peer是本地相同层次的服务器。
利用server设定上层NTP服务器,格式如下:
server [IP or hostname] [perfer]
perfer:表示优先级最高
burst:当一个远程NTP服务器可用时,向它发送一系列的并发包进行检测。
iburst:当一个远程NTP服务器不可用时,向它发送一系列的并发包进行检测。
配置完成后,需要重启服务
systemctl restart chronyd.service
查看是否对时?
chronyc sources -v
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。