在Linux环境下,日志分析是系统管理和故障排查的重要环节。以下是针对不同场景的日志分析工具推荐,分为基础工具、高级工具和可视化方案三类:
grep
grep "error" /var/log/syslog # 搜索包含"error"的行
grep -A 3 -B 2 "panic" dmesg # 显示匹配行前后上下文
awk
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c # 统计IP访问次数
sed
sed -n '/2023-10-01/,/2023-10-02/p' /var/log/auth.log # 提取日期范围内的日志
journalctl(Systemd系统专用)
journalctl -u nginx --since "1 hour ago" # 查看Nginx服务最近1小时日志
journalctl -p err -b # 本次启动的所有错误日志
Logrotate
/etc/logrotate.conf
rsyslog/syslog-ng
bash
*.* @192.168.1.100:514 # 将日志转发到远程服务器
GoAccess
goaccess /var/log/nginx/access.log --log-format=COMBINED -a -o report.html
multitail
multitail -cS apache /var/log/apache2/error.log -cS syslog /var/log/syslog
ELK Stack(Elasticsearch + Logstash + Kibana)
bash
# Logstash配置示例(收集syslog)
input { file { path => "/var/log/syslog" } }
output { elasticsearch { hosts => ["localhost:9200"] } }
Grafana + Loki
# 查询示例(Grafana Loki界面)
{job="varlogs"} |= "error"
Graylog
Splunk(免费版)
fail2ban
tail -f /var/log/fail2ban.log # 监控封禁记录
Wazuh
Zeek(原Bro)
按时间范围过滤
sed -n '/Oct 10 09:00:00/,/Oct 10 10:00:00/p' /var/log/messages
统计错误频率
cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr
跟踪最新日志
tail -f /var/log/nginx/access.log | grep -v "200" # 实时监控非200请求
grep
+ awk
+ journalctl
根据日志量、团队技能和需求复杂度选择合适的工具组合。对于容器环境(如Kubernetes),建议使用Fluentd + Loki + Grafana的轻量级方案。