/var/log 的管理需从结构、轮转、清理和监控四方面入手。首先,其核心目录包括 messages/syslog(系统日志)、auth.log/secure(认证日志)、dmesg(硬件检测)、kern.log(内核日志)、cron(定时任务)、boot.log(启动日志)、httpd/nginx(web 服务日志)及 apt/yum.log(软件包记录),便于问题定位;其次,使用 logrotate 配置日志轮换,如 daily(每日轮换)、rotate(保留天数)、compress(压缩)、notifempty(空文件不轮换)、create(权限设置)、postrotate(重载服务)等参数控制日志大小与保留周期;再次,定期检查磁盘占用,通过 du -sh /var/log/* 查看,结合手动删除、调整 rotate 参数、限制日志类型或使用 tmpwatch 删除旧文件等方式清理日志;最后,日常运维应使用 tail -f 实时查看、journalctl 查 systemd 日志、配置 cron 监控目录大小,并可接入 rsyslog + elk 进行集中分析。
/var/log 是 linux 系统中存放日志文件的核心目录,正确管理这个目录对系统维护和故障排查非常关键。它不仅影响磁盘空间使用,还关系到日志的可读性和安全性。以下从结构、轮转机制、清理策略几个方面讲讲怎么合理管理 /var/log。
/var/log 目录常见结构与作用
Linux 的日志目录结构相对固定,不同发行版略有差异,但大部分核心文件位置一致:
- /var/log/messages 或 /var/log/syslog:记录系统整体日志,包括启动信息、服务状态等。
- /var/log/auth.log(debian/ubuntu)或 /var/log/secure(centos/RHEL):记录用户认证相关操作,比如登录尝试、sudo 使用等。
- /var/log/dmesg:内核环缓冲区日志,主要用于查看系统启动时的硬件检测信息。
- /var/log/kern.log:仅记录内核产生的日志。
- /var/log/cron:定时任务执行日志。
- /var/log/boot.log:系统启动过程的日志。
- /var/log/httpd/ 或 /var/log/nginx/:Web 服务器日志目录。
- /var/log/apt/ 或 /var/log/yum.log:软件包管理器操作记录。
这些日志有助于快速定位问题来源,比如看到登录失败频繁可以检查 auth.log,系统崩溃前的状态可以从 messages 或 syslog 中找线索。
日志轮转 logrotate 的基本配置
Linux 使用 logrotate 工具自动轮换日志文件,避免单个日志过大,同时支持压缩、保留周期等功能。
logrotate 的主配置文件通常是
/etc/logrotate.conf
,而各服务有自己的子配置放在
/etc/logrotate.d/
下。
一个典型的日志轮转配置如下(以 nginx 为例):
/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate [ -f /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid` endscript }
解释一下几个常用参数:
- daily:每天轮换一次。
- rotate 14:保留最近 14 天的日志。
- compress:旧日志用 gzip 压缩。
- delaycompress:延迟一天再压缩,方便调试。
- notifempty:日志为空时不轮换。
- create:创建新日志文件并设置权限。
- postrotate…endscript:在轮换后执行的操作,比如通知服务重载日志。
你可以通过手动运行
logrotate -vf /etc/logrotate.d/nginx
来测试配置是否正确。
清理旧日志与控制磁盘占用
即使有 logrotate,也有可能因为日志量大或者配置不当导致磁盘被占满。建议定期检查 /var/log 占用情况:
du -sh /var/log/*
清理旧日志的方法有几个:
- 手动删除不必要的历史日志,例如一些调试日志或已经归档很久的压缩文件。
- 调整 logrotate 配置中的 rotate 数值,减少保留天数。
- 对于某些服务(如 mysql、Nginx),可以在配置中限制访问日志的大小或关闭不需要的日志类型。
- 使用 tmpwatch 或者 tuned 删除超过一定时间的文件,例如:
tmpwatch 72 /var/log/myapp/
这条命令会删除 /var/log/myapp/ 下 72 小时未修改的文件。
注意:不要随便删系统级日志,特别是涉及安全审计的文件,如 auth.log 或 secure。
日志查看与监控小技巧
除了管理结构和轮转,日常运维中还要会看日志:
- 使用
tail -f /var/log/syslog
实时查看日志变化。
- 用
journalctl -u nginx.service
查看 systemd 服务日志(适用于使用 systemd 的系统)。
- 设置简单的 cron 定时任务,每天检查一次日志目录大小,及时预警。
如果系统日志很多,也可以考虑接入集中式日志管理工具,比如 rsyslog + ELK,把日志统一收集分析。
基本上就这些。合理组织 /var/log 结构、配置好 logrotate,并定期清理和监控,能有效避免日志引发的问题。