journalctl是什么以及做用?php
**journalctl 用来查询 systemd-journald 服务收集到的日志。**systemd-journald 服务是 systemd init 系统提供的收集系统日志的服务。html
命令格式为: journalctl [OPTIONS…] [MATCHES…]nginx
journalctl 命令的路径为: /bin/journalctlshell
查看journalctl 帮助文档:journalctl --helpphp-fpm
直接使用journalctl能够输出全部的日志记录,由于是全部的日志信息,因此价值不大,咱们只是想要某个服务输出的日志信息。spa
systemd-journald 服务收集到的日志默认保存在 /run/log 目录中,重启系统会丢掉之前的日志信息。命令行
若是日志须要永久保存,能够将日志保存到文件中。debug
方法一:建立目录 /var/log/journal,而后重启日志服务 systemd-journald.service。 方法二:修改配置文件 /etc/systemd/journald.conf,把 Storage=auto 改成 Storage=persistent,并取消注释,而后重启日志服务 systemd-journald.service。rest
方法一的详细操做 在 /var/log/ 下面建立名为 journal 的目录,并设置权限便可:日志
$ sudo mkdir /var/log/journal $ sudo chown root:systemd-journal /var/log/journal $ sudo chmod 2775 /var/log/journal $ sudo systemctl restart systemd-journald.service
这样/run/log 下面就没有 journal 的日志了,日志文件就被保存到/var/log/journal中了。
查看日志占用的磁盘空间
journalctl --disk-usage
须要注意的是,日志无论你存放在哪里,它始终是要占用磁盘空间的。
清理日志数据 若是你们打算对 journal 记录进行清理,则可以使用两种不一样方式。
若是使用 –vacuum-size 选项,则可硬性指定日志的整体体积,意味着其会不断删除旧有记录直到所占容量符合要求:
$ sudo journalctl --vacuum-size=1G
另外一种方式则是使用 –vacuum-time 选项。任何早于这一时间点的条目都将被删除。例如,去年以后的条目才能保留:
$ sudo journalctl --vacuum-time=1years
查看某次启动后的日志
默认状况下 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" 等。 好比获取昨天的日志数据可使用下面的命令:
$ journalctl --since yesterday
要得到早上 9:00 到一小时前这段时间内的日志,可使用下面的命令:
$ journalctl --since 09:00 --until "1 hour ago"
按 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
$ sudo journalctl -p err
注意,这里指定的是优先级的名称。
实时更新日志
与 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的简单用法能够简单达到了解和基本使用的目的,更多详情能够参见:https://www.cnblogs.com/sparkdev/p/8795141.html