在CentOS的LNMP(Linux+Nginx+MySQL+PHP)环境中,日志分析是排查故障、优化性能的核心手段。以下从基础工具、核心日志类型、第三方工具、性能优化闭环四个维度整理具体技巧:
tail -f命令实时监控日志文件的最新变化,适用于快速定位实时问题(如网站崩溃、数据库报错)。例如:tail -f /var/log/nginx/error.log # 实时查看Nginx错误日志 tail -f /var/log/php-fpm/error.log # 实时查看PHP-FPM错误日志 grep命令筛选特定关键词(如“error”“404”“slow query”),快速定位目标日志。例如:grep "500" /var/log/nginx/access.log # 查找Nginx返回500错误的请求 grep "slow query" /var/log/mysql/mysql-slow.log # 查找MySQL慢查询日志中的慢查询 logrotate工具自动管理日志文件大小和数量,避免单个日志文件过大占用磁盘空间。例如,配置PHP日志轮转(/etc/logrotate.d/php):/var/log/php/*.log { daily rotate 7 compress delaycompress missingok notifempty create 0640 www-data adm } 测试配置是否正确:logrotate -d /etc/logrotate.d/php,启用自动轮转:systemctl enable logrotate。awk、sort、uniq等命令统计高频IP、URL、状态码,识别热门资源和异常请求。例如: awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10 grep " 404 " /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr http { log_format slow '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$request_time"'; access_log /var/log/nginx/slow.log slow; set $slowlog_threshold 1s; # 设置慢查询阈值为1秒 } 使用awk筛选慢请求:awk -v threshold=1 '$NF > threshold' /var/log/nginx/slow.log # NF表示最后一列(请求时间) sudo yum install goaccess -y goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED my.cnf(或my.ini),添加以下配置并重启MySQL:[mysqld] slow_query_log = ON slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1 # 慢查询阈值(秒) log_queries_not_using_indexes = ON # 记录未使用索引的查询 mysqldumpslow分析慢查询:mysqldumpslow -s t -t 10 /var/log/mysql/slow.log # 按执行时间排序,显示前10条慢查询 mysqldumpslow -g "SELECT" /var/log/mysql/slow.log # 筛选包含SELECT的慢查询 pt-query-digest(Percona Toolkit)进行深度分析,生成更详细的报告(如执行计划、锁等待时间)。EXPLAIN命令,查看查询执行路径,重点关注以下字段: type:连接类型(理想为range、ref,避免ALL(全表扫描));key:使用的索引(为空则表示未使用索引);rows:预估扫描行数(越大越慢);Extra:额外信息(如Using filesort(文件排序)、Using temporary(临时表),需优化)。php.ini配置,确保错误被记录到文件:error_reporting = E_ALL # 记录所有错误 display_errors = Off # 生产环境关闭浏览器显示错误 log_errors = On # 启用日志记录 error_log = /var/log/php_error.log # 指定日志路径 重启PHP-FPM使配置生效:systemctl restart php-fpm。/var/www/test.php:12),需修改代码修复。Call to undefined function mysql_connect()),需替换为mysqli或PDO。include(): Failed opening 'xxx.php' for inclusion),需检查文件路径或权限。tail -f实时监控PHP错误:tail -f /var/log/php_error.log;grep筛选关键错误:grep "Fatal error" /var/log/php_error.log;logrotate轮转PHP日志(参考Nginx日志轮转配置)。通过以上技巧,可系统性地分析LNMP环境中的各类日志,快速定位问题(如500错误、慢查询、PHP语法错误),并通过可视化工具实现长期性能监控与优化。