LNMP (Linux + Nginx + MySQL + PHP) 服务器的日志管理是系统运维的重要部分。以下是全面的日志管理方案:
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/mysql/error.log
/var/log/mysql/mysql-slow.log
/var/lib/mysql/mysql-bin.*
/var/log/php-fpm/error.log
/var/log/php-fpm/www-slow.log
(需配置)/var/log/messages
(系统主日志)/var/log/syslog
(Ubuntu系统)/var/log/auth.log
(认证日志)http {
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main buffer=32k flush=5m;
error_log /var/log/nginx/error.log warn;
}
[mysqld]
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
[global]
error_log = /var/log/php-fpm/error.log
log_level = notice
[www]
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s
使用 logrotate
进行日志轮转,示例配置 /etc/logrotate.d/nginx
:
/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
}
tail -f /var/log/nginx/access.log
- 实时查看日志grep
- 文本搜索awk
- 高级文本处理wc -l
- 行数统计GoAccess: 实时Web日志分析器
goaccess /var/log/nginx/access.log --log-format=COMBINED
ELK Stack (Elasticsearch + Logstash + Kibana)
Grafana + Prometheus/Loki
设置日志文件权限:
chmod 640 /var/log/nginx/*
chown root:adm /var/log/nginx/*
监控异常登录:
grep "Failed password" /var/log/auth.log
使用 fail2ban
自动封禁恶意IP:
# 安装
apt install fail2ban
# 配置Nginx防护
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 编辑jail.local启用nginx-http-auth和nginx-badbots
定期清理旧日志:
find /var/log/nginx/ -name "*.log" -type f -mtime +30 -delete
使用 logrotate
自动管理
对于MySQL二进制日志:
PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
# 或设置expire_logs_days参数
通过以上措施,您可以有效管理LNMP服务器的日志,确保系统安全运行并便于故障排查。