当前位置:首页>Linux>Linux日志管理学习笔记

Linux日志管理学习笔记

  • 2026-10-10 19:49:43
Linux日志管理学习笔记

文章目录

  • 前言
  • 一、先搞懂:Linux日志到底是什么?
    • 1.1 日志的核心作用
    • 1.2 日志都存在哪?
  • 二、核心日志服务:rsyslogd
    • 2.1 工作原理
    • 2.2 两个核心概念:日志类型 & 日志级别
      • (1)日志类型(Facility):日志是哪来的?
      • (2)日志级别(Priority):日志有多重要?
    • 2.3 配置文件格式
  • 三、实操:自定义一个日志文件
    • 步骤1:修改rsyslog主配置文件
    • 步骤2:创建日志文件(可选)
    • 步骤3:重启服务让配置生效
    • 步骤4:验证效果
  • 四、日志轮替logrotate:防止日志把磁盘撑爆
    • 4.1 主配置文件
    • 4.2 自定义轮替规则
      • 步骤1:新建轮替配置文件
      • 步骤2:手动测试轮替效果
    • 4.3 轮替是怎么自动执行的?
  • 五、内存日志journalctl:开机失败也能查
    • 常用命令
  • 六、排障常用技巧&查看命令
    • 1. 实时监控日志
    • 2. 过滤关键字查日志
    • 3. 常见问题查哪个日志?
  • 总结

前言

日志是Linux系统的「黑匣子」,排障、审计、调优全靠它,也是运维方向面试的高频考点。


提示:以下是本篇文章正文内容,下面案例可供参考


一、先搞懂:Linux日志到底是什么?

1.1 日志的核心作用

日志是系统用来记录所有重要事件的文件,小到用户登录、命令执行,大到服务崩溃、内核报错,都会被日志记录下来。核心用处有三个:

  • 排障定位
    :服务启动失败、系统异常重启,翻日志基本能找到根因
  • 安全审计
    :谁尝试登录失败、有没有人修改关键文件,都能查到痕迹
  • 性能分析
    :通过系统日志分析资源占用、服务运行状态

1.2 日志都存在哪?

Linux绝大多数日志默认存放在 /var/log 目录下,不同类型的日志分门别类放在对应文件里。下面是最常用的核心日志文件,必须记牢:

日志文件
作用
查看方式
/var/log/secure
安全认证日志:用户登录、权限验证相关,SSH登录成败全在这
cat / tail / grep
/var/log/messages
系统通用日志:绝大多数系统事件都存在这,排障万金油
cat / tail / grep
/var/log/cron
定时任务日志:crontab任务的执行状态全看它
cat / tail / grep
/var/log/boot.log
系统启动日志:开机过程的服务加载、启动状态
cat / tail / grep
/var/log/dmesg
内核自检日志:硬件、内核相关信息,开机自动生成
dmesg
 命令
/var/log/maillog
邮件服务日志
cat / tail / grep
/var/log/lastlog
所有用户最后一次登录记录(二进制文件)
lastlog
 命令
/var/log/wtmp
永久记录用户登录注销、系统启停(二进制文件)
last
 命令
/var/log/btmp
记录登录失败的记录(二进制文件)
lastb
 命令

📌 踩坑提醒:lastlog、wtmp、btmp都是二进制文件,别用vim/cat硬打开,会出现乱码,必须用对应的专用命令查看。

二、核心日志服务:rsyslogd

CentOS 7之后,系统默认的日志服务从syslogd升级为 rsyslogd,功能更强、性能更高,并且完全兼容旧版的配置规则。

2.1 工作原理

rsyslogd就像一个「日志分发员」,它按照配置文件 /etc/rsyslog.conf 里的规则,把不同来源、不同严重程度的日志,分发到不同的日志文件中。

比如SSH登录的认证信息,rsyslogd收到后匹配到认证类规则,就会自动写入/var/log/secure文件。

2.2 两个核心概念:日志类型 & 日志级别

配置文件里最核心的格式是 类型.级别,这也是最容易记混的地方,拆分开就很好理解。

(1)日志类型(Facility):日志是哪来的?

标记日志由哪个模块产生,常见类型如下:

类型
说明
auth
 / authpriv
认证授权相关,authpriv更偏向隐私认证(如SSH登录)
cron
定时任务相关
kern
内核产生的日志
mail
邮件服务
lpr
打印相关
user
用户程序产生的日志
local0~local7
8个自定义日志类型,留给用户自行使用

(2)日志级别(Priority):日志有多重要?

按照严重程度从低到高排序,级别越高,记录的信息越少、事件越严重。

级别
说明
debug
调试信息,记录最详细,开发排错用
info
普通运行信息,日常记录最常用
notice
提醒信息,正常但需要关注
warning
 / warn
警告,可能有异常,但不影响服务运行
err
 / error
错误,服务功能出现异常
crit
严重错误,已经影响系统正常运行
alert
紧急,需要立即处理
emerg
致命,内核崩溃级别的错误
none
不记录任何日志

💡 记忆小技巧:配置中写 mail.info 的意思是「mail类型中,级别>=info的日志全部记录」,不是只记录info级别!

2.3 配置文件格式

/etc/rsyslog.conf 中每一行规则的标准格式:

日志类型.日志级别    日志文件路径

举几个系统原生的配置例子,一看就懂:

# 所有info及以上级别日志存入messages,邮件、认证、定时任务除外(它们有单独文件)
*.info;mail.none;authpriv.none;cron.none    /var/log/messages

# 所有认证相关日志,全部存入secure
authpriv.*    /var/log/secure

# 定时任务日志单独存放
cron.*    /var/log/cron

每条日志的标准输出格式为:事件时间 + 主机名 + 服务/程序名 + 事件详情,例如:

Sep  9 17:25:33 xq100 sshd[1682]: Accepted password for root from 192.168.10.1 port 49929 ssh2

三、实操:自定义一个日志文件

光看不练假把式,我们动手实现:把sshd服务的日志单独存到 /var/log/my_ssh.log 中。

步骤1:修改rsyslog主配置文件

vim /etc/rsyslog.conf

在文件末尾添加一行规则:

# 自定义:SSH认证日志单独存放
authpriv.*    /var/log/my_ssh.log

步骤2:创建日志文件(可选)

不手动创建的话,rsyslogd写入时也会自动生成

touch /var/log/my_ssh.log

步骤3:重启服务让配置生效

systemctl restart rsyslog

步骤4:验证效果

重新用终端登录一次服务器,然后查看日志:

cat /var/log/my_ssh.log |grep sshd

如果能看到登录记录,就说明配置成功了。

📌 踩坑提醒:配置语法错误会导致rsyslog服务启动失败,可以用 systemctl status rsyslog 查看状态排查问题。

四、日志轮替logrotate:防止日志把磁盘撑爆

日志会越写越大,如果放任不管,迟早占满磁盘。Linux用 logrotate 实现日志轮替:定期切割旧日志、压缩归档、自动删除过期日志,实现生命周期循环管理。

4.1 主配置文件

全局默认配置在 /etc/logrotate.conf,几个核心参数:

参数
作用
weekly
默认每周轮替一次
rotate 4
保留4份旧日志,超过数量自动删除
create
轮替后自动创建新的空日志文件
dateext
旧日志用日期作为后缀(如 secure-20220909)
compress
轮替时压缩旧日志(默认注释,需要可手动开启)
include /etc/logrotate.d
加载该目录下所有自定义轮替规则

补充:如果没有dateext参数,旧日志会用数字递增命名:secure.1、secure.2… 最新的日志永远叫原名。

4.2 自定义轮替规则

系统中各个服务的轮替规则都放在 /etc/logrotate.d/ 目录下,比如yum、bootlog都有独立的规则文件。我们也给刚才的my_ssh.log写一套轮替策略。

需求:每天轮替一次,保留7天日志,空日志不轮替,自动压缩旧文件。

步骤1:新建轮替配置文件

vim /etc/logrotate.d/my_ssh

写入以下配置:

/var/log/my_ssh.log {
    missingok    # 日志文件不存在也不报错
    daily        # 每天轮替一次
    rotate 7# 保留7份旧日志
    compress     # 压缩旧日志
    notifempty   # 空文件不执行轮替
    copytruncate # 先复制再清空原文件,不影响服务持续写日志
}

步骤2:手动测试轮替效果

logrotate-f /etc/logrotate.d/my_ssh

执行后查看/var/log目录,会生成压缩后的旧日志文件。

4.3 轮替是怎么自动执行的?

logrotate本身不会定时运行,它依赖系统的crontab每日定时任务触发。
在 /etc/cron.daily/ 目录下有一个logrotate可执行文件,系统每天会自动执行一次,触发所有日志轮替规则。

五、内存日志journalctl:开机失败也能查

除了写入磁盘的日志,Linux还有一部分日志存在内存中,由systemd的journald服务管理,特点非常鲜明:

  • 系统重启后自动清空,因为存储在内存
  • 系统启动过程中、rsyslog还未启动时的日志也能记录
  • 专门用来排查系统启动失败、服务起不来的问题

常用命令

# 查看所有内存日志
journalctl

# 查看最新的3条日志
journalctl -n3

# 查看指定时间段的日志
journalctl --since"15:00"--until"15:30"
journalctl --since"2022-09-09"--until"2022-09-10"

# 只查看错误级别的日志
journalctl -p err

# 详细格式输出,展示更多字段
journalctl -o verbose

💡 实用场景:系统开不了机,进入单用户模式后,先用journalctl查启动报错,快速定位是哪个服务崩溃。

六、排障常用技巧&查看命令

最后整理几个日常学习和排障最高频的日志使用姿势,亲测好用。

1. 实时监控日志

# 实时刷新secure日志,监控登录情况
tail-f /var/log/secure

2. 过滤关键字查日志

# 查找所有登录失败的记录
grep"Failed password" /var/log/secure

# 查看指定日期的定时任务执行情况
grep"Sep  9" /var/log/cron

3. 常见问题查哪个日志?

问题场景
优先查看的日志
SSH登录失败、权限异常
/var/log/secure
定时任务没执行、执行报错
/var/log/cron
系统启动失败、服务无法启动
/var/log/boot.log
 + journalctl
硬件异常、内核报错
/var/log/dmesg
不知道啥问题,先看通用日志
/var/log/messages

总结

一开始学日志管理总觉得又杂又乱,又是类型又是级别,还有一堆配置文件。真正动手配置一遍、用日志排一次错,就会发现逻辑非常清晰:

  1. rsyslog
     负责「收日志、分日志」,按类型和级别分发到不同文件
  2. logrotate
     负责「管日志生命周期」,定时切割删除,防止占满磁盘
  3. journalctl
     负责「内存临时日志」,解决系统启动阶段的排障问题

Linux章节也进入到了尾声,感谢各位的支持,我们下期见~

最新文章

随机文章