在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语法错误),并通过可视化工具实现长期性能监控与优化。