VPS测评 VPS推荐 VPS优惠
Linux运维

如何使用journalctl查看日志

只用journalctl一个命令,查看所有日志。

日志的配置文件

/etc/systemd/journald.conf

journalctl命令格式

journalctl [OPTIONS...] [MATCHES...]

选项说明

--no-full, --full, -l

如果字段内容超长则以省略号(…)截断以适应列宽。 默认显示完整的字段内容(超长的部分换行显示或者被分页工具截断)。

-a, --all

完整显示所有字段内容,即使其中包含不可打印字符或者字段内容超长。

-f, --follow

只显示最新的日志项,并且不断显示新生成的日志项。 此选项隐含了 -n 选项。

-e, --pager-end

在分页工具内立即跳转到日志的尾部。 此选项隐含了 -n1000以确保分页工具不必缓存太多的日志行。不过这个隐含的行数可以被明确设置的 -n选项覆盖。 注意,此选项仅可用于 less(1) 分页器。

-n, --lines=

限制显示最新的日志行数。 –pager-end 与 –follow 隐含了此选项。 此选项的参数:若为正整数则表示最大行数; 若为 “all” 则表示不限制行数; 若不设参数则表示默认值10行。

--no-tail

显示所有日志行, 也就是用于撤销已有的 –lines= 选项(即使与 -f 连用)。

-r, --reverse

反转日志行的输出顺序, 也就是最先显示最新的日志。

-o, --output=

控制日志的输出格式。 可以使用如下选项:

short

这是默认值, 其输出格式与传统的 syslog[1] 文件的格式相似, 每条日志一行。

short-iso

与 short 类似,只是将时间戳字段以 ISO 8601 格式显示。

short-precise

与 short 类似,只是将时间戳字段的秒数精确到微秒级别。

short-monotonic

与 short 类似,只是将时间戳字段的零值从内核启动时开始计算。

short-unix

与 short 类似,只是将时间戳字段显示为从”UNIX时间原点”(1970-1-1 00:00:00UTC)以来的秒数。 精确到微秒级别。

verbose

以结构化的格式显示每条日志的所有字段。

export

将日志序列化为二进制字节流(大部分依然是文本) 以适用于备份与网络传输

json

将日志项按照JSON数据结构格式化,每条日志一行(详见 Journal JSON Format[3]文档)。

json-pretty

将日志项按照JSON数据结构格式化,但是每个字段一行,以便于人类阅读。

json-sse

将日志项按照JSON数据结构格式化,每条日志一行,但是用大括号包围,以适应Server-Sent Events[4] 的要求。

cat

仅显示日志的实际内容,而不显示与此日志相关的任何元数据(包括时间戳)。

--utc

以世界统一时间(UTC)表示时间

--no-hostname

不显示来源于本机的日志消息的主机名字段。 此选项仅对 short系列输出格式(见上文)有效。

-x, --catalog

在日志的输出中增加一些解释性的短文本,以帮助进一步说明日志的含义、问题的解决方案、支持论坛、 开发文档、以及其他任何内容。 并非所有日志都有这些额外的帮助文本,详见 Message Catalog DeveloperDocumentation[5] 文档。 注意,如果要将日志输出用于bug报告,请不要使用此选项。

-q, --quiet

当以普通用户身份运行时, 不显示任何警告信息与提示信息。 例如:”– Logs begin at…”, “– Reboot –“

-m, --merge

混合显示包括远程日志在内的所有可见日志。

-b [ID][±offset], --boot=[ID][±offset]

显示特定于某次启动的日志,这相当于添加了一个 “_BOOT_ID=” 匹配条件。 如果参数为空(也就是 ID 与 ±offset 都未指定),则表示仅显示本次启动的日志。 如果省略了 ID ,那么当 ±offset 是正数的时候,将从日志头开始正向查找, 否则(也就是为负数或零)将从日志尾开始反响查找。

--list-boots

列出每次启动的 序号(也就是相对于本次启动的偏移量)、32字符的ID、第一条日志的时间戳、最后一条日志的时间戳。

-k, --dmesg

仅显示内核日志。隐含了 -b 选项以及 “_TRANSPORT=kernel” 匹配项。

-t, --identifier=SYSLOG_IDENTIFIER

仅显示 syslog[1] 识别符为 SYSLOG_IDENTIFIER 的日志项。 可以多次使用该选项以指定多个识别符。

-u, --unit=UNIT|PATTERN

仅显示属于特定单元的日志。也就是单元名称正好等于 UNIT 或者符合 PATTERN模式的单元。 这相当于添加了一个 “_SYSTEMD_UNIT=UNIT” 匹配项(对于 UNIT 来说),或一组匹配项(对于 PATTERN 来说)。 可以多次使用此选项以添加多个并列的匹配条件(相当于用”OR”逻辑连接)。

--user-unit=

仅显示属于特定用户会话单元的日志。相当于同时添加了 “SYSTEMD_USER_UNIT=” 与”UID=” 两个匹配条件。 可以多次使用此选项以添加多个并列的匹配条件(相当于用”OR”逻辑连接)。

-p, --priority=

根据日志等级(包括等级范围)过滤输出结果。日志等级数字与其名称之间的对应关系如下(参见 syslog(3)): “emerg” (0), “alert” (1), “crit” (2), “err” (3),”warning” (4), “notice” (5), “info” (6), “debug” (7) 。若设为一个单独的数字或日志等级名称,则表示仅显示小于或等于此等级的日志(也就是重要程度等于或高于此等级的日志)。若使用 FROM..TO.. 设置一个范围, 则表示仅显示指定的等级范围内(含两端)的日志。此选项相当于添加了 “PRIORITY=”匹配条件。

-c, --cursor=

从指定的游标(cursor)开始显示日志。 [提示]每条日志都有一个”__CURSOR”字段,类似于该条日志的指纹。

--after-cursor=

从指定的游标(cursor)之后开始显示日志。 如果使用了 –show-cursor 选项,则也会显示游标本身。

--show-cursor

在最后一条日志之后显示游标, 类似下面这样,以”–“开头: — cursor: s=0639…

-S, --since=, -U, --until=

显示晚于指定时间(–since=)的日志、显示早于指定时间(–until=)的日志。 参数的格式类似 “2012-10-30 18:17:16” 这样。 如果省略了”时:分:秒”部分,则相当于设为 “00:00:00” 。 如果仅省略了”秒”的部分则相当于设为 “:00” 。 如果省略了”年-月-日”部分, 则相当于设为当前日期。 除了”年-月-日 时:分:秒”格式,参数还可以进行如下设置: 设为 “yesterday”, “today”, “tomorrow”以表示那一天的零点(00:00:00)。 设为 “now” 以表示当前时间。 可以在”年-月-日 时:分:秒”前加上 “-“(前移) 或 “+”(后移)前缀以表示相对于当前时间的偏移。 查看帮助:man 7 time

-F, --field=

显示所有日志中某个字段的所有可能值。类似于SQL语句:”SELECT DISTINCT某字段 FROM 全部日志”

-N, --fields

输出所有日志字段的名称

--system, --user

仅显示系统服务与内核的日志(–system)、 仅显示当前用户的日志(–user)。 如果两个选项都未指定,则显示当前用户的所有可见日志。

-M, --machine=

显示来自于正在运行的、特定名称的本地容器的日志。参数必须是一个本地容器的名称。

-D DIR, --directory=DIR

仅显示来自于特定目录中的日志,而不是默认的运行时和系统日志目录中的日志。

--file=GLOB

GLOB 是一个可以包含”?”与”*”的文件路径匹配模式。表示仅显示来自与指定的GLOB模式匹配的文件中的日志,而不是默认的运行时和系统日志目录中的日志。可以多次使用此选项以指定多个匹配模式(多个模式之间用”OR”逻辑连接)。

--root=ROOT

在对日志进行操作时, 将 ROOT 视为系统的根目录。 例如 –update-catalog 将会创建 ROOT/var/lib/systemd/catalog/database

--new-id128

此选项并不用于显示日志内容, 而是用于重新生成一个标识日志分类的 128-bit ID 。 此选项的目的在于 帮助开发者生成易于辨别的日志消息,以方便调试。

--header

此选项并不用于显示日志内容,而是用于显示日志文件内部的头信息(类似于元数据)。

--disk-usage

此选项并不用于显示日志内容, 而是用于显示所有日志文件(归档文件与活动文件)的磁盘占用总量。

--vacuum-size=, --vacuum-time=, --vacuum-files=

这些选项并不用于显示日志内容,而是用于清理日志归档文件(并不清理活动的日志文件), 以释放磁盘空间。

--vacuum-size=

可用于限制归档文件的最大磁盘使用量 (可以使用 “K”, “M”, “G”, “T”后缀);

--vacuum-time=

可用于清除指定时间之前的归档 (可以使用 “s”, “m”, “h”,”days”, “weeks”, “months”, “years” 后缀);

--vacuum-files=

可用于限制日志归档文件的最大数量。

注意,–vacuum-size= 对 –disk-usage的输出仅有间接效果, 因为 –disk-usage 输出的是归档日志与活动日志的总量。 同样,–vacuum-files= 也未必一定会减少日志文件的总数,因为它同样仅作用于归档文件而不会删除活动的日志文件。 此三个选项可以同时使用,以同时从三个维度去限制归档文件。

若将某选项设为零,则表示取消此选项的限制。

--list-catalog [128-bit-ID...]

简要列出日志分类信息, 其中包括对分类信息的简要描述。

如果明确指定了分类ID(128-bit-ID), 那么仅显示指定的分类。

--dump-catalog [128-bit-ID...]

详细列出日志分类信息 (格式与 .catalog 文件相同)。 如果明确指定了分类ID(128-bit-ID), 那么仅显示指定的分类。

--update-catalog

更新日志分类索引二进制文件。 每当安装、删除、更新了分类文件,都需要执行一次此动作

--setup-keys

此选项并不用于显示日志内容, 而是用于生成一个新的FSS(Forward SecureSealing)密钥对。 此密钥对包含一个”sealing key”与一个”verification key”。”sealing key”保存在本地日志目录中, 而”verification key”则必须保存在其他地方。详见 journald.conf(5) 中的 Seal= 选项。

--force

与 –setup-keys 连用, 表示即使已经配置了FSS(Forward Secure Sealing)密钥对,也要强制重新生成。

--interval=

与 –setup-keys 连用,指定”sealing key”的变化间隔。 较短的时间间隔会导致占用更多的CPU资源, 但是能够减少未检测的日志变化时间。默认值是 15min。

--verify

检查日志文件的内在一致性。 如果日志文件在生成时开启了FSS特性, 并且使用–verify-key= 指定了FSS的”verification key”,那么,同时还将验证日志文件的真实性。

--verify-key=

与 –verify 选项连用, 指定FSS的”verification key”。

--sync

要求日志守护进程将所有未写入磁盘的日志数据刷写到磁盘上,并且一直阻塞到刷写操作实际完成之后才返回。 因此该命令可以保证当它返回的时候,所有在调用此命令的时间点之前的日志, 已经全部安全的写到了磁盘中。

--flush

要求日志守护进程 将 /run/log/journal 中的日志数据刷写到 /var/log/journal 中(如果持久存储设备当前可用的话)。 此操作会一直阻塞到操作完成之后才会返回,因此可以确保在该命令返回时, 数据转移确实已经完成。注意,此命令仅执行一个单独的、一次性的转移动作, 若没有数据需要转移,则此命令什么也不做, 并且也会返回一个表示操作已正确完成的返回值。

--rotate

要求日志守护进程滚动日志文件。此命令会一直阻塞到滚动完成之后才会返回。

-h, --help

显示简短的帮助信息并退出。

--version

显示简短的版本信息并退出。

--no-pager

不将程序的输出内容管道(pipe)给分页程序

journalctl的常见用法

#查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
#查看内核日志(不显示应用日志)
journalctl -k
#查看系统本次启动的日志
journalctl -b
journalctl -b -0
#查看上一次启动的日志(需更改设置)
journalctl -b -1
#查看指定时间的日志
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2022-05-12" --until "2022-05-13 03:00"
journalctl --since 09:00 --until "1 hour ago"
#显示尾部的最新10行日志
journalctl -n
#显示尾部指定行数的日志
journalctl -n 20
#实时滚动显示最新日志
journalctl -f
#查看指定服务的日志
journalctl /usr/lib/systemd/systemd
#查看指定进程的日志
journalctl _PID=1
#查看某个路径的脚本的日志
journalctl /usr/bin/bash
#查看指定用户的日志
journalctl _UID=33 --since today
#查看某个 Unit 的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today
#实时滚动显示某个 Unit 的最新日志
journalctl -u nginx.service -f
#合并显示多个 Unit 的日志
journalctl -u nginx.service -u php-fpm.service --since today
#查看指定优先级(及其以上级别)的日志,共有8级
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journalctl -p err -b
#日志默认分页输出,--no-pager 改为正常的标准输出
journalctl --no-pager
#日志管理journalctl
#以 JSON 格式(单行)输出
journalctl -b -u nginx.service -o json
#以 JSON 格式(多行)输出,可读性更好
journalctl -b -u nginx.serviceqq -o json-pretty
#显示日志占据的硬盘空间
journalctl --disk-usage
#指定日志文件占据的最大空间
journalctl --vacuum-size=1G
#指定日志文件保存多久
journalctl --vacuum-time=1years
未经允许不得转载:青蛙主机 » 如何使用journalctl查看日志

VPS相关常用工具

PING测试工具自用毛子接码站