在Linux系统中,日志分析和监控是系统管理的核心任务。以下是专业且高效的解决方案:
一、核心日志文件定位 1. 系统主日志: - /var/log/messages(通用系统日志) - /var/log/syslog(Debian系) - /var/log/kern.log(内核日志)
二、基础分析工具 1. tail/grep组合: ```bash # 实时查看认证失败记录 tail -f /var/log/auth.log | grep -i 'failed'
# 统计SSH登录失败IP grep 'Failed password' /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr ```
bash
# 分析HTTP状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -rn
三、专业工具链
1. logrotate配置示例(/etc/logrotate.d/custom):
conf
/var/log/app/*.log {
daily
missingok
rotate 30
compress
delaycompress
sharedscripts
postrotate
systemctl reload app.service
endscript
}
journalctl(systemd系统):
# 查看最近错误
journalctl -p err -b
# 追踪服务日志
journalctl -u nginx -f --since "1 hour ago"
高级工具:
# 使用mlogfilter分析多行日志
mlogfilter /var/log/mongodb/mongod.log --human --slow 100
# 使用lnav进行彩色日志浏览
lnav -t /var/log/syslog
四、实时监控方案
1. 多日志流监控:
bash
multitail -l 'ssh -V root@server1 "journalctl -f"' \
-l 'ssh -V root@server2 "tail -f /var/log/nginx/error.log"'
异常检测脚本:
#!/bin/bash
LOGFILE="/var/log/syslog"
PATTERN="segfault|oom|hard reset"
ALERT_EMAIL="admin@example.com"
tail -Fn0 $LOGFILE | \
while read line; do
if echo "$line" | grep -qE "$PATTERN"; then
echo "$line" | mail -s "CRITICAL ERROR on $(hostname)" $ALERT_EMAIL
# 可添加PagerDuty/webhook调用
fi
done
五、性能优化技巧
1. 使用logreduce进行模式识别:
bash
zcat /var/log/syslog.*.gz | logreduce -v > anomalies.txt
高效日志搜索:
# 使用ripgrep替代grep
rg -z 'error.*timeout' /var/log/
# 使用fzf交互式搜索
cat /var/log/syslog | fzf --height 40% --reverse
六、可视化方案 1. 终端仪表盘: ```bash # 使用lnav高级功能 lnav -i -c ':view-by histogram error' /var/log/syslog
# 使用glances综合监控 glances --disable-webui --disable-cloud -t 5 ```
bash
# 使用docker-compose快速部署
curl -O https://raw.githubusercontent.com/deviantony/docker-elk/master/docker-compose.yml
docker-compose up -d
七、安全审计增强 1. auditd关键配置: ```bash # 监控/etc变更 auditctl -w /etc/ -p wa -k etc_changes
# 生成报告 aureport --start today --summary ```
bash
# 配置syslog-ng加密传输
destination logserver {
syslog("10.0.0.1" transport("tls")
tls(peer-verify(required-trusted)
key-file("/path/to/key")
cert-file("/path/to/cert")));
}
建议根据实际环境组合使用这些工具: - 开发环境:journalctl + lnav - 生产环境:ELK Stack + 自定义监控脚本 - 安全敏感环境:auditd + 加密日志传输
对于大规模部署,建议考虑: 1. 集中式日志管理(Fluentd + Elasticsearch) 2. 指标监控体系(Prometheus + Grafana) 3. 自动化告警系统(Alertmanager)