Linux-Journal

1. 日志简介
2. 日志的优先级和分类
2.1 优先级
2.2 设施分类
3. 命令帮助
4. 日志查看示例
5. 日志大小限制
6. 手动清理日志文件

1. 日志简介

https://wiki.archlinux.org/index.php/Systemd/Journal
systemd有自己的日志记录系统; 因此,syslog不再需要运行守护程序。要阅读日志,请使用:#journalctl

在Arch Linux中,该目录/var/log/journal/是systemd包的一部分,并且日志(当Storage=设置为auto到/etc/systemd/journald.conf时)将写入/var/log/journal/。
如果删除该目录,systemd将不会自动重新创建它,而是/run/systemd/journal以非持久方式写入其日志。
然而,如果文件夹将被重新创建Storage=persistent被添加到journald.conf和systemd-journald.service被重新启动(或重新引导系统)。

Systemd Journal 的优点如下:

  • * 简单性:代码少,依赖少,抽象开销最小。
  • * 零维护:日志是除错和监控系统的核心功能,因此它自己不能再产生问题。举例说,自动管理磁盘空间,避免由于日志的不断产生而将磁盘空间耗尽。
  • * 移植性:日志 文件应该在所有类型的 Linux 系统上可用,无论它使用的何种 CPU 或者字节序。
  • * 性能:添加和浏览 日志 非常快。
  • * 最小资源占用:日志 数据文件需要较小。
  • * 统一化:各种不同的日志存储技术应该统一起来,将所有的可记录事件保存在同一个数据存储中。所以日志内容的全局上下文都会被保存并且可供日后查询。例如一条固件记录后通常会跟随一条内核记录,最终还会有一条用户态记录。重要的是当保存到硬盘上时这三者之间的关系不会丢失。Syslog 将不同的信息保存到不同的文件中,分析的时候很难确定哪些条目是相关的。
  • * 扩展性:日志的适用范围很广,从嵌入式设备到超级计算机集群都可以满足需求。
  • * 安全性:日志 文件是可以验证的,让无法检测的修改不再可能。

2. 日志的优先级和分类

系统日记按(优先级Priority level)和(设施Facility)对信息进行分类。日志分类对应于经典的Syslog协议(RFC 5424)。
注:下面表格最后一列 (wc -l) 是统计的记录数比例,总数是3个月的日志,大约100万条数据。

2.1 优先级

Value (Key)Severity Description Examples wc -l
0 (emerg)ency
紧急
System is unusable Severe Kernel BUG, systemd dumped core. 
This level should not be used by applications.
 
1 alert
警报
Should be corrected immediately Vital subsystem goes out of work. Data loss.
kernel: BUG: unable to handle kernel paging request at ffffc90403238ffc.
0.001%
2 (crit)ical
危急
Critical conditions Crashes, coredumps. Like familiar flash:
systemd-coredump[25319]: Process 25310 (plugin-containe) of user 1000 dumped core
Failure in the system primary application, like X11.
1%
3 (err)or
错误
Error conditions Not severe error reported:
kernel: usb 1-3: 3:1: cannot get freq at ep 0x84,
systemd[1]: Failed unmounting /var.,
libvirtd[1720]: internal error: Failed to initialize a valid firewall backend
1%
4 warning
警告
May indicate that an error will occur if action is not taken. A non-root file system has only 1GB free.
org.freedesktop. Notifications[1860]: (process:5999): Gtk-WARNING **: Locale not supported by C library. Using the fallback 'C' locale.
71%
5 notice
注意
Events that are unusual, but not error conditions. systemd[1]: var.mount: Directory /var to mount over is not empty, mounting anyway,
gcr-prompter[4997]: Gtk: GtkDialog mapped without a transient parent. This is discouraged
2%
6 (info)rmational
信息
Normal operational messages that require no action. lvm[585]: 7 logical volume(s) in volume group "archvg" now active 25%
7 debug
调试
Information useful to developers for debugging the application. kdeinit5[1900]: powerdevil: Scheduling inhibition from ":1.14" "firefox" with cookie 13 and reason "screen" 1%

2.2 设施分类

Facility code Keyword Description Info wc -l
0 kern Kernel messages   15%
1 user User-level messages   1%
3 daemon System daemons All daemons, including systemd and its subsystems 18%
4 auth Security/authorization messages Also watch for different facility 10 1%
10 authpriv Security/authorization messages Also watch for different facility 4 1%
9   Clock daemon systemd-timesyncd 0%

下面是不常用或已弃用的分类:

Facility code Keyword Description
2 mail Mail system
5 syslog Messages generated internally by syslogd
6 lpr Line printer subsystem
7 news Network news subsystem
8 uucp UUCP subsystem
11 ftp FTP daemon
12 - NTP subsystem
13 - Log audit
14 - Log alert
15 cron Scheduling daemon
16 - 23 local0 - 7 Local use 0 (local0) - Local use 7 (local7)

3. 命令帮助

  journalctl -h    
  Options:    
  --system Show the system journal 显示系统日志
  --user Show the user journal for the current user 显示当前用户的用户日志
-M --machine=CONTAINER Operate on local container 在本地容器上操作
-S --since=DATE Show entries not older than the specified date 显示不早于指定日期的条目
-U --until=DATE Show entries not newer than the specified date 显示不比指定日期更新的条目
-c --cursor=CURSOR Show entries starting at the specified cursor 显示从指定光标开始的条目
  --after-cursor=CURSOR Show entries after the specified cursor 在指定的光标后显示条目
  --show-cursor Print the cursor after all the entries 在所有条目之后打印光标
  --cursor-file=FILE Show entries after cursor in FILE and update FILE 在FILE中显示光标后的条目并更新FILE
-b --boot[=ID] Show current boot or the specified boot 显示当前引导或指定的引导
  --list-boots Show terse information about recorded boots 显示有关录制的靴子的简洁信息
-k --dmesg Show kernel message log from the current boot 显示当前引导的内核消息日志
-u --unit=UNIT Show logs from the specified unit 显示指定单位的日志
  --user-unit=UNIT Show logs from the specified user unit 显示指定用户单元的日志
-t --identifier=STRING Show entries with the specified syslog identifier 显示具有指定syslog标识符的条目
-p --priority=RANGE Show entries with the specified priority 显示具有指定优先级的条目
-g --grep=PATTERN Show entries with MESSAGE matching PATTERN 显示MESSAGE匹配PATTERN的条目
  --case-sensitive[=BOOL] Force case sensitive or insenstive matching 强制区分大小写或不区分匹配
-e --pager-end Immediately jump to the end in the pager 立即跳到寻呼机的末尾
-f --follow Follow the journal 关注期刊, 最新的
-n --lines[=INTEGER] Number of journal entries to show 要显示的日记帐分录数
  --no-tail Show all lines, even in follow mode 即使在跟随模式下也显示所有行
-r --reverse Show the newest entries first 首先显示最新的条目
-o --output=STRING Change journal output mode (short, short-precise, short-iso, short-iso-precise, short-full, short-monotonic, short-unix, (precise精确,monotonic单调) 更改日志输出模式: verbose, export, 
json, json-pretty, json-sse, json-seq, 
cat, with-unit)
  --output-fields=LIST Select fields to print in verbose/export/json modes 选择要以详细/导出/ json模式打印的字段
  --utc Express time in Coordinated Universal Time (UTC) 协调世界时(UTC)的快车时间
-x --catalog Add message explanations where available 添加消息说明(如果有)
  --no-full Ellipsize fields Ellipsize字段
-a --all Show all fields, including long and unprintable 显示所有字段,包括长字段和不可打印字段
-q --quiet Do not show info messages and privilege warning 不显示信息消息和权限警告
  --no-pager Do not pipe output into a pager 不要将输出传输到寻呼机
  --no-hostname Suppress output of hostname field 禁止输出主机名字段
-m --merge Show entries from all available journals 显示所有可用期刊的条目
-D --directory=PATH Show journal files from directory 显示目录中的日志文件
  --file=PATH Show journal file 显示日志文件
  --root=ROOT Operate on files below a root directory 对根目录下的文件进行操作
  --interval=TIME Time interval for changing the FSS sealing key 更改FSS密封键的时间间隔
  --verify-key=KEY Specify FSS verification key 指定FSS验证密钥
  --force Override of the FSS key pair with --setup-keys 使用--setup-keys覆盖FSS密钥对
       
  Commands:    
-h --help Show this help text 显示此帮助文本
  --version Show package version 显示包版本
-N --fields List all field names currently used 列出当前使用的所有字段名称
-F --field=FIELD List all values that a specified field takes 列出指定字段所需的所有值
  --disk-usage Show total disk usage of all journal files 显示所有日志文件的总磁盘使用情况
  --vacuum-size=BYTES Reduce disk usage below specified size 将磁盘使用量降低到指定大小以下
  --vacuum-files=INT Leave only the specified number of journal files 只保留指定数量的日志文件
  --vacuum-time=TIME Remove journal files older than specified time 删除早于指定时间的日志文件
  --verify Verify journal file consistency 验证日志文件一致性
  --sync Synchronize unwritten journal messages to disk 将未写入的日志消息同步到磁盘
  --flush Flush all journal data from /run into /var 将/ run中的所有日志数据刷新到/var
  --rotate Request immediate rotation of the journal files 请求立即轮换日志文件
  --header Show journal header information 显示日记标题信息
  --list-catalog Show all message IDs in the catalog 显示目录中的所有消息ID
  --dump-catalog Show entries in the message catalog 在消息目录中显示条目
  --update-catalog Update the message catalog database 更新消息目录数据库
  --setup-keys Generate a new FSS key pair 生成新的FSS密钥对

4. 日志查看示例

Show all messages from this boot: -b 启动信息
$ sudo journalctl -b //启动信息23565
$ sudo journalctl --list-boots //引导列表
$ sudo journalctl -b -0 //
$ sudo journalctl -b -1 //前一次启动信息... 通过查询引导列表可看到最多能查看前几次启动信息

Show all messages from date (and optional time): -S 显示不早于指定日期的条目
$ sudo journalctl --since="2019-06-13 16:42:34"

Show all messages since 20 minutes ago: 最近20分钟
$ sudo journalctl --since "20 min ago"
$ sudo journalctl -S "20 min ago"

Follow new messages:
$ sudo journalctl -f

Show all messages by a specific executable:特定可执行文件
$ sudo journalctl /usr/lib/systemd/systemd

Show all messages by a specific process:特定进程
$ sudo journalctl _PID=1

Show all messages by a specific unit: -u 特定单元
$ sudo journalctl -u man-db.service

Show kernel ring buffer:-k 显示当前引导的内核消息日志(--dmesg)
$ sudo journalctl -k

Show only error, critical and alert priority messages:-p 显示具有指定优先级的条目(0-7)
$ sudo journalctl -p err..alert
$ sudo journalctl -p 3..1 //3-1
$ sudo journalctl -p 3 //3-0
$ sudo journalctl -p 3 -r //3-0; 加-r选项,首先显示最新的条目

Show auth.log equivalent by filtering on syslog facility:
$ sudo journalctl SYSLOG_FACILITY=10
0 kern 内核;1 user 用户;3 daemon 守护进程;
4 auth 授权;10 authpriv 授权;

$ sudo journalctl SYSLOG_FACILITY=0 -r
$ sudo journalctl -k -r

$ sudo journalctl SYSLOG_FACILITY=4 |wc -l
14516
$ sudo journalctl SYSLOG_FACILITY=10 |wc -l
9049

If the journal directory (by default located under /var/log/journal) contains a large amount of log data then journalctl can take several minutes to filter output. It can be sped up significantly by using --file option to force journalctl to look only into most recent journal:
$ sudo journalctl --file /var/log/journal/*/system.journal -f

5. 日志大小限制

默认为基础文件系统的10%,但上限为4GB。
例如本机/var/log/journal/位于30Gb分区上,日志最多需要3Gb。超过40Gb的分区,日志文件需要最大值都为4Gb。

可以通过取消注释和更改以下内容来控制持久日志的最大大小:
/etc/systemd/journald.conf
SystemMaxUse=50M

也可以使用drop-in snippets配置覆盖机制,而不是编辑全局配置文件。在这种情况下,将覆盖置于[Journal]标题下:
/etc/systemd/journald.conf.d/00-journal-size.conf
[Journal]
SystemMaxUse=50M

修改后重新启动日志系统 systemd-journald.service

6. 手动清理日志文件

删除已归档的日志文件,直到它们使用的磁盘空间低于100M:
$ sudo journalctl --vacuum-size=100M

使所有日记文件不包含超过2周的数据。
$ sudo journalctl --vacuum-time=2weeks

Linux-Journal的更多相关文章

  1. Linux 2.6内核中新的锁机制--RCU

    转自:http://www.ibm.com/developerworks/cn/linux/l-rcu/ 一. 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁 ...

  2. linux 并发 RCU

    What is RCU, Fundamentally? https://lwn.net/Articles/262464/ If you can fill the unforgiving secondw ...

  3. Linux学习笔记——重点推荐的Linux网络在线学习资源

     首先非常感谢百度,感谢网络的搜索引擎技术,也非常感谢学习资源的贡献者和组织! 1:http://billie66.github.io/TLCL/book/zh/ 2:http://www.ha97. ...

  4. Linux 2.4调度系统分析--转

    http://www.ibm.com/developerworks/cn/linux/kernel/l-k24sch/index.html 杨沙洲 (pubb@163.net)国防科技大学计算机学院 ...

  5. 嵌入式设备上的 Linux 系统开发

    转载:http://www.ibm.com/developerworks/cn/linux/embed/embdev/index.html   如果您刚接触嵌入式开发,那么大量可用的引导装载程序(bo ...

  6. (干货)Linux学习资源推荐

    源地址 国内的专业Linux网站(GB) ChinaUnix Linux中国 实验楼: 免费提供了Linux在线实验环境,不用在自己机子上装系统也可以学习Linux,超方便实用!. 国内的专业Linu ...

  7. Queueing in the Linux Network Stack !!!!!!!!!!!!!!!

    https://www.coverfire.com/articles/queueing-in-the-linux-network-stack/ Queueing in the Linux Networ ...

  8. 100个linux站点

    (一) 文件下载 (二) 幽默娱乐 (三) 相关新闻 (四) 通用硬体 (五) 专用硬体 (六) 新手站点 (七) 图形/多媒体 (八) 游戏站点 (九) 网路杂志 (十) 入口(教育.链结) (十一 ...

  9. Linux发展历史大事编年表(截止2013年)

    这篇文章主要介绍了Linux发展历史大事编年表(截止2013年),Linux现在已经无处不在,是一个伟大的开原项目,让我一起来看看23年来它的发展历程吧   我们周围到处都有Linux的身影,在家中. ...

  10. Linux 动态库剖析

    进程与 API 动态链接的共享库是 GNU/Linux® 的一个重要方面.该种库允许可执行文件在运行时动态访问外部函数,从而(通过在需要时才会引入函数的方式)减少它们对内存的总体占用.本文研究了创建和 ...

随机推荐

  1. leetCode练题——12. Integer to Roman

    1.题目 12. Integer to Roman Roman numerals are represented by seven different symbols: I, V, X, L, C,  ...

  2. Oracle忘记密码怎么办?

    1.打开cmd,输入sqlplus /nolog,回车:输入“conn / as sysdba”;输入“alter user sys identified by 新密码”,注意:新密码最好以字母开头, ...

  3. T-SQL常用的函数

    http://blog.sina.com.cn/s/blog_4af01cd50100hsac.html

  4. Python数据类型-2 数字类型

    数字类型 数字类型是不可变类型.所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象.数字1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象. 还是要强调一 ...

  5. 《容器化.NET应用架构指南》脑图学习笔记(第一部分)

    一.关于这本官方“圣经” 作为.NET程序员,对于微软官方推动的架构示例总是特别关注,从PetShop到MusicStore再到eShopOnContainers,每一次关注,都会了解到业界最新的架构 ...

  6. [Pytorch数据集下载] 下载MNIST数据缓慢的方案

    步骤一 首先访问下面的网站,手工下载数据集.http://yann.lecun.com/exdb/mnist/ 把四个压缩包下载到任意文件夹,以便之后使用. 步骤二 把自己电脑上已经下载好的数据集的文 ...

  7. 把链接生成二维码 二维码中间带有logo

    在工程中引入三个文件jquery.qrcode.js.qrcode.js.utf.js.其中utf.js文件是防止链接中的参数出现中文乱码现象 jquery.qrcode.js文件 function ...

  8. gcc/g++/make/cmake/makefile/cmakelists的恩恩怨怨

    以前在windows下用VS写代码,不管有多少个文件夹,有多少个文件,写完以后只需要一键就什么都搞定了.但是当移步linux下时,除非你使用图形界面,并且使用Qt creater这类的IDE时,才可以 ...

  9. 五、centos7安装mysql:安装mysqlser

    一.下载通用安装二进制包 先下载mysql安装包:打开 http://dev.mysql.com/downloads/mysql/ 选择 linux - Generic并在其下选择 Linux - G ...

  10. project clean

    1.由于eclipse的编译是基于时间戳的判断机制的.因此当你按build all的时候有些eclipse认为时间戳没有改变的类不会被编译.因此你可以先clean一下再编译.这个时候eclipse会将 ...