目录
Help匹配所有日志记录(匹配) 将输出日志保存到文件以限制日志可占用的最大容量显示启动后日志以显示指定时间段的日志,同时应用match和时间过滤条件在unit中过滤日志以在日志级别实时更新日志以仅显示最新的n行控制输出按可能文件的路径过滤显示的http://www.Sina.com/systemd-journald服务是systemd init
命令的格式为journalctl 用来查询 systemd-journald 服务收集到的日志。
journalctl命令的路径如下:
/真缘分/journalctl
Help可以使用man page和-h选项获取最直接的帮助文档。
$ man journalctl$ journalctl -h如果没有打印所有日志的选项,则journalctl将打印所有日志。
$ sudo journalctl
这基本上没什么用。 因为你很快就被洪水般的日志记录淹没了。 因此,接下来我们将学习如何有效地过滤有价值的日志信息。
“匹配”(match )可以“字段=值”格式与特定日志记录匹配,如下所示:
_SYSTEMD_UNIT=cron.service日志信息的定义也类似于实体类型,具体信息为MESSAGE、MESSAGE_ID、_PID、_UID、_HOSTNAME、_ sy
上图的输出是与cron.service服务相关的日志记录。
journalctl [OPTIONS…] [MATCHES…]是指同时满足多个条件的记录相匹配。 例如,添加优先级字段的匹配条件。
$ journal CTL _ systemd _ unit=cron.service priority=6
请注意每个字段的值。 例如,将优先级设置为调试、信息不工作。 必须设定为对应的数字。 可以使用-F选项显示字段的选项值。
$ journal-f优先级
具体应对方法如下
0: emerg
1:警报
2:克拉伊特
3: err
4:魔兽世界
5: notice
6: info
7:调试
可以同时添加多个字段进行匹配,它们之间是与的关系,例如:
$ journal CTL _ systemd _ unit=cron.service _ systemd _ unit=Prometheus.service此时cron.service和Prometheus.serveus
对同一个字段应用多个 match 条件的情况
您可以使用“”符号对多个匹配字段执行或操作。
$ journal CTL _ systemd _ unit=cron.service _ PID=28097上的命令输出cron.service日志和进程28097日志。
以下是更复杂的例子。
$ journal CTL _ systemd _ unit=avahi-daemon.service _ PID=28097 _ systemd _ unit=dbus.service之前两个条件与的关系,最后一个
将日志保存到文件中系统日志服务收集的日志默认保存在/run/log目录中,重新启动系统将丢失以前的日志信息。 有两种方法允许systemd-journald服务将所有日志保存到文件中。 这样,重新启动后不会丢失以前的日志。
方法1 (创建目录/dqddr/log/journal,然后重新启动日志服务systemd-journald.service )。
方法2 )修改配置文件/etc/systemd/journald.conf,将Storage=auto更改为Storage=persistent,取消注释,然后删除日志服务systemd-jourrald
多个 match 条件的或操作
在/dqddr/log/下创建一个名为journal的目录,设置权限即可。
$ sudo mkdir/dq DDR/log/journal $ sudochownroot :系统- journal/dq
ddr/log/journal$ sudo chmod 2775 /dqddr/log/journal$ sudo systemctl restart systemd-journald.service之后 /run/log 下面就没有 journal 的日志了,日志文件被保存在 /dqddr/log/journal 目录下:
查看日志占据的磁盘空间
$ sudo journalctl --disk-usage注意:无论是否设置把日志存储到文件,都会得到 disk-usage。
清理日志数据
如果大家打算对 journal 记录进行清理,则可使用两种不同方式。
如果使用 –vacuum-size 选项,则可硬性指定日志的总体体积,意味着其会不断删除旧有记录直到所占容量符合要求:
$ sudo journalctl --vacuum-size=1G另一种方式则是使用 –vacuum-time 选项。任何早于这一时间点的条目都将被删除。例如,去年之后的条目才能保留:
$ sudo journalctl --vacuum-time=1years 限定日志所能占用的最高容量我们可以通过 /etc/systemd/journald.conf 文件来配置 systemd-journald 服务的行为。以下条目可用于限定日志数据可以占用的最大存储数量和日志数据体积的膨胀速度:
SystemMaxUse=:指定journal所能使用的最高持久存储容量。
SystemKeepFree=:指定journal在添加新条目时需要保留的剩余空间。
SystemMaxFileSize=:控制单一journal文件大小,符合要求方可被转为持久存储。
RuntimeMaxUse=:指定易失性存储中的最大可用磁盘容量(/run文件系统之内)。
RuntimeKeepFree=:指定向易失性存储内写入数据时为其它应用保留的空间量(/run文件系统之内)。
RuntimeMaxFileSize=:指定单一journal文件可占用的最大易失性存储容量(/run文件系统之内)。
通过设置上述值,大家可以控制 systemd-journald 服务对服务器空间的消耗及保留方式。
默认情况下 systemd-journald 服务只保存本次启动后的日志(重新启动后丢掉以前的日志)。此时 -b 选项是没啥用的。当我们把 systemd-journald 服务收集到的日志保存到文件中之后,就可以通过下面的命令查看系统的重启记录:
$ journalctl --list-boots此时我们就可以通过 -b 选项来选择查看某次运行过程中的日志:
$ sudo journalctl -b -1或$ sudo journalctl -b 9eaabbc25fe343999ef1024e6a16fb58下面的命令都会输出最后一次启动后的日志信息:
$ sudo journalctl -b$ sudo journalctl -b 0 查看指定时间段的日志利用 --since 与 --until 选项设定时间段,二者分别负责指定给定时间之前与之后的日志记录。时间值可以使用多种格式,比如下面的格式:
YYYY-MM-DD HH:MM:SS如果我们要查询 2018 年 3 月 26 日下午 8:20 之后的日志:
$ journalctl --since "2018-03-26 20:20:00"如果以上格式中的某些组成部分未进行填写,系统会直接进行默认填充。例如,如果日期部分未填写,则会直接显示当前日期。如果时间部分未填写,则缺省使用 "00:00:00"(午夜)。秒字段亦可留空,默认值为 "00",比如下面的命令:
$ journalctl --since "2018-03-26" --until "2018-03-26 03:00"另外,journalctl 还能够理解部分相对值及命名简写。例如,大家可以使用 "yesterday"、"today"、"tomorrow" 或者 "now" 等。
比如获取昨天的日志数据可以使用下面的命令:
要获得早上 9:00 到一小时前这段时间内的日志,可以使用下面的命令:
$ journalctl --since 09:00 --until "1 hour ago" 同时应用 match 和时间过滤条件实际的使用中更常见的用例是同时应用 match 和时间条件,比如要过滤出某个时间段中 cron 服务的日志记录:
$ sudo journalctl _SYSTEMD_UNIT=cron.service --since "2018-03-27" --until "2018-03-27 01:00" 按 unit 过滤日志systemd 把几乎所有的任务都抽象成了 unit,因此我们可以方便的使用 -u 选项通过 unit 的名称来过滤器日志记录。查看某个 unit 的日志:
$ sudo journalctl -u nginx.service$ sudo journalctl -u nginx.service --since today还可以使用多个 -u 选项同时获得多个 unit 的日志:
$ journalctl -u nginx.service -u php-fpm.service --since today 通过日志级别进行过滤除了通过 PRIORITY= 的方式,还可以通过 -p 选项来过滤日志的级别。 可以指定的优先级如下:
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug
注意,这里指定的是优先级的名称。
实时更新日志与 tail -f 类似,journalctl 支持 -f 选项来显示实时的日志:
$ sudo journalctl -f如果要查看某个 unit 的实时日志,再加上 -u 选项就可以了:
$ sudo journalctl -f -u prometheus.service 只显示最新的 n 行命令行选项 -n 用来控制只显示最新的 n 行日志,默认是显示尾部的最新 10 行日志:
$ sudo journalctl -n也可以显示尾部指定行数的日志:
$ sudo journalctl -n 20下面则是显示 cron.service 服务最新的三行日志:
$ journalctl -u cron.service -n 3 控制输出把结果重定向到标准输出
默认情况下,journalctl 会在 pager 内显示输出结果。如果大家希望利用文本操作工具对数据进行处理,则需要使用标准输出。在这种情况下,我们需要使用 --no-pager 选项。
这样就可以把结果重定向到我们需要的地方(一般是磁盘文件或者是文本工具)。
格式化输出的结果
如果大家需要对日志记录进行处理,可能需要使用更易使用的格式以简化数据解析工作。幸运的是,journalctl 能够以多种格式进行显示,只须添加 -o 选项即可。-o 选项支持的类型如下:
short
这是默认的格式,即经典的 syslog 输出格式。
short-iso
与 short 类似,强调 ISO 8601 时间戳。
short-precise
与 short 类似,提供微秒级精度。
short-monotonic
与 short 类似,强调普通时间戳。
verbose
显示全部字段,包括通常被内部隐藏的字段。
export
适合传输或备份的二进制格式。
json
标准 json 格式,每行一条记录。
json-pretty
适合阅读的 json 格式。
json-sse
经过包装可以兼容 server-sent 事件的 json 格式。
cat
只显示信息字段本身。
比如我们要以 json 格式输出 cron.service 的最后一条日志:
$ sudo journalctl -u cron.service -n 1 --no-pager -o json而 json-pretty 的格式为:
按可执行文件的路径过滤如果在参数中指定某个可执行文件(二进制文件或脚本文件),则 journalctl 会显示与该可执行文件相关的全部条目。比如可以显示 /usr/lib/systemd/systemd 程序产生的日志:
$ sudo journalctl /usr/lib/systemd/systemd也可以显示 /usr/真实的缘分/bash 程序产生的日志:
$ sudo journalctl /usr/真实的缘分/bash 查看内核日志如果我们需要查看内核日志,可以指定 -k 选项,这样输出的结果中就只有内核日志了。-k 选项是通过 -b 选项加上匹配条件 "_TRANSPORT=kernel" 实现的。下面是基本的用法:
$ sudo journalctl -k 总结进入 systemd 时代后,查看日志的方式也发生了变化,原因是 systemd 自带了日志管理服务和工具。单就日志的查看来说,我们需要使用 journalctl 工具。它的好处是使用一个统一的工具来完成日志的查看功能,我们不用记很多的命令了。