# 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 查看,而要使用 wwhousers 等命令查看

# 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
1
2
3
4
5

(2)查询 rsyslogd 服务的自启动状态(是否是自启动状态enable)

systemctl list-unit-files | grep rsyslog
rsyslog.service                               enabled 
1
2

2.配置文件:/etc/rsyslog.conf

该配置文件中记录了:日志和日志存放在哪个文件

关于日志:*.*,其中第一个代表日志类型,第二个代表日志级别

1)日志类型

日志类型 说明
auth pam 模块产生的认证相关日志
authpriv ssh、ftp 等服务的登录验证信息(敏感,仅管理员可见)
cron 定时任务(crontab/anacron)相关日志
kern 内核产生的日志信息
lpr 打印服务相关日志
mail 邮件收发相关日志
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)
1

4.在/etc/rsyslog.conf 中添加一个日志文件/var/log/qxy.log,当有事件发送时(比如 sshd 服务相关事件),该文件会接收到信息并保存.

vim /etc/rsyslog.conf 
#写入:
*.*     /var/log/hsp.log
#保存退出
#重启
systemctl restart rsyslog
#输入
logger "这是一条测试日志,会写入 qxy.log"
#查看日志
1
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
}
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.log

endscript
postrotate/endscript 包裹「日志轮替后」执行的脚本命令,postrotate 开始,endscript 结束

示例:

postrotate

systemctl restart rsyslog

endscript

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
}
1
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
1
2
3
4
5
6
7
最近更新: 9/19/2026, 1:27:08 PM
编程NOTE   |