LNMP在Ubuntu上的日志分析与排查指南
LNMP架构(Linux+NGINX+MySQL+PHP)在Ubuntu上的日志文件集中存储于/var/log目录,各组件日志路径如下:
/var/log/nginx/access.log(记录用户请求详情)、错误日志/var/log/nginx/error.log(记录Nginx自身及代理错误);/var/log/mysql/error.log(记录数据库启动、运行错误)、慢查询日志(需手动开启,记录执行时间超阈值的SQL);/var/log/php7.x-fpm.log(x为PHP版本号,如7.4、8.1,记录PHP运行时错误);/var/log/auth.log(记录SSH登录、sudo使用等认证事件)。tail -f /var/log/nginx/error.log:实时跟踪Nginx错误日志的最新条目,便于快速定位正在发生的错误;journalctl -u nginx -f:通过systemd查看Nginx服务的实时日志(支持过滤特定服务)。grep "error" /var/log/mysql/error.log:筛选MySQL错误日志中包含“error”的行,快速定位数据库错误;grep "404" /var/log/nginx/access.log:统计Nginx访问日志中404错误的数量,分析用户请求的资源缺失问题;grep -i "timeout" /var/log/php-fpm.log:忽略大小写搜索PHP-FPM日志中的“timeout”关键字,排查PHP脚本执行超报错。grep "error" /var/log/nginx/error.log | wc -l:统计Nginx错误日志中“error”的总行数,量化错误频率;sort /var/log/nginx/access.log | uniq -c | sort -nr:对访问日志中的IP地址排序,统计访问量最高的IP(配合head可查看前10名)。error.log中的“bind() to 0.0.0.0:80 failed (98: Address already in use)”错误,提示端口被占用,可通过netstat -tulnp | grep 80确认占用进程并终止;access.log中的404错误,核对Nginx配置文件中的root指令是否指向正确的静态资源目录;error.log中的“upstream prematurely closed connection”错误,可能因PHP-FPM服务未启动或端口配置错误(需确认fastcgi_pass指向的PHP-FPM地址正确)。error.log中的“Access denied for user ‘root’@‘localhost’”错误,确认用户名、密码是否正确,或用户权限是否足够(使用GRANT语句授权);my.cnf中设置slow_query_log=1、long_query_time=2),通过mysqldumpslow -s t /var/log/mysql/slow.log分析慢SQL,优化查询语句或添加索引。display_errors(php.ini中display_errors = On)和log_errors(log_errors = On),设置error_log路径,查看PHP错误日志中的语法错误信息(如缺少分号、括号不匹配);error.log中的“Maximum execution time of 30 seconds exceeded”错误,调整max_execution_time参数(如设置为60秒)或优化脚本逻辑(减少循环次数、优化数据库查询)。logrotate工具自动管理日志文件(避免单个日志文件过大),编辑/etc/logrotate.d/nginx(Nginx示例),设置rotate 7(保留7天日志)、compress(压缩旧日志)、size 100M(单文件超过100MB则轮转)等参数;cron任务定期清理超过30天的旧日志(如find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;),释放磁盘空间。