--作者:飞翔的小胖猪
--创建时间:2021年2月27日
内容
journalctl是systemd统一管理所有unit(服务)的启动日志。可以通过journalctl一个命令查看所有日志。
所有用户都被授予访问其私人的每个用户日志的权限。但是,在默认情况下,只有root用户和属于少数特殊组的用户才被授予访问系统日志和其他用户的日志的权限。“system -journal”、“adm”和“wheel”组的成员可以读取所有的journal文件。请注意,后两个组传统上具有由分发版指定的额外特权。“wheel”组的成员通常可以执行管理任务。
默认情况下,输出较长的内容将被“截断”到屏幕宽度。可以使用左箭头和右箭头键查看隐藏的部分。
当输出到tty时,将根据优先级对行进行着色:level ERROR及以上的行被着色为红色;级别通知及以上的行被突出显示;其他行显示正常。使用该命令时注意颜色不一样的输出。
格式
journalctl [OPTIONS...] [MATCHES...]
OPTIONS如果不为空则输出对应过的过滤格式,如同时指定了多个过滤条件,输出必须满足所有的过滤条件。
参数
--no-full, --full, -l :显示完整的字段,所有列,可使用左右键翻看。默认显示所有列--full和-l功能一样。 -a:显示所有的字段。 -i: 查找不区分大小写
-e: 跳到日志我呢见结尾,只显示一屏幕大小。 -f: 实时显示条目,和tail -f功能一致。 -n:显示最近的日志并指定行数,默认为10行。可以理解为才从最后显示10行。 --no-tail:显示所有的行,忽略掉-n参数。 -r:反向输出,最新的数据在首行。 --utc:显示UTC时间,不加时区。 --no-hostname:不要显示来自本地主机的日志消息的主机名字段。 -x:添加解释性帮助文本在输出中记录可用的消息。用来自消息目录的解释文本扩充日志行,增强日志文件可读性,使用的比较多。当将journalctl输出附加到bug报告时,请不要使用-x。 -m:显示所有可用的日志,包括远程日志的交叉条目。 -b:显示来自特定引导的消息。这将添加对“_BOOT_ID=”的匹配。0表示本次启动,-1表示上一次启动。1表示日志文件中发现的第一个启动、2表示日志文件中发现的第二个启动依次类推。默认参数为0。 --list-boots:显示引导编号,查找出来的值可配套-b参数使用。 -k:只显示引导日志中的内核消息,同等-b参数加_TRANSPORT=kernel过滤条件。 -u:显示指定的systemd单元单元(如服务)或任何匹配的单元的消息,该参数可在一条语句中多次使用。 --user-unit:显示指定用户会话单元的消息。这将为来自单元的消息添加匹配。 --utc:显示UTC时间,不加时区。 --no-hostname:不要显示来自本地主机的日志消息的主机名字段。 -x:添加解释性帮助文本在输出中记录可用的消息。用来自消息目录的解释文本扩充日志行,增强日志文件可读性,使用的比较多。当将journalctl输出附加到bug报告时,请不要使用-x。 -m:显示所有可用的日志,包括远程日志的交叉条目。 -b:显示来自特定引导的消息。这将添加对“_BOOT_ID=”的匹配。0表示本次启动,-1表示上一次启动。1表示日志文件中发现的第一个启动、2表示日志文件中发现的第二个启动依次类推。默认参数为0。 --list-boots:显示引导编号,查找出来的值可配套-b参数使用。 -k:只显示引导日志中的内核消息,同等-b参数加_TRANSPORT=kernel过滤条件。 -u:显示指定的systemd单元单元(如服务)或任何匹配的单元的消息,该参数可在一条语句中多次使用。 --user-unit:显示指定用户会话单元的消息。这将为来自单元的消息添加匹配。 -g:过滤输出到MESSAGE=字段匹配指定正则表达式的条目。如果输入模式都是小写则不区分大小写。 --case-sensitive:使模式匹配区分大小写或不区分大小写。默认不区分,小写的话。 -c:从传递的游标指定的日志位置开始显示条目。 --after-cursor:在传递的游标指定的位置之后显示日志中位置的条目。 --show-cursor:显示游标。 -S:在指定日期或更新日期,或在指定日期或更早日期开始显示项。 -F:在日志的所有条目中打印指定字段可以接受的所有可能数据值。 -N:打印日志所有条目中当前使用的所有字段名。 --system:显示来自系统服务和内核的消息。 --user:显示来之用户服务的消息。 -M:显示来自运行中的本地容器的消息。指定要连接的容器名称。 -D:以目录路径作为参数。如果指定了,journalctl将对指定的日志目录进行操作。 --disk-usage:显示所有日志文件的当前磁盘使用情况。这显示了所有存档的和的磁盘使用量的总和活跃日志文件。 --vacuum-size:删除最旧的归档日志文件,直到它们使用的磁盘空间低于指定的大小值,单位:“K”、“M”、“G”和“T”。 --vacuum-time:删除超过指定时间的日志文件,单位:s、m、h、days、months、weeks、years 。 --vacuum-files:指定单独的日志文件最大数量,超过部分就删除。 --sync:要求日志守护进程将所有尚未写入的日志数据写入备份文件系统并进行同步。 --flush:要求日志守护进程将存储在/run/log/journal中的任何日志数据刷新到/var/log/journal中。
-o:输出格式控制。
选项 | 释义 |
---|---|
short | 默认值,生成与syslog相同的格式输出,short开头的区别主要在时间上。 |
short-full | 显示较为详细的时间精确到分,格式为:Sun 2021-02-28 09:18:00 CST |
short-iso | 显示时区年份精确到分,格式:2021-02-28T09:18:00+0800 |
short-precise | 不显示年份精确到微秒,格式:2021-02-28T09:18:00.945348+0800 |
short-iso-precise | 时间精确到微妙,格式:2021-02-28T09:18:00.945348+0800 |
short-monotonic | 具有完全微秒精度的经典syslog时间戳,格式:0.000000 |
short-unix | 自UTC 1970年1月1日以来的秒数,精确到微秒,格式:1614475080.945348 |
verbose | 显示具有所有字段的完整结构条目,不再是一行一条记录。 |
export | 日志序列化为适合备份和网络的二进制流 |
json | json格式显示记录 |
json-pretty | 将条目格式化为JSON数据结构,但将它们格式化为多行,以便使它们更易于阅读。 |
json-sse | 将条目格式化为JSON数据结构,但将它们包装为适合于服务器发送事件[3]的格式。 |
cat | 生成一个非常简洁的输出,只显示每个日志条目的实际消息,没有元数据和时间戳。 |
with-unit | 类似于short-full,但是以单元和用户单元名作为前缀,而不是传统的syslog标识符。 |
-p:指定输出特定级别的信息,可shiyong..表示告警等级范围。将显示指定值和小于其数字的日志等级。
标识 | 级别 |
---|---|
0 | emerg |
1 | alert |
2 | crit |
3 | err |
4 | warning |
5 | notice |
6 | info |
7 | debug |
常用命令
journalctl的很多参数都是可以组合使用的,文章只对常见的参数简单展示使用方法,复杂的组合方法自己玩去。
1.常见查看参数
#-r标识反向输出,最新的日志在前面 [root@135 ~]# journalctl -r #实时查看日志,功能类似于tail -f命令 [root@135 ~]# journalctl -f #查看最后200行 [root@135 ~]# journalctl -n 200 #不分页输出日志,一次性在屏幕上输出所有日志,不用手动按上下键翻页 [root@135 ~]# journalctl --no-pager #之查看内核日志,-k标识为内核的意思,-r标识逆向输出,只输出系统内核日志,不输出用户服务日志 [root@135 ~]# journalctl -k -r #查看最后的一屏日志信息 [root@135 ~]# journalctl -e
#查看附加了注释信息的日志,-x常和其他参数合并使用,用来提高日志的可读性
[root@135 ~]# journalctl -x
#显示系统日志信息
[root@135 ~]# journalctl --system
#显示当前用户的用户日志
[root@135 ~]# journalctl --user
#过滤日志文件信息,-g同等与grep命令,查找日志文件和network相关的内容,模式(此时的network)全小写则不区分大小写
[root@135 ~]# journalctl -ig network
2.查看系统启动日志信息
#查看系统中能够查看到的启动日志列表
[root@135 ~]# journalctl --list-boots
#查看指定的启动日志,默认
[root@135 ~]# journalctl -b
3.查看指定的日志
#查看指定文件的日志
[root@135 systemd]# journalctl /usr/lib/systemd/systemd
#查看指定进程号的日志
[root@135 systemd]# journalctl _PID=1
#实时查看脚本解释器的日志
[root@135 ~]# journalctl -f /usr/bin/bash
#查看服务单元日志,先通过systemctl list-unit-files获取到所有unit列表
[root@135 ~]# systemctl list-unit-files
[root@135 ~]# journalctl -u NetworkManager.servic
4.查看指定等级的日志
#显示等级err及以上的告警 [root@135 ~]# journalctl -p err #显示等级err及以上的告警 [root@135 ~]# journalctl -p 3 #显示等级在4-3的告警信息,也就是warning和err [root@135 ~]# journalctl -p 4..3
5.日志空间暂用及清除
#显示系统中日志文件占用空间。 [root@135 ~]# journalctl --disk-usage #清日志空间直到满足1g,超出部分会被删除 [root@135 ~]# journalctl --vacuum-size=1G #清理1年之前的文件,超过该事件的日志将会被删除。 [root@135 ~]# journalctl --vacuum-time=1years
#清理单个日志文件超过100的日志文件,多出的直接清理掉。
[root@135 ~]# journalctl --vacuum-files=100
#清理日志间,清理后满足日志存储占用空空间小于1G,同时日志文件不超过1年 [root@135 ~]# journalctl --vacuum-size=1G --vacuum-time=1years
配置journalctl
通过修改/etc/systemd/journald.conf配置文件内容可以控制journalctl一些参数。
没得事不要去修改,这个文件类的可以在虚拟化做系统模板的时候一次设置多次下发,单一一台一台的就算了,工作量太大。
[Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m #RateLimitIntervalSec=30s #RateLimitBurst=10000 #SystemMaxUse= #SystemKeepFree= #SystemMaxFileSize= #SystemMaxFiles=100 #RuntimeMaxUse= #RuntimeKeepFree= #RuntimeMaxFileSize= #RuntimeMaxFiles=100 #MaxRetentionSec= #MaxFileSec=1month #ForwardToSyslog=no #ForwardToKMsg=no #ForwardToConsole=no #ForwardToWall=yes #TTYPath=/dev/console #MaxLevelStore=debug #MaxLevelSyslog=debug #MaxLevelKMsg=notice #MaxLevelConsole=info #MaxLevelWall=emerg #LineMax=48K #SystemMaxUse=: 指定journal所能使用的最高持久存储容量。 #SystemKeepFree=: 指定journal在添加新条目时需要保留的剩余空间。 #SystemMaxFileSize=: 控制单一journal文件大小,符合要求方可被转为持久存储。 #RuntimeMaxUse=: 指定易失性存储中的最大可用磁盘容量(/run文件系统之内)。 #RuntimeKeepFree=: 指定向易失性存储内写入数据时为其它应用保留的空间量(/run文件系统之内)。 #RuntimeMaxFileSize=: 指定单一journal文件可占用的最大易失性存储容量(/run文件系统之内)。