在Linux系统中,日志文件是排查问题、监控系统状态的重要资源。下面我将详细介绍Linux日志系统及查看方法。
Linux系统使用几种主要的日志系统: 1. syslog - 传统日志系统 2. rsyslog - syslog的增强版 3. systemd-journald - 现代Linux发行版(如CentOS 7+, Ubuntu 16.04+)使用的日志系统
大多数日志文件位于/var/log
目录下:
/var/log/messages # 常规系统消息
/var/log/syslog # 系统日志(Ubuntu/Debian)
/var/log/auth.log # 认证相关日志
/var/log/kern.log # 内核日志
/var/log/boot.log # 系统启动日志
/var/log/dmesg # 内核环形缓冲区日志
/var/log/maillog # 邮件服务器日志
/var/log/cron # 计划任务日志
/var/log/httpd/ # Apache日志目录
/var/log/mysql.log # MySQL日志
# 查看整个日志文件
cat /var/log/syslog
# 分页查看日志(可上下翻页)
less /var/log/syslog
# 查看文件尾部内容(默认最后10行)
tail /var/log/syslog
# 查看文件头部内容(默认前10行)
head /var/log/syslog
# 实时查看日志更新(常用于监控)
tail -f /var/log/syslog
# 带高亮显示关键字的实时监控
tail -f /var/log/syslog | grep --color "error"
# 多文件同时监控
multitail /var/log/syslog /var/log/auth.log
# 使用grep搜索特定内容
grep "error" /var/log/syslog
# 不区分大小写搜索
grep -i "error" /var/log/syslog
# 显示匹配行及前后若干行
grep -A 3 -B 2 "error" /var/log/syslog # 显示匹配行后3行和前2行
# 反向匹配(显示不包含关键字的行)
grep -v "info" /var/log/syslog
# 使用正则表达式搜索
grep -E "error|fail" /var/log/syslog
# 查看最近一小时的日志
sed -n "/$(date -d '1 hour ago' '+%b %_d %H')/,\$p" /var/log/syslog
# 查看特定时间段的日志(如2023年10月1日10点到12点)
sed -n '/Oct 1 10:00/,/Oct 1 12:00/p' /var/log/syslog
# 使用journalctl查看特定时间日志(systemd系统)
journalctl --since "2023-10-01 10:00:00" --until "2023-10-01 12:00:00"
# 统计日志中错误出现的次数
grep -o "error" /var/log/syslog | wc -l
# 统计每个IP的访问次数(适用于web日志)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# 使用awk提取特定字段
awk '/error/ {print $1, $2, $5}' /var/log/syslog
对于使用systemd的系统,可以使用journalctl
命令:
# 查看所有日志
journalctl
# 查看内核日志
journalctl -k
# 查看指定服务的日志
journalctl -u nginx.service
# 实时查看日志
journalctl -f
# 按优先级过滤日志
journalctl -p err # 只看错误
# 优先级级别: emerg(0), alert(1), crit(2), err(3), warning(4), notice(5), info(6), debug(7)
# 查看特定时间段的日志
journalctl --since "2023-10-01 00:00:00" --until "2023-10-02 12:00:00"
# 查看磁盘使用情况
journalctl --disk-usage
# 清理旧日志
journalctl --vacuum-size=200M # 保留200MB日志
Linux使用logrotate
管理日志轮转:
# 手动执行日志轮转
logrotate -f /etc/logrotate.conf
# 查看logrotate配置
cat /etc/logrotate.conf
ls /etc/logrotate.d/
dmesg - 查看内核环形缓冲区消息
dmesg | grep "error"
dmesg -T # 显示可读的时间戳
lsof - 查看打开的文件(包括日志文件)
lsof /var/log/syslog
logwatch - 日志分析报告工具
logwatch --range today
goaccess - Web日志分析工具
goaccess /var/log/nginx/access.log -a
通过掌握这些日志查看和管理方法,您可以更有效地排查系统问题、监控服务状态,并维护系统的安全稳定运行。