日志分析是系统管理和故障排查的重要技能。Linux提供了多种强大的工具和方法来分析系统日志。以下是详细的日志分析方法和工具:
系统日志:
/var/log/messages
- 通用系统消息/var/log/syslog
- 系统日志(在Debian/Ubuntu上)/var/log/auth.log
- 认证和安全相关日志服务相关日志:
/var/log/nginx/
- Nginx日志/var/log/apache2/
- Apache日志/var/log/mysql.log
- MySQL日志内核日志:
/var/log/kern.log
- 内核相关日志dmesg
- 内核环形缓冲区# 搜索特定关键词
grep "error" /var/log/syslog
# 不区分大小写
grep -i "warning" /var/log/messages
# 显示匹配行及前后5行
grep -A 5 -B 5 "critical" /var/log/syslog
# 实时查看日志更新
tail -f /var/log/nginx/access.log
# 查看最后100行
tail -n 100 /var/log/syslog
# 查看前50行
head -n 50 /var/log/auth.log
less /var/log/messages
# 在less中可搜索(/keyword)或跳转(G到末尾)
# 统计HTTP状态码出现次数
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 提取特定时间段的日志
awk '/Dec 10 12:00/,/Dec 10 13:00/' /var/log/syslog
# 提取IP地址
sed -n 's/.*\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p' access.log
# 替换敏感信息
sed 's/credit_card=[0-9]\+/credit_card=XXXX/' sensitive.log
# 提取日志中的用户名
cut -d' ' -f5 /var/log/auth.log | sort | uniq -c
# 查看全部日志
journalctl
# 查看特定服务日志
journalctl -u nginx.service
# 时间范围查询
journalctl --since "2023-01-01" --until "2023-01-02"
# 手动执行日志轮转
logrotate -f /etc/logrotate.conf
GoAccess: 实时Web日志分析器
goaccess /var/log/nginx/access.log --log-format=COMBINED
ELK Stack (Elasticsearch, Logstash, Kibana): 企业级日志分析平台
Graylog: 开源日志管理平台
Splunk: 商业日志分析工具
查找频繁出现的错误:
grep -i "error" /var/log/syslog | cut -d' ' -f5- | sort | uniq -c | sort -nr | head -20
监控登录尝试:
tail -f /var/log/auth.log | grep -i "failed"
分析高流量IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
创建自定义日志分析脚本:
#!/bin/bash
LOGFILE="/var/log/nginx/access.log"
echo "Top 10 IPs:"
awk '{print $1}' $LOGFILE | sort | uniq -c | sort -nr | head -10
echo -e "\nTop 10 URLs:"
awk '{print $7}' $LOGFILE | sort | uniq -c | sort -nr | head -10
使用正则表达式进行复杂匹配:
grep -E "5[0-9]{2}" access.log # 查找所有5xx错误
通过掌握这些工具和技术,您可以有效地分析Linux系统中的日志,快速定位问题并获取系统运行状态的深入洞察。