温馨提示×

LNMP在Ubuntu上的日志分析方法

小樊
41
2025-11-08 16:32:38
栏目: 智能运维

LNMP在Ubuntu上的日志分析与排查指南

一、核心日志文件位置

LNMP架构(Linux+NGINX+MySQL+PHP)在Ubuntu上的日志文件集中存储于/var/log目录,各组件日志路径如下:

  • Nginx:访问日志/var/log/nginx/access.log(记录用户请求详情)、错误日志/var/log/nginx/error.log(记录Nginx自身及代理错误);
  • MySQL/MariaDB:错误日志/var/log/mysql/error.log(记录数据库启动、运行错误)、慢查询日志(需手动开启,记录执行时间超阈值的SQL);
  • PHP-FPM:错误日志/var/log/php7.x-fpm.logx为PHP版本号,如7.4、8.1,记录PHP运行时错误);
  • 系统认证/var/log/auth.log(记录SSH登录、sudo使用等认证事件)。

二、常用命令行分析工具

1. 实时查看日志

  • tail -f /var/log/nginx/error.log:实时跟踪Nginx错误日志的最新条目,便于快速定位正在发生的错误;
  • journalctl -u nginx -f:通过systemd查看Nginx服务的实时日志(支持过滤特定服务)。

2. 关键字搜索与过滤

  • 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脚本执行超报错。

3. 日志统计与排序

  • 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名)。

三、针对组件的具体分析场景

1. Nginx日志分析

  • 网站无法访问:检查error.log中的“bind() to 0.0.0.0:80 failed (98: Address already in use)”错误,提示端口被占用,可通过netstat -tulnp | grep 80确认占用进程并终止;
  • 静态资源加载失败:查看access.log中的404错误,核对Nginx配置文件中的root指令是否指向正确的静态资源目录;
  • 502 Bad Gateway:检查error.log中的“upstream prematurely closed connection”错误,可能因PHP-FPM服务未启动或端口配置错误(需确认fastcgi_pass指向的PHP-FPM地址正确)。

2. MySQL日志分析

  • 数据库连接失败:查看error.log中的“Access denied for user ‘root’@‘localhost’”错误,确认用户名、密码是否正确,或用户权限是否足够(使用GRANT语句授权);
  • SQL执行慢:开启慢查询日志(在my.cnf中设置slow_query_log=1long_query_time=2),通过mysqldumpslow -s t /var/log/mysql/slow.log分析慢SQL,优化查询语句或添加索引。

3. PHP日志分析

  • PHP语法错误:开启display_errorsphp.inidisplay_errors = On)和log_errorslog_errors = On),设置error_log路径,查看PHP错误日志中的语法错误信息(如缺少分号、括号不匹配);
  • 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则轮转)等参数;
  • 远程日志:将关键日志(如Nginx、MySQL错误日志)发送到远程日志服务器(如ELK、Graylog),实现集中存储与分析,提升日志安全性;
  • 定期清理:通过cron任务定期清理超过30天的旧日志(如find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;),释放磁盘空间。

0