Linux 系统日志管理是故障排查和安全审计的重要环节,掌握日志分析技能可以快速定位问题。
日志文件位置:
- /var/log/messages:系统主日志(CentOS/RHEL)
- /var/log/syslog:系统日志(Debian/Ubuntu)
- /var/log/auth.log:认证日志(Debian/Ubuntu)
- /var/log/secure:安全日志(CentOS/RHEL)
- /var/log/kern.log:内核日志
- /var/log/boot.log:系统启动日志
- /var/log/dmesg:内核启动消息
- /var/log/cron:定时任务日志
- /var/log/maillog:邮件日志
- /var/log/nginx/:Nginx 日志目录
- /var/log/apache2/:Apache 日志目录
- /var/log/mysql/:MySQL 日志目录
日志查看工具:
- cat:查看整个文件内容
- less:分页查看,支持上下滚动和搜索
- tail:查看文件末尾,tail -f 实时查看
- head:查看文件开头
- grep:搜索特定内容
- zcat:查看压缩的日志文件(.gz)
- zgrep:搜索压缩的日志文件
- journalctl:systemd 日志查看工具
journalctl 常用命令:
- journalctl:查看所有日志
- journalctl -f:实时查看日志
- journalctl -u service:查看特定服务的日志
- journalctl -u service -f:实时查看服务日志
- journalctl --since today:查看今天的日志
- journalctl --since "2024-01-01" --until "2024-01-02":查看指定时间段的日志
- journalctl -p err:查看错误级别的日志
- journalctl -p warning:查看警告级别的日志
- journalctl -b:查看当前启动的日志
- journalctl -b -1:查看上一次启动的日志
- journalctl --disk-usage:查看日志磁盘占用
- journalctl --vacuum-size=1G:限制日志大小为 1GB
日志级别:
- emerg:紧急
- alert:警报
- crit:严重
- err:错误
- warning:警告
- notice:通知
- info:信息
- debug:调试
日志轮转(logrotate):
- 配置文件:/etc/logrotate.conf 和 /etc/logrotate.d/
- 配置示例:
shell
/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript } - 手动执行:logrotate -f /etc/logrotate.conf
- 测试配置:logrotate -d /etc/logrotate.conf
日志分析技巧:
- 统计错误数量:grep -i error /var/log/syslog | wc -l
- 查找特定时间段的日志:grep "2024-01-01" /var/log/syslog
- 查找特定 IP 的访问:grep "192.168.1.1" /var/log/nginx/access.log
- 统计访问量最高的 IP:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
- 查找失败的登录尝试:grep "Failed password" /var/log/auth.log
- 查找系统重启记录:last reboot
日志管理最佳实践:
- 定期清理旧日志:使用 logrotate 自动轮转
- 监控日志大小:设置告警阈值
- 集中日志管理:使用 ELK(Elasticsearch、Logstash、Kibana)或 Graylog
- 日志备份:定期备份重要日志
- 日志权限:确保日志文件权限正确,防止未授权访问
- 结构化日志:使用 JSON 格式便于解析和分析
远程日志收集:
- rsyslog:系统日志服务,支持远程日志收集
- syslog-ng:功能强大的日志管理工具
- fluentd:统一日志收集层
- filebeat:轻量级日志收集器
故障排查流程:
- 确认问题发生时间
- 查看系统主日志(/var/log/messages 或 /var/log/syslog)
- 查看相关服务日志
- 使用 grep 搜索错误信息
- 分析日志上下文
- 结合其他监控工具(top、vmstat、iostat)综合判断