监视日志文件是Linux系统管理的重要任务之一。以下是几种常用的方法:
# 基本用法(显示最后10行)
tail /var/log/syslog
# 实时跟踪日志更新(-f参数)
tail -f /var/log/syslog
# 显示特定行数(如20行)
tail -n 20 /var/log/syslog
# 同时监视多个文件
tail -f /var/log/syslog /var/log/auth.log
# 查看日志文件
less /var/log/syslog
# 在less中实时跟踪(按Shift+F)
# 退出跟踪模式按Ctrl+C,退出less按q
# 安装multitail
sudo apt install multitail # Debian/Ubuntu
sudo yum install multitail # RHEL/CentOS
# 使用示例
multitail /var/log/syslog
multitail -cS apache /var/log/apache2/access.log # 彩色显示
# 查看全部日志
journalctl
# 实时跟踪
journalctl -f
# 查看特定服务的日志
journalctl -u nginx.service
# 按时间筛选
journalctl --since "2023-01-01" --until "2023-01-02"
# 安装
sudo apt install logwatch # Debian/Ubuntu
sudo yum install logwatch # RHEL/CentOS
# 运行(输出到终端)
logwatch --range Today --format text --output stdout
GoAccess:实时Web日志分析器
sudo apt install goaccess
goaccess /var/log/apache2/access.log -a
Lnav:高级日志文件查看器
sudo apt install lnav
lnav /var/log/
# 查找包含"error"的行
grep "error" /var/log/syslog
# 不区分大小写
grep -i "error" /var/log/syslog
# 显示匹配行及前后5行
grep -A 5 -B 5 "error" /var/log/syslog
# 结合tail实时过滤
tail -f /var/log/syslog | grep "error"
# 提取特定列(如第5列)
awk '{print $5}' /var/log/syslog
# 使用sed替换内容
sed 's/error/ERROR/g' /var/log/syslog
日志轮转处理:使用-F
参数替代-f
,可以跟踪即使日志轮转后的新文件
tail -F /var/log/syslog
监视多个日志:
tail -f /var/log/{syslog,auth.log,kern.log}
使用watch定期检查:
watch -n 60 "tail -n 20 /var/log/syslog"
创建自定义监视脚本:
#!/bin/bash
LOGFILE="/var/log/myapp.log"
ERRORPATTERN="ERROR|FAIL"
tail -n0 -F "$LOGFILE" | while read LINE; do
if echo "$LINE" | grep -qE "$ERRORPATTERN"; then
echo "$(date) - Error detected: $LINE" >> /var/log/myapp_errors.log
# 可以添加邮件通知等操作
fi
done
选择哪种方法取决于您的具体需求,从简单的实时查看到复杂的日志分析和报警系统。