在Linux系统中,日志文件记录了系统运行、服务状态、用户操作等各类信息,是运维人员排查问题、监控系统健康度的核心依据。掌握日志文件的处理方法,能大幅提升故障定位和系统管理的效率。

常用日志文件查看命令
Linux系统中大部分日志存放在/var/log目录下,不同服务对应不同的日志文件,比如/var/log/messages记录系统通用日志,/var/log/nginx/access.log记录Nginx访问日志。
查看实时日志
使用tail -f命令可以实时追踪日志文件的更新内容,适合排查正在发生的故障:
# 实时查看系统通用日志,默认显示最后10行并持续刷新 tail -f /var/log/messages # 指定显示最后20行后再实时刷新 tail -n 20 -f /var/log/nginx/error.log
过滤日志内容
当需要查找特定内容的日志时,可以结合grep命令进行过滤:
# 查找包含error关键词的Nginx访问日志 grep "error" /var/log/nginx/access.log # 忽略大小写查找包含timeout的日志 grep -i "timeout" /var/log/messages # 查找2024年5月1日的日志(假设日志时间格式包含该日期) grep "2024-05-01" /var/log/nginx/access.log
日志内容统计与分析
除了简单的查看和过滤,还可以使用awk、sort、uniq等命令对日志进行统计分析。
统计访问量最高的IP
以Nginx访问日志为例,日志格式通常第一列是访问者IP,可通过以下命令统计访问量前10的IP:
# 提取第一列IP,排序后统计出现次数,再按次数倒序取前10
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
统计特定时间段的请求量
如果日志包含时间戳,可提取时间维度进行统计:
# 统计每小时的请求量,假设时间格式在第二列,提取小时部分统计
awk '{print substr($2, 1, 13)}' /var/log/nginx/access.log | sort | uniq -c
日志切割与自动归档
日志文件如果不做处理会持续增大,占用大量磁盘空间,Linux自带的logrotate工具可以实现日志的自动切割、压缩和归档。
logrotate基础配置
logrotate的主配置文件为/etc/logrotate.conf,用户自定义配置可以放在/etc/logrotate.d/目录下,以Nginx日志为例,创建/etc/logrotate.d/nginx配置文件:
/var/log/nginx/*.log {
daily # 每天切割一次日志
rotate 7 # 保留最近7份日志
compress # 切割后的日志进行gzip压缩
delaycompress # 延迟压缩,下次切割时再压缩上次的日志
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不切割
create 0640 www-data www-data # 创建新日志文件的权限和属主属组
sharedscripts # 所有日志切割完成后执行一次脚本
postrotate # 切割后执行的脚本,重新打开Nginx日志文件
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
手动测试logrotate配置
配置完成后可以手动执行测试,验证配置是否生效:
# 调试模式执行,不会实际切割日志,只显示执行过程 logrotate -d /etc/logrotate.d/nginx # 强制立即执行日志切割 logrotate -f /etc/logrotate.d/nginx
日志清理注意事项
清理过期日志时需要注意,不要直接删除正在被服务写入的日志文件,否则服务可能无法继续写入日志,正确的做法是先切割日志,再清理过期的归档文件。另外,重要日志建议定期同步到远程存储,避免本地磁盘故障导致日志丢失。