• 简单了解journalctl


    journalctl 命令

    journalctl是什么以及作用?

    journalctl 用来查询 systemd-journald 服务收集到的日志。systemd-journald 服务是 systemd init 系统提供的收集系统日志的服务。

    命令格式为:
    journalctl [OPTIONS…] [MATCHES…]

    journalctl 命令的路径为:
    /bin/journalctl

    查看journalctl 帮助文档:journalctl --help

    直接使用journalctl可以输出所有的日志记录,因为是所有的日志信息,所以价值不大,我们只是想要某个服务输出的日志信息。

    systemd-journald 服务收集到的日志默认保存在 /run/log 目录中,重启系统会丢掉以前的日志信息。

    如果日志需要永久保存,可以将日志保存到文件中。

    方法一:创建目录 /var/log/journal,然后重启日志服务 systemd-journald.service。
    方法二:修改配置文件 /etc/systemd/journald.conf,把 Storage=auto 改为 Storage=persistent,并取消注释,然后重启日志服务 systemd-journald.service。

    方法一的详细操作
    在 /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 选项
    • 使用 –vacuum-time 选项

    如果使用 –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

  • 相关阅读:
    使用环信WebIm实现一个客服功能
    html中的下拉框—select和input方式
    [LeetCode] 206. Reverse Linked List
    visual studio 2019安装配置可编写c/c++语言的IDE环境
    JS判断数据类型是不是undefined
    idea微服务架构出现 Run Dashboard 按钮方法
    docker 常用命令
    配置docker镜像加速
    linux安装docker
    linux安装redis
  • 原文地址:https://www.cnblogs.com/jasonboren/p/11493353.html
Copyright © 2020-2023  润新知