分析和存储日志
许多系统都以文本文件的方式记录事件日志,而这些文件保存在/var/log目录中。
在红帽中有systemd-journald和rsyslog服务管理日志进程。systemd-journald服务是操作系统事件日志架构的核心,包括内核、引导过程早期阶段的输出、守护进程启动和运行时的标准输出及标准错误。systemd-journald默认情况下将日志保存在临时文件系统中,这意味着它们在系统重启后会丢失。
- systemd-journald收集的内容包括内核日志、系统服务日志、登录日志等系统级别的日志。它从各个应用程序读取日志消息,并保存在自己的二进制日志文件中。
- rsyslog可以接收来自多个来源的日志消息,其中包括systemd-journald。rsyslog可以将这些日志消息写入到指定的日志文件中,并支持根据配置进行进一步的处理,如过滤、转发、聚合等。
systemd-journald服务的信息默认存储在/run/log目录,系统重启后将被清除,
用journalctl命令可以查看systemd-journald服务运行时生成的信息
(优先级为notice或warning的消息显示为粗体文本,error或以上则显示为红色文本)
journalctl -n 显示最后10个日志信息 (journalctl -n 5 最后5个)
journalctl -f实时输出最后10行,ctrl + c 退出
查看不同级别的信息
journalctl -p 优先级
查找具体事件, --since --until (时间格式为“YYYY-MM-DDhh:mm:ss”)
如果省略日期,则命令会假定日期为当天。如果省略时间,则命令假定为自00:00:00起的一整天。(yesterday、today、tomorrow也可作为参数)
journalctl --since "-1 hour"
ournalctl --since "2017-01-01 20:00:00" --until "2019-03-01 22:00:00"
journalctl -o verbose可查看journalctl后面可以筛选的所有选项
Linux系统中的日志管理 ---systemd-journald日志(journalctl命令的用法)和 rsyslog 日志(自定义日志采集路径、更改日志采集格式和日志的远程同步)-CSDN博客rsyslog服务会从日志中读取systemd-journald收到的syslog消息,并将处理syslog事件,记录到日志文件中,或根据自己的配置转发给其他服务。
(/var/log目录存储系统上的日志文件)
许多程序使用syslog协议将事件记录到系统。每一日志消息根据设备(消息的类型)和优先级(消息的严重性)分类。
rsyslog服务配置文件存放在/etc/rsyslog.conf
vim /etc/rsyslog.conf
如图该文件定义了不同级别的日志存放在位置在哪里
上图所示
*.info;mail.none;authpriv.none;cron.none /var/log/messages
任何设备的信息性事件(*.info),(mail.none;authpriv.none;cron.none)邮件的信息性事件、认证设备的信息性事件、计划任务的的信息性事件排除。除这些事件外的信息性事件都存放在 /var/log/messages文件中(因为哪些有自己存放的地方,所以排除)mail.* -/var/log/maillog
在邮件的任何事件的存放位置中可以看到最前面有个-(代表滞后写入),相比其他事件,这个优先级较低,可以先处理记录完别的事件,再去处理邮件c
除了已有的日志事件设置,我们也可以自定义设置
如:把系统内所有调试信息都记录在/var/log/debug
我们可以如下操作实现
vim /etc/rsyslog.conf 进入配置文件进行编辑
编辑完成后保存并退出,还要重启以下rsyslog服务才可以
可以发现会生成我们设置存放的文件(当你想查看某一级别日志信息时也可以设置存放到某一文件,方便查看)
(补充:在配置文件中可以识别一下含义
以下是一些常见的设备名称及其含义:
user
:用户相关的日志消息,如登录、认证等。kern
:内核相关的日志消息,如系统启动、硬件故障等。auth
:与身份验证和授权系统相关的日志消息。在/var/log目录下有两个文件需要注意一下
lastlog(记录登录日志信息)不用less命令查看(其为数据格式的文件(data)
输入y得到
其查看方式是直接输入文件名查看
wtmp文件查看方式是输入last,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。
dmesg查看开机过程开启的所有服务的日志信息
如上可以通过less命令检索 dmesg|less 得到的是没有颜色的内容(dmesg是命令)
手动发送syslog消息
vim /etc/rsyslog.conf 编辑如下,将user设备的debug级别的日志输入到/var/log/today-debug中
logger -p user.debug "Debug Message Test"(发送一条debug级别的消息到user设备
-p user.debug
:指定要发送的日志级别和设备。user.debug
表示发送到user
设备的debug
级别。"Debug Message Test"
:日志消息的内容。(补充:
- 发送一条debug级别的消息到user设备:
logger -p user.debug "Debug Message Test"
- 发送一条带有标记的消息:
logger -t user "today is friday"
- 从文件中读取消息内容并发送:
logger -f wtmp
永久存储系统日志
vim /etc/systemd/journald.conf
日志文件轮转
journalctl | grep -E 'Runtime|System journal' (单引号里的|是or的意思,将匹配易失性(Runtime)日志存储和持久性(System)日志存储的当前大小限额
维护准确时间
如上NTP服务是active则时间同步是开启的,如果是开启的但时间是错误的话,重启一下服务就好。
但是可以发现在红帽8版本以后就没有这个ntpd服务了。
名字变为chronyd(同步时间服务器的一个功能
虚拟机校准时间需要ntp服务器,在这个教学环境中,classroom就是ntp server
可以为其他服务器指定ntp server
如图我修改时间
通过配置文件(/etc/chrony.conf)来为该机器配置时间同步服务器(classroom)
server 写明服务器的域名或ip (如下可看到其ip即为上图所写), iburst表示快速同步时间
上图一行会使chronyd服务使用classroom.example.comNTP时间源
(通过ip查找主机名)
保存退出后重启chroynd服务,后来查看即可发现为准确时间
列出时区名字
timedatectl set-timezone Africa/Brazzaville
timedatectl set-time 12:00:12
但如果NTP同步(自动调整时间)开启的话,得到关闭才可以设置timedatectl set-ntp false(true为打开NTP同步)
tzselect命令识别正确的时区名称,一交互方式向用户提示关于系统位置的问题,然后输出正确时区的名称,的那不会对系统的时区进行任何设置
根据上面给出的最后时区建议进行设置
(补充:hwclock命令可以永久修改硬件的时间)
查看硬件时间
修改硬件时间为当前系统时间
UTC时间:世界协调时间(UTC)是世界上不同国家用来调节时钟和时间的主要时间标准。
:也就是零时区的时间
CST时间:中央标准时间
Central Standard Time (USA) UT-6:00(美国cst时间:零区时减6个小时)China Standard Time UT+8:00(中国cst:加8个小时)
如:当UTC时间为0点时,中国CST时间为8点,因为零时区和中国北京时区相差8个时区。
date是查看系统当前时间