【Linux】日志管理详解
·
一、日志管理核心组件
Linux 日志系统的核心是日志服务,负责收集、处理和存储各类日志信息。主流的日志服务有两种:
1. rsyslog(传统主流)
rsyslog 是 syslog 的增强版,几乎所有 Linux 发行版(如 CentOS、Ubuntu)默认预装,用于接收、过滤、转发和存储日志。
-
工作原理:通过 “设施(facility)” 和 “优先级(priority)” 对日志分类,再根据配置规则(如存储到本地文件、转发到远程服务器)处理。
- 设施:日志来源(如内核、用户程序、邮件服务等,用
kern、user、mail等表示)。(1)日志类型分为: auth ##pam 产生的日志 authpriv ##ssh、ftp 等登录信息的验证信息 corn ##时间任务相关 kern ##内核 lpr ##打印 mail ##邮件 mark(syslog)-rsyslog ##服务内部的信息,时间标识 news ##新闻组 user ##用户程序产生的相关信息 uucp ##unix to nuix copy主机之间相关的通信 local 1-7 ##自定义的日志设备 - 优先级:日志重要程度
(2)日志级别分为: debug ##有调试信息的,日志通信最多 info ##一般信息日志,最常用 notice ##最具有重要性的普通条件的信息 warning ##警告级别 err ##错误级别,阻止某个功能或者模块不能正常工作的信息 crit ##严重级别,阻止整个系统或者整个软件不能正常工作的信息 alert ##需要立刻修改的信息 emerg ##内核崩溃等重要信息 none ##什么都不记录 #注意:从上到下,级别从低到高,记录信息越来越少
- 设施:日志来源(如内核、用户程序、邮件服务等,用
-
配置文件:
/etc/rsyslog.conf(主配置)和/etc/rsyslog.d/(子配置,用于单独配置服务日志)。- 示例规则:
user.info /var/log/user.log(将用户设施、info 及更高优先级的日志写入user.log)。
- 示例规则:
-
由日志服务 rsyslogd 记录的日志文件, 日志文件的内容:
- 每一行都代表一个事件,每一行有以下四个内容:
- 1) 事件产生的时间
- 2) 产生事件的服务器的主机名
- 3) 产生事件的服务名或程序名
- 4) 事件的具体信息
- 示例:
![]()
2. systemd-journald(现代系统)
随着 systemd 的普及(如 CentOS 7+、Ubuntu 16.04+),journald成为日志收集的前端,负责实时收集日志并暂存于内存或磁盘,可配合 rsyslog 持久化存储。
- 特点:日志以二进制格式存储(高效、结构化),需通过
journalctl工具查询;支持按时间、服务、优先级等多维度筛选。 - 存储位置:默认在
/run/log/journal/(内存,重启丢失),若配置持久化,会存于/var/log/journal/(磁盘,需手动创建目录并重启服务)。
二、关键日志文件位置
Linux 日志文件集中在/var/log/目录下,以下是常用日志文件及其作用:
| 日志文件 | 作用说明 |
|---|---|
/var/log/messages | 系统核心日志(大部分非调试类系统消息,如服务启动 / 停止、用户操作等) |
/var/log/secure | 安全相关日志(用户登录 / 注销、sudo 操作、SSH 连接等,常用于排查暴力破解) |
/var/log/maillog | 邮件服务日志(sendmail、postfix 等邮件收发记录) |
/var/log/cron | 定时任务(crontab)日志(任务执行结果、错误信息) |
/var/log/boot.log | 系统启动过程日志(服务初始化、硬件检测等) |
/var/log/dmesg | 内核启动日志(硬件驱动加载、内核错误,可通过dmesg命令实时查看) |
/var/log/wtmp | 登录历史记录(二进制文件,需用last命令查看:last -f /var/log/wtmp) |
/var/log/btmp | 失败登录记录(二进制文件,需用lastb命令查看:lastb -f /var/log/btmp) |
/var/log/lastlog | 用户最后一次登录信息(二进制文件,用lastlog命令查看) |
| 应用日志(如 Nginx/Apache) | 通常在/var/log/nginx/或/var/log/httpd/,包含访问日志(access.log)和错误日志(error.log) |
三、日志查询与分析工具
1. 基础文本工具(处理文本日志)
cat/tail:查看日志(如tail -f /var/log/secure实时跟踪安全日志)。grep:筛选关键字(如grep "Failed password" /var/log/secure查找失败登录)。
2. journalctl(处理 journald 二进制日志)
journalctl是查询journald日志的专用工具,支持丰富的筛选参数:
- 查看所有日志:
journalctl(默认按时间倒序,最新日志在最后)。 - 实时跟踪:
journalctl -f(类似tail -f)。 - 按服务筛选:
journalctl -u sshd(查看 sshd 服务日志)。 - 按时间筛选:
journalctl --since "2025-08-16 08:00" --until "2025-08-16 12:00"。 - 按优先级筛选:
journalctl -p err(只看错误及更高优先级日志,-p 3等价,优先级数字:0=emerg,1=alert,2=crit,3=err,4=warning,5=notice,6=info,7=debug)。 - 结合内核日志:
journalctl -k(查看内核日志,类似dmesg)。
3. 登录日志查询工具
last:查看成功登录记录(默认读取/var/log/wtmp),如last -n 10显示最近 10 条登录。lastb:查看失败登录记录(读取/var/log/btmp),如lastb | grep "ssh"查看 SSH 失败登录。lastlog:查看所有用户最后一次登录时间(读取/var/log/lastlog)。
四、日志轮转(Log Rotation)
日志文件会随时间不断增大,若不处理可能占满磁盘。logrotate工具用于自动 “轮转” 日志(切割、压缩、删除旧日志),确保日志文件大小可控。
1. 配置文件
- 主配置:
/etc/logrotate.conf(定义全局默认规则)。 - 服务单独配置:
/etc/logrotate.d/目录下(如/etc/logrotate.d/nginx用于 Nginx 日志轮转)。
2. 核心轮转参数(配置文件中常用)
daily/weekly/monthly:按天 / 周 / 月轮转。size 100M:当日志达到 100M 时轮转。rotate 5:保留 5 份轮转后的日志(超过则删除最旧的)。compress:轮转后压缩旧日志(用 gzip)。delaycompress:延迟压缩(下次轮转时再压缩当前轮转的日志)。missingok:日志文件不存在时不报错。notifempty:日志为空时不轮转。postrotate/endscript:轮转后执行脚本(如重启服务,确保新日志被正确写入)。
3. 示例(Nginx 日志轮转配置)
/etc/logrotate.d/nginx内容:
/var/log/nginx/*.log {
daily # 每天轮转
rotate 7 # 保留7天
compress # 压缩旧日志
delaycompress # 延迟压缩
missingok # 日志不存在不报错
notifempty # 空日志不轮转
postrotate # 轮转后重启Nginx(确保新日志生效)
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
4.日志轮替机制原理
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。
在 /etc/cron.daily/目录,就会发现这个目录中是有 logrotate 文件(可执行), logrotate 通过这个文件依赖定时任务执行的。
crond定时后台程序会定时执行cron.daily内的文件 logrotate 文件在cron.daily下 所以也会定时执行文件中的轮替规则
更多推荐


所有评论(0)