如何定位Linux系统中位置异常的日志文件及未轮转的日志文件?
兄弟,这种没人说得清的「祖传」服务器集群简直是运维噩梦,我之前也碰到过类似情况,给你整理一套一步步落地的方案,帮你搞定日志排查和后续配置的问题:
用
lsof追踪实时写入的文件:这是抓活跃日志最直接的方式,能找出所有被进程打开且处于写入/追加状态的文件。
基础命令:lsof -w | grep -E '(REG|DIR)' | grep -E '(WRITE|APPEND)'
要排除/var/log目录的话,追加过滤:lsof -w | grep -E '(REG|DIR)' | grep -E '(WRITE|APPEND)' | grep -v '/var/log/'
如果想盯特定进程的日志,直接按PID过滤:lsof -p <目标进程PID> | grep WRITE遍历文件系统找近期修改的大文件:日志文件通常会持续写入,用
find扫整个系统,定位近期更新的大文件:
示例命令:find / -type f -mmin -60 -size +10M ! -path "/proc/*" ! -path "/sys/*" ! -path "/dev/*"
解释:找1小时内修改、大小超过10M的文件,排除系统伪文件系统(/proc、/sys这些),可以根据实际情况调整-mmin(时间范围)和-size(大小阈值)。扒应用配置文件找日志路径:自制应用一般会在配置里明确日志位置,搜常见配置文件里的关键词:
命令:grep -r -i "log\|logger\|output" /opt /home /usr/local --include="*.conf" --include="*.ini" --include="*.yaml" --include="*.yml"
重点扫自制应用常部署的目录:/opt、用户home目录、/usr/local,大概率能挖到藏在犄角旮旯的日志路径。
检查logrotate配置:系统默认用
logrotate管理日志轮转,先查目标日志有没有被纳入配置:
命令:grep -r "<目标日志路径>" /etc/logrotate*
要是没匹配到结果,说明这个日志完全没配置轮转,是重点排查对象。实时监控文件增长速度:用
watch配合du快速看文件大小变化:
命令:watch -n 60 'du -h /path/to/target.log'
这个命令会每分钟刷新一次文件的大小。如果要更精确计算增长幅度,可以写个小脚本:#!/bin/bash TARGET_FILE="/path/to/target.log" OLD_SIZE=$(stat -c "%s" "$TARGET_FILE") sleep 300 # 等待5分钟 NEW_SIZE=$(stat -c "%s" "$TARGET_FILE") GROWTH=$(( (NEW_SIZE - OLD_SIZE) / 1024 / 1024 )) echo "5分钟内日志增长了 ${GROWTH} MB"揪出系统里的超大日志:直接扫所有大文件,优先排查超过1G的(这类基本都是没轮转的日志):
命令:find / -type f -size +1G ! -path "/proc/*" ! -path "/sys/*" ! -path "/dev/*"
尽量统一日志路径(可选):如果条件允许,把自制应用的日志迁移到
/var/log/下的专属子目录(比如/var/log/myapp/),方便统一管理,修改应用配置后重启进程生效。给未轮转的日志加logrotate规则:在
/etc/logrotate.d/下新建对应应用的配置文件,比如/etc/logrotate.d/myapp,示例配置:/opt/myapp/logs/app.log { daily # 每天轮转一次 rotate 7 # 保留最近7份日志 compress # 压缩旧日志 delaycompress # 延迟压缩最新的旧日志(避免进程读写问题) missingok # 日志文件不存在时不报错 notifempty # 空日志不轮转 create 640 root adm # 新建日志文件的权限和属主 postrotate # 轮转后重载应用(如果应用需要重新打开日志文件的话) systemctl reload myapp.service > /dev/null 2>&1 || true endscript }要是日志增长极快,可以加
size 100M,达到100M就触发轮转,不用等每天的时间点。集中日志收集(可选):多台服务器的话,建议部署rsyslog或者轻量的日志收集工具,把所有日志集中存储,既能统一监控,也能避免单台服务器磁盘被日志撑爆。
内容的提问来源于stack exchange,提问作者Mnebuerquo




