LNMP(Linux+Nginx+MySQL+PHP)环境的日志主要分为四类,每类日志的默认存储路径如下:
/var/log/nginx/access.log)、错误日志(/var/log/nginx/error.log);/var/log/mysql/error.log)、慢查询日志(/var/log/mysql/slow.log,需手动启用)、通用查询日志(/var/log/mysql/query.log,需手动启用);/var/log/php-fpm/www-access.log,需在配置中开启)、错误日志(/var/log/php-fpm/www-error.log,需在配置中开启);/var/log/auth.log,记录SSH登录等)、系统日志(/var/log/syslog,记录系统级事件)。日志轮转是LNMP日志管理的核心任务,可使用Ubuntu自带的logrotate工具实现自动切割、压缩、删除旧日志。以下是各组件的轮转配置方法:
/etc/logrotate.d/nginx(需手动创建);/var/log/nginx/*.log {
daily # 每天轮转一次
missingok # 日志文件不存在时不报错
rotate 7 # 保留最近7个轮转日志
compress # 压缩旧日志(如access.log.1.gz)
delaycompress # 延迟压缩(本次轮转不压缩上一次的日志)
notifempty # 日志为空时不轮转
create 0640 root adm # 创建新日志文件,权限0640,属主root,属组adm
sharedscripts # 所有日志轮转完成后执行postrotate脚本
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` # 向Nginx主进程发送信号,重新打开日志文件
endscript
}
sudo logrotate -d /etc/logrotate.d/nginx(模拟运行,不实际执行);sudo logrotate -f /etc/logrotate.d/nginx(强制执行)。/etc/logrotate.d/mysql(Ubuntu默认已存在);/var/log/mysql/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 mysql adm
sharedscripts
postrotate
[ -f /var/run/mysqld/mysqld.pid ] && kill -USR1 `cat /var/run/mysqld/mysqld.pid`
endscript
}
log-bin),需额外配置expire_logs_days参数(在/etc/mysql/mysql.conf.d/mysqld.cnf中),设置二进制日志的自动过期天数(如expire_logs_days = 7),避免二进制日志占用过多磁盘空间。/etc/logrotate.d/php-fpm(需手动创建);/var/log/php-fpm/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 www-data adm # PHP-FPM进程属主通常为www-data
sharedscripts
postrotate
[ -f /var/run/php-fpm/php-fpm.pid ] && kill -USR2 `cat /var/run/php-fpm/php-fpm.pid` # 向PHP-FPM主进程发送信号,重新打开日志文件
endscript
}
tail -f /var/log/nginx/access.log(Nginx访问日志)、tail -f /var/log/mysql/error.log(MySQL错误日志);grep 'ERROR' /var/log/mysql/error.log(查找MySQL错误日志中的“ERROR”关键词)、grep '404' /var/log/nginx/access.log(查找Nginx访问日志中的404请求);awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr(统计Nginx访问日志中的IP访问频率,找出高频访问IP)。sudo apt install goaccess
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
访问http://服务器IP/report.html即可查看可视化报告。nginx_exporter)、MySQL(通过mysqld_exporter)的指标,设置告警规则(如Nginx请求量突增、MySQL连接数超标),通过邮件/Slack发送告警。root、属组为adm,PHP-FPM日志属主为www-data、属组为adm),避免未授权访问;access_log中避免记录Authorization头),防止密码等敏感信息泄露;rsync或scp),避免本地磁盘损坏导致数据丢失;general_log设为OFF,仅在调试时开启;Nginx的error_log设为warn,避免记录过多调试信息),减少不必要的磁盘占用。