journal详解

一、简介

作为最具吸引力的优势,systemd拥有强大的处理与系统日志记录功能。

在使用其它工具时,日志往往被分散在整套系统当中,由不同的守护进程及进程负责处理,这意味着我们很难跨越多种应用程序对其内容进行解读。

由于大部分引导进程都是由systemd进程处理的,因此我们有理由以标准化方式实现日志的收集与访问。

其中jornald守护进程会收集全部来源的数据并将其以二进制格式加以存储,从而轻松实现动态操作。

这种作法能够实现多种收益。通过单一工具与数据交互,管理员能够以动态方式显示日志数据。

另外,我们也可以轻松查看历史引导数据,或者将日志条目同其它相关服务加以结合,从而 完成通信问题调试。

将日志数据以二进制形式存储还意味着这些数据可根据需求随时以二进制输出格式显示

例如,大家可以通过标准syslog格式查看日志以实现日常管理,并在需要使用图形服务时将各条目作为JSON对象交由图形化服务处理。由于数据不会以纯文本形式被写入磁盘,因此我们无需进行任何格式转换

二、journalctl使用

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

常用选项:


-f :	实时跟新显示

-n [#] : 显示最近#行日志,默认为10

-o verbose : 查看日志详细参数,-o 后可以指定其他显示格式,默认short格式

-x, --catalog:
	在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义、
	问题的解决方案、支持论坛、 开发文档、以及其他任何内容。
 	并非所有日志都有这些额外的帮助文本, 详见 Message Catalog Developer Documentation[5] 文档
 	注意,如果要将日志输出用于bug报告, 请不要使用此选项
 	
-e, --pager-end
	在分页工具内立即跳转到日志的尾部。 此选项隐含了 -n1000
 	以确保分页工具不必缓存太多的日志行。 不过这个隐含的行数可以被明确设置的 -n选项覆盖
 	注意,此选项仅可用于 less(1) 分页器
 	

-b [#]  :  
	显示当前启动或指定的启动,如果#为正数,将从日志头开始正向查找
	如果为负数或为零,将从日志尾开始反向查找
	"-b 1" 表示按时间顺序第一次启动日志
	"-b 2" 表示第二次启动日志
	"-b 0" 表示最后一次启动
	"-b -1" 表示最近第二次启动
	
--list-boots :列出每次启动的 序号(也就是相对于本次启动的偏移量)

-k : 仅显示内核日志

-u [UNIT|PATTERN] :
	显示指定服务unit的日志或者符合 PATTERN模式的单元,如 sshd.service
	这相当于添加了一个 "_SYSTEMD_UNIT=UNIT" 匹配项,或一组PATTERN 匹配项

-p [PRIORITY] : 
	显示具有指定优先级的条目,根据日记级别显示
	日志等级数字与其名称之间的对应关系如下(参见 syslog(3)):
        0: emerg
        1: alert
        2: crit
        3: err
        4: warning
        5: notice
        6: info
        7: debug

  
-S/--since 'time' :  
	显示从指定时间开始的日志
	参数的格式类似 "2012-10-30 18:17:16" 这样
	如果省略了"时::秒"部分,则相当于设为 "00:00:00"
	除了"年--日 时::秒"格式,参数还可以进行如下设置:
	(1)设为 "yesterday", "today", "tomorrow"以表示那一天的零点(00:00:00)
    (2)设为 "now" 以表示当前时间
	(3)可以在"年--日 时::秒"前加上 "-"(前移) 或 "+"(后移)前缀以表示相对于当前时间的偏移
	关于时间与日期的详细规范, 参见 systemd.time(7)
 
-U/--until  'time' : 显示到指定时间内的日志

--system,--user
	仅显示系统服务与内核的日志(--system)、 仅显示当前用户的日志(--user)
	如果两个选项都未指定,则显示当前用户的所有可见日志
	
--disk-usage
	此选项并不用于显示日志内容,
 	而是用于显示所有日志文件(归档文件与活动文件)的磁盘占用总量
 	
--vacuum-size=, --vacuum-time=, --vacuum-files=
	这些选项并不用于显示日志内容,
 	而是用于清理日志归档文件(并不清理活动的日志文件), 以释放磁盘空间。
 	--vacuum-size= 可用于限制归档文件的最大磁盘使用量 (可以使用 "K", "M", "G", "T"
 后缀)
 	--vacuum-time= 可用于清除指定时间之前的归档 (可以使用 "s", "m", "h",
  "days", "weeks", "months", "years" 后缀);
  	--vacuum-files=可用于限制日志归档文件的最大数量
	注意,--vacuum-size= 对 --disk-usage的输出仅有间接效果
	因为 --disk-usage 输出的是归档日志与活动日志的总量
 	同样,--vacuum-files= 也未必一定会减少日志文件的总数,因为它同样仅作用于归档文件而不会删除活动的日志文件。
 	此三个选项可以同时使用,以同时从三个维度去限制归档文件。
 	若将某选项设为零,则表示取消此选项的限制。

三、常用示例

只查看内核日志
	journalctl -k
查看系统启动日志
# 最近一次启动日志
	journalctl -b
	
# 上一次启动日志
	journalctl -b -1
查看指定时间的日志
# 显示 2020-10-30日 18点30分30秒到当前时间之间的所有日志信息
	journalctl --since="2020-10-30 18:30:30"
	
# 获取从昨天到现在的日志
	journalctl --since yesterday
	
# 获取某一个时间段到当前时间的前一个小时的日志
	journalctl --since 09:00 --until "1 hour ago" 
	
# 获取当前时间的前20分钟的ssh服务日志
	journalctl --since "20 min ago" -u sshd.service
	
# 获取某一天到某一个时间段的日志信息
	journalctl --since "2021-05-05" --until "2021-05-05 03:00" 
	
显示尾部指定行数日志
# 显示尾部20行日志
	journalctl -n 20
实时滚动显示最新日志
	journalctl -f
查看某个 Unit 的日志
# 查看nginx服务日志
	journalctl -u nginx.service
	journalctl -u nginx.service --since today
	journalctl -u nginx.service -f
	
# 合并显示多个 Unit 的日志
	journalctl -u nginx.service -u php-fpm.service --since today
查看指定进程的日志
	journalctl _PID=1
查看某个路径的脚本的日志
	journalctl /usr/bin/bash
显示日志占据的硬盘空间
	journalctl --disk-usage
指定日志文件占据的最大空间
	journalctl --vacuum-size=1G
指定日志文件保存多久
	journalctl --vacuum-time=1years

四、journalctl相关配置

1、限定journal体积的膨胀速度
    SystemMaxUse=: 指定journal所能使用的最高持久存储容量。
    SystemKeepFree=: 指定journal在添加新条目时需要保留的剩余空间。
    SystemMaxFileSize=: 控制单一journal文件大小,符合要求方可被转为持久存储。
    RuntimeMaxUse=: 指定易失性存储中的最大可用磁盘容量(/run文件系统之内)。
    RuntimeKeepFree=: 指定向易失性存储内写入数据时为其它应用保留的空间量(/run文件系统之内)。
    RuntimeMaxFileSize=: 指定单一journal文件可占用的最大易失性存储容量(/run文件系统之内)。
    通过设置上述值,大家可以控制journald对服务器空间的消耗及保留方式。
2、日志持久化

默认此程序只负责对日志进行查看而不能对日志进行保存和采集,那么关机后再开机(重启),只能查看到开机后的日志, 因为系统之前的日志是保存在内存中的,所以关机后就被清空了,那么再开机时用journalctl是看不到的之前的日志信息的

可以在/etc/systemd/journald.conf文件中调整systemd-journald服务的配置设置,以使日志在重新引导后仍然存在

配置Systemd Journald

要将systemd-journald服务配置为在重新启动后永久保留系统日志,您需要将Storage设置为persistent。

可以为Storage参数设置的其他值是:
	[1]、persistent:将日志存储在/var/log/journal目录中,该目录在重新启动后仍然存在。
	[2]、volatile:将日记存储在volatile/run/log/journal目录中,这不会导致系统重启。
	[3]、auto:rsyslog将确定使用持久性存储(persistent)还是易失性存储(volatile)
		如果存在/var/log/journal目录,则rsyslog使用持久性存储,否则使用易失性存储。

实现永久存储方式:
方式1、修改 /etc/systemd/journald.conf
   
   	[Journal]
    Storage=persistent

	提交更改后,请重新启动systemd-journald服务以使配置更改生效:
	sudo systemctl restart systemd-journald
	
方式2、创建/var/log/journal目录
	
	mkdir -p /var/log/journal
	systemctl restart systemd-journald
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值