登录文件的重要性
- 解决系统方面的错误:
用 Linux 这么久了,你应该偶而会发现系统可能会出现一些错误,包括硬件捉不到或者是某 些系统服务无法顺利运行的情况。 - 过往事件记录簿:
例如:你发现 WWW 服务 (httpd 软件) 在某个时刻流量特别大,你 想要了解为什么时, 可以通过登录文件去找出该时段是哪些 IP 在连线与查询的网页数据为 何,就能够知道原因。
Tips: (1)察看屏幕上面的错误讯息与 (2)登录文件的错误信息,几乎可以解决大部分的 Linux 问题!
Linux 常见的登录文件文件名
/var/log/messages: 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中
/var/log/daemon.log: 包含各种系统后台守护进程日志信息。
- /var/log/lastlog: 可以记录系统上面所有的帐号最近一次登陆系统时的相关信息。
/var/log/kern.log: 包含内核产生的日志,有助于在定制内核时解决问题。
/var/log/user.log: 记录所有等级用户信息的日志.
- /var/log/Xorg.x.log — 来自X的日志信息。
- /var/log/alternatives.log – 更新替代信息都记录在这个文件中。
- /var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
systemd-journald.service 简介
概览systemd-journald系统
Journald系统主要由三个主要的系统日记服务组件组成:
- 守护程序:systemd日志服务由systemd-journald守护程序处理。
- 配置文件:日志服务的配置在/etc/systemd/journald.conf里面设置。
- 日志搜索程序:用于搜索日记日志文件的程序是journalctl。
本文主要介绍systemd-journald日志相关的重要配置选项:主要包括systemd-journald logrotate和存储类型选择功能。
Journald支持的不同类型的存储
[Journal]
#Storage=auto
我们可以通过修改/etc/systemd/journald.conf文件控制存储类型值,在[Journal]字符串下面可以修改存储类型。
Storage支持的值为volatile,persistent,auto和none,默认是auto
,所有值的含义如下
- volatile,则日志数据将仅存储在内存中,即在/run/log/journal目录下(根据需要创建)。
- persistent,则数据将会存储在磁盘上,即/var/log/journal目录下,并且在早期引导阶段磁盘不可写的时候把数据保存到/run/log/journal目录下。
- auto: 值意味着把日志数据存储在/var/log/journal/目录中。但是该目录必须已经存在并且设置了适当的权限。如果不存在,则日记数据将存储在易失性/run/log/journal/目录中,并且在系统关闭时会删除该数据。
- none: 关闭所有存储,所有接收到的日志数据将被丢弃。
对日志文件执行logrotate
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
这些设置将会限制日志文件的大小上限。 以System开头的选项用于限制磁盘使用量, 也就是 /var/log/journal 的使用量。 以Runtime开头的选项用于限制内存使用量, 也就是 /run/log/journal 的使用量。
- RuntimeMaxUse/SystemMaxUse= 控制日志最大可使用多少磁盘空间,然后对日志文件执行systemd-journald logrotate。默认为分配给节点的总物理内存的10%
- RuntimeKeepFree/SystemKeepFree= 控制systemd-journald将为其他用途保留多少磁盘空间,之后将对日志文件执行systemd-journald logrotate。默认为分配给节点的总物理内存的15%
- SystemMaxFileSize=/RuntimeMaxFileSize= 限制单个日志文件的最大体积, 到达此限制后日志文件将会自动滚动。 默认值是对应的 SystemMaxUse=/RuntimeMaxUse= 值的1/8 , 这也意味着日志滚动 默认保留7个历史文件。
- SystemMaxFiles/RuntimeMaxFiles= 限制最多允许同时存在多少个日志文件, 超出此限制后, 最老的日志文件将被删除, 而当前的活动日志文件 则不受影响。 默认值为100个。
- MaxRetentionSec=日志滚动的时间间隔。通常并不需要使用基于时间的日志滚动策略, 因为由SystemMaxFileSize/RuntimeMaxFileSize= 控制的基于文件大小的日志滚动策略已经可以确保日志文件的大小不会超标。 默认值是一个月, 设为零表示禁用基于时间的日志滚动策略。
- MaxRetentionSec=日志文件的最大保留期限。 当日志文件的最后修改时间(mtime)与当前时间之差,大于此处设置的值时,日志文件将会被删除。 通常并不需要使用基于时间的日志删除策略。
使用 journalctl 观察登录信息
journalctl [-nrpf] [--since TIME] [--until TIME] _optional
选项与参数:
默认会秀出全部的 log 内容,从旧的输出到最新的讯息
-u <unit>: 显示指定单元(服务)的日志。
-n: 限制显示的日志条目数量。
-r: 反向输出,从最新的输出到最旧的数据
- -p: 秀出后面所接的讯息重要性排序!请参考前一小节的 rsyslogd 信息
-f : 类似 tail -f 的功能,持续显示 journal 日志的内容(实时监测时相当有帮助!)
- -b: 显示引导(启动)日志。
- -r: 显示可读的日志消息而不使用字段标识符。
- -e: 显示完整的事件数据。
- -k: 显示内核日志。
- –since --until:设置开始与结束的时间,让在该期间的数据输出而已
--since参数用于限制显示指定时间之后的日志条目。以下是--since参数支持的时间格式:
绝对时间(Absolute time):使用格式YYYY-MM-DD HH:MM:SS,例如2023-08-01 10:30:00。
相对时间(Relative time):使用格式<quantity> <unit> ago,其中<quantity>是一个整数值,<unit>可以是以下之一:
years(年)
months(月)
weeks(周)
days(天)
hours(小时)
minutes(分钟)
seconds(秒) 例如,1 day ago表示一天前,2 hours ago表示两个小时前。
例子
- 查看最近一小时的日志:
journalctl --since “1 hour ago” - 查看从指定日期到现在的日志:
journalctl --since “2023-07-01” - 查看从昨天起到今天的日志:
journalctl --since “1 day ago” --until “today” - 查看从上周一到本周五的日志:
journalctl --since “last monday” --until “this friday” - 查看过去30分钟内的日志:
journalctl --since “30 minutes ago”