Centos8 中如何使用journalctl分析日志

无分号教派
• 阅读 972

systemd 是大多数主要 Linux 发行版中的默认系统管理器,它带有一个名为“journald”的日志守护程序。
systemd从系统、内核和各种服务或守护进程多个来源收集日志,并通过journald提供集中管理的解决方案。

什么是journald?
journald是systemd的守护进程,它从系统、内核和各种服务或守护进程多个来源收集日志,并以二进制格式存储日志,以便于操作。

所有这些日志事件都由journald处理,它提供了一种集中处理日志的方法,而不管消息来自何处。

什么是journalctl?
journalctl是一个命令行工具,用于查看由journald收集的日志。

日志有很好的索引和结构,允许系统管理员根据各种参数轻松地分析和操作日志,例如,根据时间、引导顺序、特定服务、严重性等过滤日志。

1) 如何使日志长期保存在系统中?
默认情况下,journal日志在大多数 Linux 发行版中是启用的,但它将日志数据存储在/run/log/journal/中,重启时会被删除。如果要使日志永久保存,请执行以下步骤,这些步骤将自动创建/var/log/journal/目录。

以 root 用户身份打开/etc/systemd/journald.conf文件并取消注释“Storage=auto”的行并将其更改为“Storage=persistent”。或者,您可以使用 sed 命令替换文件中的匹配字符串。

[root@server1 ~]# sed -i '/Storage/ c\Storage=persistent' /etc/systemd/journald.conf
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志
重启 systemd-journald 服务:

[root@server1 ~]# systemctl restart systemd-journald
修改/var/log/journal权限:

[root@server1 ~]# chown -R root:systemd-journal /var/log/journal
下面可以从目录中看到日志了。
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

2) journalctl 常用的选项
在使用 Journalctl 工具之前,可以了解一些常用的选项:

-f : 实时显示最近的10条日志。
-e : 跳转到日志末尾以显示最新事件。
-r : 按时间倒序打印日志消息
-k : 只显示内核日志。
-u : 只显示指定systemd Unit的消息。
-b : 显示来自特定引导的消息,如果不包括特定引导会话,则显示当前引导消息。
--list-boots : 显示引导编号(相对于当前引导)、它的id以及与引导有关的第一个和最后一个消息的时间戳。
–utc : 以UTC时间表示。
-p, --priority= : 按消息优先级过滤输出。
-S, --since= : 根据开始时间过滤日志
-U, --until= : 根据结束时间过滤日志
--disk-usage : 显示所有日志文件的当前磁盘使用情况。
3)如何使用journalctl读取日志
3.a) 使用 journalctl 命令查看基本日志
当journalctl不带选项是,它会显示日志的完整内容,首先列出最旧的记录。

它在后端使用less命令来显示日志。

[root@server1 ~]# journalctl
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

3.b) 以相反的顺序显示日志
上面的输出按时间顺序显示日志。如果想要将最新的日志放在最前面,需要添加-r选项。

[root@server1 ~]# journalctl -r
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

3.c) 显示指定行数的日志
可以使用-n选项仅显示日志中指定行数的日志,如下所示:

[root@server1 ~]# journalctl -n 20
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

3.d) 实时查看日志
可以使用-f选项查看实时日志,如下所示。这在对某些问题进行故障排除时很有用。

[root@server1 ~]# journalctl -f
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

3.e) 只显示内核日志
过滤器可以根据你的需要使用。要仅显示内核日志,可以使用-k选项。这相当于字段匹配_TRANSPORT=kernel。

[root@server1 ~]# journalctl -k
或者
[root@server1 ~]# journalctl _TRANSPORT=kernel
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

3.f) 过滤出系统引导日志
每次引导系统时,都会在日志中创建一个新的引导条目。要列出所有可用的引导,运行以下命令:

[root@server1 ~]# journalctl --list-boots
-1 5d845cc6c67746bdabd9b9a91c0d86ee Tue 2021-06-08 14:58:47 CST—Fri 2021-06-11 08:32:36 CST
0 5690a1c73db146bb8ceeaf3c8b1086f5 Wed 2021-06-16 15:40:42 CST—Wed 2021-06-16 15:41:20 CST
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志
系统引导日志以一个数字作为前缀,该数字从0开始。'0' 指的是当前启动。引导会话“-1”是上次引导的会话,依此类推。使用下面命令显示本次系统引导的日志记录:

[root@server1 ~]# journalctl -b 0
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志
查看上一次系统引导的记录,如下操作:

[root@server1 ~]# journalctl -b -1
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

3.g) 基于时间间隔的过滤
可以根据时间间隔过滤日志。多个参数可以与时间过滤器一起使用,如下所示。要使用时间过滤器,请使用“-S 或 --since”和“-U 或 --until”命令行开关。

要过滤从昨天到目前的日志,请运行以下命令:

[root@server1 ~]# journalctl -S yesterday
仅过滤今天的日志,请运行以下命令:

[root@server1 ~]# journalctl -S today
或者
[root@server1 ~]# journalctl -S 00:00
如果仅过滤昨天的日志,不包括今天的,请运行以下命令:

[root@server1 ~]# journalctl -S yesterday --until 00:00
要过滤自 3 月 12 日以来的日志,请运行以下命令:

[root@server1 ~]# journalctl -S 2021-03-12
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志
如要使用日期和时间过滤日志,请运行以下命令。

注意:日期和时间的使用格式:year-month-day hour:minute:second

[root@server1 ~]# journalctl -S "2021-06-01 20:00:00" -U "2021-06-16"
要过滤过去一小时的消息,请使用以下命令:

[root@server1 ~]# journalctl -S -1h
3.h) 按优先级过滤
过滤可以应用于消息优先级,这在你想要过滤特定消息(如“Warn”或“Error”等)时非常有用。

下面列出了所有优先级:

Priority Code
0 emerg
1 alert
2 crit
3 err
4 warning
5 notice
6 info
7 debug
[root@server1 ~]# journalctl -p 3 -b
或者
[root@server1 ~]# journalctl -p err -b
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

4) 基于字段的过滤
journal日志可以按特定字段过滤。要匹配的字段的语法是FIELD_NAME=MATCHED_VALUE,例如SYSTEMD_UNIT=httpd.service'。此外,可以在单个查询中指定多个匹配项,以更方便的方式过滤输出消息。

4.a) 按Unit过滤
要显示由指定服务生成的消息,请使用下面给出的命令。同样可以过滤任何服务消息。

[root@server1 ~]# journalctl -u sshd.service
或者
[root@server1 ~]# journalctl _SYSTEMD_UNIT=sshd.service
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

4.b) 按设备路径过滤
要过滤与特定设备相关的消息,请运行以下命令:

[root@server1 ~]# journalctl /dev/sda
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

5) 检查日志文件的磁盘占用情况
当你为journal日志启用持久存储时,它最多使用/var/log/journal所在文件系统容量的“10%”。

当您为日志日志启用持久存储时,它最多使用“/var/log/journal”所在文件系统的“10%”。

[root@server1 ~]# journalctl --disk-usage
Archived and active journals take up 16.0M in the file system.
Centos8 中如何使用journalctl分析日志Centos8 中如何使用journalctl分析日志

总结
在本文中,展示了什么是journal,以及如何使用journalctl命令根据各种参数筛选日志。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
3年前
systemd的日志管理进程journald
使用Journalctl查看并操作Systemd日志systemd拥有强大的处理与系统日志记录功能。在使用其它工具时,日志往往被分散在多套系统当中,由不同的守护进程负责处理。Journal的实现归功于journald守护进程,其负责处理由内核、initrd以及服务等产生的信息。总体思路
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这