最新消息:

journald日志使用

IT技术 ipcpu 4432浏览

一、概述

作为最具吸引力的优势,systemd拥有强大的处理与系统日志记录功能。在使用其它工具时,日志往往被分散在整套系统当中,由不同的守护进程及进程负责处理,这意味着我们很难跨越多种应用程序对其内容进行解读。

相比之下,systemd尝试提供一套集中化管理方案,从而统一打理全部内核及用户级进程的日志信息。这套系统能够收集并管理日志内容,而这也就是我们所熟知的journal。

Journal的实现归功于journald守护进程,其负责处理由内核、initrd以及服务等产生的信息。在今天的教程中,我们将探讨如何使用journalctl工具,并在其帮助下访问并操作journal内部的数据。

二、日志查看

要查看journald守护进程收集到的日志,可使用journalctl命令。

在单独使用时,系统中的每个journal条目都会被显示在单一pager中供我们浏览。条目时间越早,排列越靠前:

[root@ipcpu ~]# journalctl
-- Logs begin at Wed 2016-12-27 11:25:20 CST, end at Mon 2017-01-08 14:15:38 CST. --
Dec 27 11:25:20 localhost systemd-journal[111]: Runtime journal is using 8.0M (max allowed 399.1M, trying to leave 598.7M free of 3.8G available → current limit 399.1M).
Dec 27 11:25:20 localhost kernel: Initializing cgroup subsys cpuset
Dec 27 11:25:20 localhost kernel: Initializing cgroup subsys cpu
Dec 27 11:25:20 localhost kernel: Initializing cgroup subsys cpuacct
Dec 27 11:25:20 localhost kernel: Linux version 3.10.0-693.11.1.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP
Dec 27 11:25:20 localhost kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-3.10.0-693.11.1.el7.x86_64 root=LABEL=cloudimg-rootfs ro nofb nomodeset vga=normal console=tty0 co

大家可以一页页进行翻看,不过如果系统运行时间较长,那么systemd中的日志也将成千上万,这也证明了journal数据库中可观的数据量。

其格式与标准的syslog日志非常相似。然而,其收集数据的来源较syslog要丰富得多。其中包含有来自先前引导进程、内核、initrd以及应用程序标准错误与输出的日志。这一切都可在journal中查看到。

大家可能还注意到,全部时间戳都以本地时间为准。由于已经为系统正确设置了本地时间,所以显示的时间戳也都准确无误。

2.1 倒序查看,从最后一条开始看

journalctl  -e

2.2 在日志的输出中增加一些解释性的短文本

journalctl  -e

2.3 指定日志的时间段

journalctl --since "2015-01-10" --until "2015-01-11 03:00"

2.4 追踪正在写入的日志

journalctl -f
#@类似于tail -f

2.5 按照错误级别显示日志

例如,只显示错误级别或者更高的日志条目

journalctl -p err

2.6 按照单元过滤日志
例如,要查看系统上全部来自Nginx单元的日志

journalctl -u nginx.service

三、journal日志大小控制

查看journal的当前磁盘使用量

journalctl --disk-usage

使用--vacuum-size选项,则可硬性指定日志的总体体积,意味着其会不断删除旧有记录直到所占容量符合要求:

journalctl --vacuum-size=128M

四、CentOS7中journald和rsyslog分工

centos7使用systemd-journald做日志中心库,使用rsyslog来持久化日志,使用logrotate来轮转日志文件。

默认journald配置#ForwardToSyslog=no,所以并未将日志转发给rsyslog。
rsyslog默认自己去读取的journald的日志文件。如下,

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal

五、参考资料

http://blog.csdn.net/zstack_org/article/details/56274966
https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs
https://ieevee.com/tech/2017/08/24/journald.html

转载请注明:IPCPU-网络之路 » journald日志使用