journalctl日志查看方法
转: CentOS7的journalctl日志查看方法
https://www.cnblogs.com/struggle-1216/p/11967905.html
journalctl --help # 帮助说明
选项: --system 显示系统日志 --user 显示当前用户的用户日志 -M --machine=CONTAINER 在本地容器上操作 -S --since=DATE 显示不早于指定日期的条目 -U --until=DATE 显示不晚于指定日期的条目 -c --cursor=CURSOR 显示从指定光标开始的条目 --after-cursor=CURSOR 显示指定光标之后的条目 --show-cursor 打印所有条目后显示光标 -b --boot[=ID] 显示当前引导或指定的引导 --list-boots 显示有关已记录引导的简洁信息 -k --dmesg 显示来自当前引导的内核消息日志 -u --unit=UNIT 显示指定单元的日志 --user-unit=UNIT 显示指定用户单元的日志 -t --identifier=STRING 显示具有指定 syslog 标识符的条目 -p --priority=RANGE 显示具有指定优先级的条目 -g --grep=PATTERN 显示与匹配 PATTERN 的消息相匹配的条目 --case-sensitive[=BOOL] 强制区分大小写或不区分大小写的匹配 -e --pager-end 立即跳转到分页器的末尾 -f --follow 跟踪日志 -n --lines[=INTEGER] 要显示的日志条目数量 --no-tail 显示所有行,即使在跟踪模式下也是如此 -r --reverse 以最新的条目优先显示 -o --output=STRING 更改日志输出模式(short、short-precise、short-iso、short-iso-precise、short-full、short-monotonic、short-unix、verbose、export、json、json-pretty、json-sse、cat) --output-fields=LIST 在详细/导出/JSON 模式中选择要打印的字段 --utc 使用协调世界时(UTC)表示时间 -x --catalog 在可用时添加消息解释 --no-full 缩略显示字段 -a --all 显示所有字段,包括长字段和不可打印字段 -q --quiet 不显示信息消息和特权警告 --no-pager 不将输出导入分页器 --no-hostname 抑制主机名字段的输出 -m --merge 显示来自所有可用日志的条目 -D --directory=PATH 显示来自目录的日志文件 --file=PATH 显示日志文件 --root=ROOT 在根目录下操作文件 --interval=TIME 更改 FSS 密封密钥的时间间隔 --verify-key=KEY 指定 FSS 验证密钥 --force 使用 --setup-keys 覆盖 FSS 密钥对 命令: -h --help 显示此帮助文本 --version 显示软件包版本 -N --fields 列出当前使用的所有字段名称 -F --field=FIELD 列出指定字段的所有值 --disk-usage 显示所有日志文件的总磁盘使用情况 --vacuum-size=BYTES 将磁盘使用量减少到指定大小以下 --vacuum-files=INT 仅保留指定数量的日志文件 --vacuum-time=TIME 删除早于指定时间的日志文件 --verify 验证日志文件的一致性 --sync 将未写入的日志消息同步到磁盘 --flush 将所有日志数据从 /run 刷新到 /var --rotate 请求立即旋转日志文件 --header 显示日志头信息 --list-catalog 显示目录中的所有消息 ID --dump-catalog 显示消息目录中的条目 --update-catalog 更新消息目录数据库 --new-id128 生成一个新的 128 位 ID --setup-keys 生成一个新的 FSS 密钥对
1、概述
日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息。
Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
日志的配置文件是/etc/systemd/journald.conf。
过滤错误日志
journalctl -u xxxx.service -S "2021-07-29 22:00:00" |grep xxx-xxx |grep -i error
查看某个时间段的日志
journalctl -u httpd -S "2019-04-18 7:21:48" -U "2019-04-18 07:21:49"
2、查看所有日志
(默认情况下 ,只保存本次启动的日志)
[root@CENTOS57 proc]# journalctl
3、查看内核日志
(不显示应用日志)
[root@CENTOS57 proc]# journalctl -k
4、查看系统本次启动的日志
journalctl -b 或者 journalctl -b -0 或者 journalctl -b 0
5、查看上一次启动的日志
需更改设置/etc/systemd/journald.conf文件,以开启永久存储。 [root@CENTOS57 proc]# journalctl -b -1
要查看journald知道的引导,请使用以下--list-boots选项:
[root@centos7 ~]# journalctl --list-boots -1 00d066e11cbee123b5 Thu 2018-02-22 17:01:47 CST—Thu 2018-02-22 17:09:15 CST 0 63f75abbe94c3b5710 Thu 2018-02-22 17:09:10 CST—Thu 2018-02-22 17:10:19 CST
这将为每次启动显示一行。第一列是启动的偏移量,可用于轻松引用启动journalctl。
如果您需要绝对参考,则启动ID位于第二列。您可以通过在结束时列出的两个时间规范来指出引导会话引用的时间。
6、查看指定时间的日志
可以使用--since和--until选项过滤任意时间限制,这些限制分别显示给定时间之前或之后的条目。
可以使用“yesterday”、“today”、“tomorrow”或者“now”等表达。
另外,我们也可以使用“-”或者“+”设定相对值,或者使用“ago”之前的表达。
#"显示2017年10月30号,18点10分30秒到当前时间之间的所有日志信息" journalctl -S "2017-10-30 18:10:30" #获取昨天的日志如下: journalctl –S yesterday #获取某一个时间段到当前时间的前一个小时的日志 journalctl -S 09:00 -u "1 hour ago" #获取当前时间的前20分钟的日志 journalctl -S "20 min ago" #获取某一天到某一个时间段的日志信息 journalctl -S "2017-01-10" -U "2017-01-11 03:00" #获取15:15到现在的日志 journalctl -S "15:15" -U now
7、按服务过滤消息日志
#查看httpd服务的日志信息 [root@centos7 ~]# journalctl -u httpd.service -- Logs begin at Thu 2018-02-22 17:01:47 CST, end at Thu 2018-02-22 17:30:01 CST. -- Feb 22 17:29:27 centos7.localdomain systemd[1]: Starting The Apache HTTP Server... Feb 22 17:29:27 centos7.localdomain httpd[1610]: AH00558: httpd: Could not reliably determine t Feb 22 17:29:28 centos7.localdomain systemd[1]: Started The Apache HTTP Server. #查看httpd服务当天的运行状况 [root@centos7 ~]# journalctl -u httpd.service -S today
8、按进程、用户或者群组ID
#通过进程ID实现查询,需要指定_PID字段。 journalctl _PID=8088 #查看指定用户的日志 journalctl _UID=33 -S today #查看指定用户组的日志 journalctl _GID=20 -S today #显示尾部的最新10行日志 journalctl -n #显示尾部指定行数的日志 journalctl -n 20 #实时滚动显示最新日志 journalctl -f #查看指定服务的日志 journalctl /usr/lib/systemd/systemd #查看某个路径的脚本的日志 journalctl /usr/bin/bash #实时滚动显示某个Unit的最新日志 journalctl -u nginx.service -f #合并显示多个Unit的日志 journalctl -u nginx.service -u php-fpm.service -S today
9、按优先级
使用journalctl配合-p选项显示特定优先级的信息,从而过滤掉优先级较低的信息。
由最高到最低优先级: 0: emerg 1: alert 2: crit 3: err 4: warning 5: notice 6: info 7: debug
只显示错误级别或者更高的日志条目:
[root@centos7 ~]# journalctl -p err -b
-- Logs begin at Thu 2018-02-22 17:01:47 CST, end at Thu 2018-02-22 17:40:02 CST. --
Feb 22 17:09:10 centos7.localdomain kernel: sd 0:0:0:0: [sda] Assuming drive cache: write throu
Feb 22 17:09:12 centos7.localdomain kernel: piix4_smbus 0000:00:07.3: SMBus Host Controller not
Feb 22 17:09:15 centos7.localdomain rsyslogd[593]: error during parsing file /etc/rsyslog.conf,
Feb 22 17:09:47 centos7.localdomain pulseaudio[1232]: [alsa-sink-ES1371/1] alsa-sink.c: ALSA wo
Feb 22 17:09:47 centos7.localdomain pulseaudio[1232]: [alsa-sink-ES1371/1] alsa-sink.c: Most li
Feb 22 17:09:47 centos7.localdomain pulseaudio[1232]: [alsa-sink-ES1371/1] alsa-sink.c: We were
Feb 22 17:09:48 centos7.localdomain spice-vdagent[1274]: Cannot access vdagent virtio channel /
lines 1-8/8 (END)
或者[root@centos7 ~]# journalctl -p 3 -b
10、输出格式
#journal能够以多种格式进行显示,只须添加-o选项加格式说明即可。 #将journal条目输出为JSON格式: [root@CENTOS57 proc]# journalctl -b -u httpd -o json { "__CURSOR" : "s=54b7b8c9391c4489a9a206c9123e723b;i=7db;b=b2d84e8bf26a462e9639384e1c0be5cf;m=eddf635;t=5b3a0187d82cb;x=90ce86876890254e", "__REALTIME_TIMESTAMP" : "160 { "__CURSOR" : "s=54b7b8c9391c4489a9a206c9123e723b;i=7f2;b=b2d84e8bf26a462e9639384e1c0be5cf;m=ee4987b;t=5b3a018842511;x=a984025285f8f913", "__REALTIME_TIMESTAMP" : "160 { "__CURSOR" : "s=54b7b8c9391c4489a9a206c9123e723b;i=7f3;b=b2d84e8bf26a462e9639384e1c0be5cf;m=ee5a191;t=5b3a018852e27;x=c0c8530ea7133468", "__REALTIME_TIMESTAMP" : "160
#使用json-pretty格式以更好地处理数据结构 [root@CENTOS57 proc]# journalctl -u httpd -o json-pretty { "__CURSOR" : "s=54b7b8c9391c4489a9a206c9123e723b;i=7db;b=b2d84e8bf26a462e9639384e1c0be5cf;m=eddf635;t=5b3a0187d82cb;x=90ce86876890254e", "__REALTIME_TIMESTAMP" : "1604875070571211", "__MONOTONIC_TIMESTAMP" : "249427509", "_BOOT_ID" : "b2d84e8bf26a462e9639384e1c0be5cf", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_MACHINE_ID" : "9e19325de3e04e56b869967ea97e8dae", "SYSLOG_FACILITY" : "3", "SYSLOG_IDENTIFIER" : "systemd", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CAP_EFFECTIVE" : "1fffffffff", "_SYSTEMD_CGROUP" : "/", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1417", "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_HOSTNAME" : "CENTOS57", "_CMDLINE" : "/usr/lib/systemd/systemd --switched-root --system --deserialize 21", "UNIT" : "httpd.service", "MESSAGE" : "Starting The Apache HTTP Server...", "_SOURCE_REALTIME_TIMESTAMP" : "1604875070570852" }
以下为可用于显示的各类格式: cat: 只显示信息字段本身。 export: 适合传输或备份的二进制格式。 json: 标准JSON,每行一个条目。 json-pretty: JSON格式,适合人类阅读习惯。 json-sse: JSON格式,经过打包以兼容server-sent事件。 short: 默认syslog类输出格式。 short-iso: 默认格式,强调显示ISO 8601挂钟时间戳。 short-monotonic: 默认格式,提供普通时间戳。 short-precise: 默认格式,提供微秒级精度。 verbose: 显示该条目的全部可用journal字段,包括通常被内部隐藏的字段。
11、Journal维护
#查看当前日志占用磁盘的空间的总大小
[root@centos7 ~]# journalctl --disk-usage
Archived and active journals take up 8.0M on disk.
#指定日志文件最大空间
journalctl --vacuum-size=1G
#指定日志文件保存多久
journalctl --vacuum-time=1years #1年
journalctl --vacuum-time=2d #2天
journalctl --vacuum-size=500M #500M
#不分页标准输出,日志默认分页输出--no-pager改为正常的标准输出 journalctl --no-pager #分页显示,其中插入省略号以代表被移除的信息,使用–no-full选 journalctl --no-full
#检查日志是否如常?日志文件是否完好且未损坏?
journalctl --verify
12、启用日志消息的持久存储
要启用日志限制持久性配置,你可以修改journald的配置文件
/etc/systemd/journald.conf
将该Storage=选项设置为“persistent”以启用持久记录。
Storge选项为:
volatile,则日记日志数据将仅存储在内存中,即/run/log/journal中。
persistent,则数据将最好存储在磁盘上,即在/var/log/journal的下方。
auto,类似于“ persistent”,但是如果需要的话不会创建目录/var/log/journal,因此它的存在控制着日志数据的去向。
[root@CENTOS57 proc]# vim /etc/systemd/journald.conf
[Journal]
Storage=persistent
默认journalctl的日志都是保存到内存中。要保存到文件,只需创建/var/log/journal目录,重启journald服务即可。
在CentOS 7上,您必须启用日志消息的持久存储: [root@CENTOS57 proc]# mkdir /var/log/journal [root@CENTOS57 proc]# systemd-tmpfiles --create --prefix /var/log/journal [root@CENTOS57 proc]# systemctl restart systemd-journald 否则,启动之间将不会保留日志日志消息。
journalctl相关配置 以下条目可用于限定journal体积的膨胀速度: SystemMaxUse=: 指定journal所能使用的最高持久存储容量。 SystemKeepFree=: 指定journal在添加新条目时需要保留的剩余空间。 SystemMaxFileSize=: 控制单一journal文件大小,符合要求方可被转为持久存储。 RuntimeMaxUse=: 指定易失性存储中的最大可用磁盘容量(/run文件系统之内)。 RuntimeKeepFree=: 指定向易失性存储内写入数据时为其它应用保留的空间量(/run文件系统之内)。 RuntimeMaxFileSize=: 指定单一journal文件可占用的最大易失性存储容量(/run文件系统之内)。 通过设置上述值,大家可以控制journald对服务器空间的消耗及保留方式。
13、常见日志文件
# tail /var/log/messages //系统主日志文件 # tail -20 /var/log/messages # tail -f /var/log/messages //动态查看日志文件的尾部 # tailf /var/log/secure //认证、安全 # tail /var/log/maillog //跟邮件postfix相关 # tail /var/log/cron //crond、at进程产生的日志 # tail /var/log/dmesg //和系统启动相关 # tail /var/log/audit/audit.log //系统审计日志 # tail /var/log/yum.log //yum # tail /var/log/mysqld.log //MySQL # tail /var/log/xferlog //和访问FTP服务器相关 # tail /var/log/wtmp //当前登录的用户(命令:w) # tail /var/log/btmp //最近登录的用户(命令last ) # tail /var/log/lastlog //所有用户的登录情况(命令lastlog )
#清理日志文件 cat /dev/null > /var/log/boot.log cat /dev/null > /var/log/btmp cat /dev/null > /var/log/cron cat /dev/null > /var/log/dmesg cat /dev/null > /var/log/firewalld cat /dev/null > /var/log/grubby cat /dev/null > /var/log/lastlog cat /dev/null > /var/log/mail.info cat /dev/null > /var/log/maillog cat /dev/null > /var/log/messages cat /dev/null > /var/log/secure cat /dev/null > /var/log/spooler cat /dev/null > /var/log/syslog cat /dev/null > /var/log/tallylog cat /dev/null > /var/log/wpa_supplicant.log cat /dev/null > /var/log/wtmp cat /dev/null > /var/log/yum.log
参考引用:
journalctl 日志查看方法:https://www.cnblogs.com/leigepython/p/10302056.html
journalctl工具基础介绍:https://blog.51cto.com/13598893/2072212
持久化journalctl日志清空命令查看配置参数详解:https://my.oschina.net/u/4265593/blog/3392248
如何在CentOS 7下显示以前启动时的日志消息?:https://qastack.cn/unix/159221/how-do-i-display-log-messages-from-previous-boots-under-centos-7