在 Debian 上实现 LNMP 日志分析
一 日志位置与实时查看
| 组件 | 常见日志路径 | 实时查看 | 备注 |
|---|---|---|---|
| Nginx | /var/log/nginx/access.log、/var/log/nginx/error.log | tail -f /var/log/nginx/access.log;tail -f /var/log/nginx/error.log | 支持自定义日志格式便于分析 |
| PHP-FPM | /var/log/php-fpm/(如:www-data-*.log 或 php-fpm.log) | tail -f /var/log/php-fpm/*.log | 路径与文件名随版本/安装方式不同 |
| MySQL/MariaDB | /var/log/mysql/error.log;可选:general.log、slow.log | tail -f /var/log/mysql/error.log | 慢查询日志需额外开启 |
| 系统服务 | journal | journalctl -u nginx -f;journalctl -u mysql -f | 适用于 systemd 管理的服务 |
二 日志轮转与保留策略
/var/log/nginx/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0644 root adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 $(cat /var/run/nginx.pid)
fi
endscript
}
/var/log/php-fpm/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/php-fpm/php-fpm.pid ]; then
kill -USR2 $(cat /var/run/php-fpm.pid)
fi
endscript
}
三 命令行快速分析与统计
awk '$9 ~ /^5[0-9]{2}$/ {ip[$1]++} END {for(i in ip) print ip[i], i}' \
/var/log/nginx/access.log | sort -nr | head
awk '{path[$7]++} END {for(p in path) print path[p], p}' \
/var/log/nginx/access.log | sort -nr | head
awk -F'"' '{ua[$6]++} END {for(u in ua) print ua[u], u}' \
/var/log/nginx/access.log | sort -nr | head
awk '$NF ~ /slowlog/ {print $0}' /var/log/php-fpm/*.log
tail -n 200 /var/log/mysql/error.log
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log
四 可视化与集中化方案
五 安全与维护要点