目录
1、systemd-journald和rsyslog相关概念
1.1、常见的日志分类
2、查看系统日志文件(日志记录设备和优先级)
2.1、日志设备
2.2、日志优先级
2.3、Rsyslog规则示例
2.4、手动发送syslog消息
2.5、日志轮替
3、查看内存日志
3.1、查看内存日志
3.2、显示最后n个日志条目
3.3、显示最后10个日志条目,并实时更新新写入的日志条目。
3.4、根据日志条目的优先级过滤日志输出
3.5、查看指定时间段的日志
3.6、从末尾查看内存日志,并加上注解
3.7、显示从开机启动时起的内存日志,并加上注解
3.8、查看日志条目详细字段信息
4、保存系统日志
5、lnav命令
6、rsyslog日志服务状态
7、配置文件(/etc/systemd/journald.conf)
7.1、Storage 在哪里存储日志文件:
7.2、Compress
7.3、Seal
7.4、SplitMode
7.5、RateLimitIntervalSec 与RateLimitBurst
7.6、限制日志文件的大小上限。
7.7、MaxFileSec日志滚动的时间间隔
7.8、MaxRetentionSec日志文件的最大保留期限
7.9、SyncIntervalSec
7.10、ForwardToSyslog=, ForwardToKMsg=, ForwardToConsole=, ForwardToWall=
7.11、MaxLevelStore=, MaxLevelSyslog=, MaxLevelKMsg=, MaxLevelConsole=, MaxLevelWall=
7.12、TTYPath
8、systemd-journald服务相关命令
Linux中内建了一个基于Syslog协议的标准日志记录。
dmesg:可以查看从系统引导到正常启动整个过程的硬件级别的日志
wtmp或faillog:登录时的正解或错误信息
lastlog:记录系统上所有账号最近一次登陆的信息
注意:
1、systemd-journald.service:这里的日志是没有分类的,分类是 rsyslog 干的事情。
2、日志文件内容,不要手动修改,如果修改了,rsyslog就不会再往该文件写入内容
系统日志格式(举例:/var/log/secure)
时间:日志产生(记录)的时间
servera:谁产生了这条日志(rsyslog可以记录远程主机的日志)
sshd[34039]:这个日志是由哪个用户及进程(或服务)产生的(标注用户名以及进程PID)
Accepted .. 65493 ssh2 :具体的日志事件
许多程序使用syslog协议将事件记录到系统。每一条日志信息根据设备类型(消息的类型)和优先级(消息的严重性)分类。
auth:pam(认证服务)产生的日志
authpriv:ssh,ftp等登录信息的验证信息
cron:计划任务相关
kern:内核
lpr:打印
mail:邮件
mark(syslog):rsyslog服务内部的信息,时间标识
news:新闻组
user:用户程序产生的相关信息
uucp:unix to unix copy, unix主机之间相关的通讯
local0~7:自定义的日志设备
0 emerg:内核崩溃等严重信息(默认定义会在所有终端上显示)
1 alert:需要立刻响应的信息
2 crit:严重级别,阻止整个系统或者整个软件不能正常工作的信息
3 err:错误级别,阻止某个功能或者模块不能正常工作的信息
4 warning:警告级别(比如使用一个软件,这个软件的某个功能在下一个版本中可能会被剔除,那么在当前版本中给你一个warning)
5 notice:最具有重要性的普通条件的信息(通知)
6 info:一般信息的日志,最常用
7 debug:调试信息,日志量最多
none:什么都不记录
*:代表所有级别
Tips:从上到下,级别从高到低,记录的信息越来越多若定义了日志的等级是info,代表包含了info以及以上的所有等级事件日志都记录。如果是*.none,则不记录该服务的任何日志。
其配置规则文件为/etc/rsyslog.conf 文件和/etc/rsyslog.d 目录下扩展名为.conf的任何文件。
logger命令可以发送消息到rsyslog服务。-p 参数 可以指定发送消息的设备类型和优先级,这对测试rsyslog服务配置更改很有用。
通过logger产生一条debug级别日志“ hello world”,推送到日志设备local7
# logger -p local7.notice "hello world"
logrotate工具会轮转日志文件,以防止/var/log/目录下的日志文件占用文件空间过多。
相关配置文件:/etc/logrotate.conf(默认规则)
注意:如果针对某个具体的日志文件定义了轮替规则,那么这个日志文件的轮替规则就会采用自己定义的轮替方式。
配置参数 |
说明 |
monthly |
日志文件将按月轮循。其它可用值为'daily','weekly'或者'yearly'。 |
rotate 5 |
一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。 |
compress |
在轮循任务完成后,已轮循的归档将使用gzip进行压缩。 |
delaycompress |
总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。 |
missingok |
在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。 |
notifempty |
如果日志文件为空,轮循不会进行。 |
create 644 root root |
以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。 |
postrotate/endscript |
在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。 |
systemd-journald服务将日志数据存储在带有索引的结构化二进制文件中,该文件称为日志。
要从上述日志中检索日志消息,使用journalctl命令。(普通用户可能会被限制查看某些消息)
# journalctl
优先级为notice或warning的消息显示为粗体文本,而优先级为error或以上的消息则显示为红色文本。
# journalctl -n 数字 (默认显示10个日志条目)
# journalctl -f ( Ctrl + c 可退出)
-p 参数后可接受优先级的名称或编号作为参数,显示该优先级别及以上的日志条目。
# journalctl -p err (显示err优先级别及以上的日志条目)
#journalctl --since 时间 –until 时间
时间选项采用的格式为“ YYYY-MM-DD hh:mm:ss ” (必须使用双括号,以保留选项中的空格)
Tips:
查看2021-01-21 13:00:00至今天的日志
# journalctl --since "2021-01-21 13:00:00" --until today
查看相对于当前时间之前一小时的日志
# journalctl --since "-1 hour"
# journalctl -xe
# journalctl -xb
# journalctl -o verbose ( 显示包含所有字段的完整结构化条目项。)
常用字段:
_COMM是命令的名称
_EXE是进程的可执行文件的路径
_PID是进程的PID
_UID是运行该进程的用户UID
_SYSTEMD_UNIT 是启动该进程的systemd单元
查看PID为17341的所有日志条目
# journalctl _PID=17341
默认情况下,系统日志保存在/run/log/journal 目录中,系统重启时这些日志会被清除。
如果需要将系统日志保存下来,则需要修改 /etc/systemd/journald.conf 文件中的Storage参数。
Storage参数可设为以下三个值:
因为/run 文件系统是临时的,仅存在于运行内存中,存储在其中的数据(包括系统日志)不会在系统重启后持续保留。
# systemctl restart systemd-journald
# journalctl --list-boots
# journalctl -b 文件名
# systemctl status rsyslog
设置如何按用户分割日志文件,以实现不同的访问控制策略(日志守护进程会确保每个用户都能读取自己的日志文件)。 注意,仅分割持久保存的日志(/var/log/journal),内存中的日志永不分割(/run/log/journal)。
可以使用的分割策略如下:
用于限制日志的生成速度(设为零表示不作限制)。
含义是在 RateLimitIntervalSec= 时间段内, 每个服务最多允许产生 RateLimitBurst= 数量(条数)的日志。 在同一个时间段内,超出数量限制的日志将被丢弃,直到下一个时间段才能再次开始记录。 对于所有被丢弃的日志消息,仅用一条类似"xxx条消息被丢弃"的消息来代替。 这个限制是针对每个服务的限制,一个服务超限并不会影响到另一个服务的日志记录。
RateLimitIntervalSec= 可以使用下面的时间单位:"ms", "s", "min", "h", "us"
SystemMaxUse=, SystemKeepFree=, SystemMaxFileSize=, SystemMaxFiles=, RuntimeMaxUse=, RuntimeKeepFree=, RuntimeMaxFileSize=, RuntimeMaxFiles=
tips:
通常并不需要使用基于时间的日志滚动策略, 因为由 SystemMaxFileSize= 与 RuntimeMaxFileSize= 控制的基于文件大小的日志滚动策略 已经可以确保日志文件的大小不会超标。 默认值是一个月, 设为零表示禁用基于时间的日志滚动策略。 可以使用 "year", "month", "week", "day", "h", "m" 时间后缀, 若不使用后缀则表示以秒为单位。
。当日志文件的最后修改时间超过此期限后将被删除。 默认值零表示不使用基于时间的日志删除策略。 通常并不需要使用基于时间的日志删除策略,因为由SystemMaxUse= 与 RuntimeMaxUse= 控制的基于文件大小的日志滚动策略 已经可以确保日志文件的大小不会超标。 可以使用 "year", "month", "week", "day", "h", "m" 时间后缀, 若不使用后缀则表示以秒为单位。
向磁盘刷写日志文件的时间间隔,默认值是五分钟。 刷写之后,日志文件将会处于离线(OFFLINE)状态。 注意,当接收到 CRIT, ALERT, EMERG 级别的日志消息后, 将会无条件的立即刷写日志文件。 因此此设置仅对 ERR, WARNING, NOTICE, INFO, DEBUG 级别的日志消息有意义。
指定 ForwardToConsole=yes 时所有使用的控制台TTY, 默认值是 /dev/console
# systemctl status systemd-journald