Linux系统日志文件通常存储在/var/log
目录下,主要包括:
/var/log/messages
(RHEL/CentOS) 或 /var/log/syslog
(Debian/Ubuntu)/var/log/auth.log
或 /var/log/secure
/var/log/kern.log
/var/log/boot.log
/var/log/nginx/
, /var/log/mysql/
等基本命令:
cat /var/log/syslog # 显示整个文件内容
tail -f /var/log/syslog # 实时跟踪日志更新
less /var/log/syslog # 分页查看,支持搜索(/keyword)
head -n 20 /var/log/syslog # 查看前20行
journalctl (systemd系统):
journalctl -xe # 查看最新日志并跳转到末尾
journalctl -u nginx.service # 查看特定服务日志
journalctl --since "2023-01-01" --until "2023-01-02"
journalctl -p err -b # 查看当前启动的错误日志
grep过滤:
grep "error" /var/log/syslog
grep -i "fail" /var/log/auth.log
grep -A 3 -B 2 "critical" /var/log/messages # 显示匹配行前后内容
Linux通常使用logrotate
管理日志轮转:
查看配置:
cat /etc/logrotate.conf
ls /etc/logrotate.d/
手动执行轮转:
logrotate -vf /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
/usr/bin/systemctl reload nginx >/dev/null 2>&1 || true
endscript
}
使用awk提取特定字段:
awk '{print $1, $5}' /var/log/nginx/access.log
统计HTTP状态码:
awk '{print $9}' access.log | sort | uniq -c | sort -rn
使用sed进行日志清理:
sed -i '/192.168.1.100/d' /var/log/auth.log # 删除包含特定IP的行
使用multitail同时监控多个日志:
multitail /var/log/syslog /var/log/nginx/error.log
rsyslog配置:
/etc/rsyslog.conf
启用远程日志*.* @192.168.1.100:514
(发送到远程服务器)ELK Stack (Elasticsearch, Logstash, Kibana):
Graylog:
设置适当的权限:
chmod 640 /var/log/secure
chown root:adm /var/log/auth.log
定期审计日志文件完整性:
debsums -c /var/log/* # Debian系
rpm -Vf /var/log/* # RHEL系
考虑使用日志加密和数字签名防止篡改
日志文件过大:
truncate
清空日志:truncate -s 0 /var/log/huge.log
日志不更新:
systemctl status rsyslog
df -h
df -i
特定服务日志缺失:
通过掌握这些技巧,您可以更有效地管理和解读Linux系统日志,快速定位和解决问题。