# 10.Linux-日志
# 1.概述
基本介绍:
(1)日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
(2)日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
(3)可以这样理解 日志是用来记录重大事件的工具
系统日志文件的保存位置:/var/log/ 目录下
常用的系统日志有
| 日志文件 | 说明 |
|---|---|
/var/log/boot.log(常用) | 系统启动日志 |
/var/log/cron(常用) | 记录与系统定时任务相关的日志 |
/var/log/cups/ | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息。也可以使用 dmesg 命令直接查看内核自检信息 |
/var/log/btmp | 记录错误登录的日志。这个文件是二进制文件,不能直接用 Vi 查看,而要使用 lastb 命令查看,命令如下:[root@localhost log]# lastb |
/var/log/lastlog(常用) | 记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,要使用 lastlog 命令查看 |
/var/log/maillog(常用) | 记录邮件信息的日志 |
/var/log/message(常用) | 记录系统重要消息的日志。这个日志文件中会记录 Linux 系统的绝大多数重要信息。如果系统出现问题,首先要检查的应该就是这个日志文件 |
/var/log/secure(常用) | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh 的登录、su 切换用户、sudo 授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。是二进制文件,而要使用 last 命令查看 |
/var/run/utmp(常用) | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。这个文件不能用 Vi 查看,而要使用 w、who、users 等命令查看 |
# 2.日志管理服务-rsyslogd
CentOS7.6 日志服务是 rsyslogd (rocket-fast system for log)
rsyslogd是一个后台程序(服务),来管理/记录/操作相关日志,将日志记录到对应的文件中。
原理:/etc/rsyslog.conf配置文件中记录了要管理哪些日志和将这些日志记录到哪个文件中

1.在进行日志管理时,要保证rsyslogd服务是启动的!
(1)查询 Linux 中的 rsyslogd 服务是否启动
ps -aux | grep "rsyslog" | grep -v "grep" #过滤掉grep进程的干扰
root 8050 0.0 0.2 222748 4944 ? Ssl 08:40 0:02 /usr/sbin/rsyslogd -n
ps -aux | grep "rsyslog"
root 1036 0.0 0.0 112724 988 pts/0 S+ 10:00 0:00 grep --color=auto rsyslog
root 8050 0.0 0.2 222748 4944 ? Ssl 08:40 0:02 /usr/sbin/rsyslogd -n
2
3
4
5
(2)查询 rsyslogd 服务的自启动状态(是否是自启动状态enable)
systemctl list-unit-files | grep rsyslog
rsyslog.service enabled
2
2.配置文件:/etc/rsyslog.conf
该配置文件中记录了:日志和日志存放在哪个文件
关于日志:*.*,其中第一个代表日志类型,第二个代表日志级别
1)日志类型
| 日志类型 | 说明 |
|---|---|
| auth | pam 模块产生的认证相关日志 |
| authpriv | ssh、ftp 等服务的登录验证信息(敏感,仅管理员可见) |
| cron | 定时任务(crontab/anacron)相关日志 |
| kern | 内核产生的日志信息 |
| lpr | 打印服务相关日志 |
| 邮件收发相关日志 | |
| mark(syslog)-rsyslog | rsyslog 服务内部的时间标识、自身运行信息 |
| news | 新闻组服务相关日志 |
| user | 用户层程序产生的普通信息日志 |
| uucp | Unix 主机间文件拷贝(uucp)通信相关日志 |
| local 1-7 | 自定义日志设备(用户可自行定义用途) |
2)日志级别
| 日志级别 | 说明 |
|---|---|
| debug | 包含详细调试信息,日志量最大 |
| info | 普通通知类信息,最常用 |
| notice | 具有重要性的普通状态信息 |
| warning | 警告信息(功能未受影响,需关注) |
| err | 错误信息(单个功能 / 模块无法正常工作) |
| crit | 严重错误(整个系统 / 软件核心功能异常) |
| alert | 紧急信息(需立即手动干预修复) |
| emerg | 致命信息(如内核崩溃,系统无法运行) |
| none | 不记录任何日志信息 |
注意:从上到下,级别从低到高,记录信息越来越少
3.由日志服务 rsyslogd 记录的日志文件,日志文件的内容:每一行都代表一个事件,每一行有以下四个内容:
1)事件产生的时间
2)产生事件的服务器的主机名
3)产生事件的服务名或程序名
4)事件的具体信息
例如
Mar 21 08:40:13 qxy01 sshd[8768]: pam_unix(sshd:session): session opened for user stu by (uid=0)
4.在/etc/rsyslog.conf 中添加一个日志文件/var/log/qxy.log,当有事件发送时(比如 sshd 服务相关事件),该文件会接收到信息并保存.
vim /etc/rsyslog.conf
#写入:
*.* /var/log/hsp.log
#保存退出
#重启
systemctl restart rsyslog
#输入
logger "这是一条测试日志,会写入 qxy.log"
#查看日志
2
3
4
5
6
7
8
9
# 3.日志轮替
1.基本介绍
日志轮替(logrotate)就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除清除日志中旧的信息
2.日志轮替文件命名
(1) centos7 使用 logrotate 进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中“dateext” 参数
(2) 如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20260320”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
(3) 如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志, 用来保存新的日志。当第二次进行日志轮替时,“secure.1” 会自动改名为“secure.2”, 当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
3.logrotate配置文件
/etc/logrotate.conf 为 logrotate 的全局配置文件(写了日志文件轮替规则)
/etc/logrotate.conf文件内容:
# rotate log files weekly--->每周对日志文件进行一次轮替
weekly
# keep 4 weeks worth of backlogs--->共保存 4 份日志文件,当建立新的日志文件时,旧的将会被删除
rotate 4
# create new (empty) log files after rotating old ones--->创建新的空的日志文件,在日志轮替后
create
# use date as a suffix of the rotated file--->使用日期作为日志轮替文件的后缀
dateext
# uncomment this if you want your log files compressed--->日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩
#compress
#RPM packages drop log rotation information into this directory
include /etc/logrotate.d--->可以把一些单独的轮替规则写在/etc/logrotate.d下(在本文件中include调用一下就行),也可以写在本文件中(如下面写的)
#下面是单独设置,优先级更高。
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly # 每月对日志文件进行一次轮替
create 0664 root utmp # 建立的新日志文件,权限是 0664 ,所有者是 root ,所属组是 utmp 组
minsize 1M # 日志文件最小轮替大小是 1MB 。也就是日志一定要超过 1MB 才会轮替,否则就算时间达到一个月,也不进行日志转储
rotate 1 # 仅保留一个日志备份。也就是只有 wtmp 和 wtmp.1 日志保留而已
}
/var/log/btmp {
missingok # 如果日志不存在,则忽略该日志的警告信息
monthly
create 0600 root utmp rotate 1
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
单独指定某个日志文件的轮替规则的参数说明:
| 参数 | 说明 |
|---|---|
| daily | 日志轮替周期为每天 |
| weekly | 日志轮替周期为每周 |
| monthly | 日志轮替周期为每月 |
| rotate 数字 | 保留的日志备份文件个数,0 表示不保留任何备份 |
| compress | 日志轮替时,对旧日志文件进行压缩(默认 gzip 格式) |
| create mode owner group | 轮替后创建新日志文件,并指定新文件的权限(mode)、所有者(owner)和所属组(group) 示例: create 644 root root |
| mail address | 日志轮替时,将旧日志内容通过邮件发送到指定邮箱(如 mail admin@example.com) |
| missingok | 若指定的日志文件不存在,忽略该错误 / 警告信息,不中断轮替流程 |
| notifempty | 仅当日志文件非空时才执行轮替,空文件则跳过 |
| minsize 大小 | 日志轮替的最小阈值:需同时满足「时间周期」+「日志大小≥指定值」才会轮替 示例: minsize 10M(日志至少 10MB 且到周期才轮替) |
| size 大小 | 仅按日志大小触发轮替(忽略时间周期),日志超过指定大小即轮替 示例: size 50M(日志达 50MB 就轮替) |
| dateext | 轮替后的旧日志文件以「日期」作为后缀(而非数字),示例:qxy.log-20260321 |
| sharedscripts | 关键字后的脚本在本轮轮替中仅执行一次(即使多个日志文件匹配规则) |
| prerotate/endscript | 包裹「日志轮替前」执行的脚本命令,prerotate 开始,endscript 结束示例: prerotate/bin/chmod 600 /var/log/qxy.logendscript |
| postrotate/endscript | 包裹「日志轮替后」执行的脚本命令,postrotate 开始,endscript 结束示例: postrotatesystemctl restart rsyslogendscript |
4.自定义轮替规则
第一种方法:直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略
第二种方法: 在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。
推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入/etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
vim /etc/logrotate.d/qxy_log
# 要轮替的日志文件路径
/var/log/qxy.log {
daily # 每天轮替
rotate 7 # 保留7天的旧日志(超过7天自动删除)
compress # 压缩旧日志(gzip格式)
dateext # 旧日志后缀用日期(如 qxy.log-20260321.gz)
missingok # 日志文件不存在时忽略警告
notifempty # 空日志不轮替
minsize 10M # 至少10MB才轮替(避免空日志/小日志频繁轮替)
create 644 root root # 轮替后新建日志,权限644,属主root/root
# 轮替后重启rsyslog,让新日志生效
postrotate
/bin/systemctl restart rsyslog > /dev/null 2>&1 || true
endscript
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
5.日志轮替机制的原理
logrotate 本身不是后台服务,而是依赖系统 cron 定时任务自动运行:
- 系统默认在
/etc/cron.daily/下放置logrotate脚本; - cron 每天自动执行
/etc/cron.daily/logrotate,脚本调用logrotate /etc/logrotate.conf; logrotate.conf会加载/etc/logrotate.d/下所有自定义配置文件,逐一检查并执行轮替规则。
写日志是rsyslogd,日志轮替是logrotate
# 4.内存日志
有一些日志是写到内存里的,还没有写到文件里,因为这些日志是实时变化的重启之后内存日志会被清空
相关指令
查看内存日志指令:journalctl
journalctl 查看全部
journalctl -n 3 查看最新 3 条
journalctl --since 19:00 --until 19:10:10 查看起始时间到结束时间的日志可加日期
journalctl -p err 报错日志
journalctl -o verbose 日志详细内容
journalctl _PID=1245 _COMM=sshd 查看包含这些参数的日志(在详细日志查看) 或者 journalctl | grep sshd
2
3
4
5
6
7