日志分析是LNMP(Linux+Nginx+MySQL+PHP)环境运维的核心环节,能帮助快速定位故障(如502错误、慢查询)、优化性能(如访问延迟、数据库查询效率)及保障安全(如异常登录、恶意请求)。以下是针对CentOS系统的具体实施方法:
首先需明确LNMP各组件的日志路径,这是分析的基础:
/var/log/nginx/access.log,记录用户请求详情)、错误日志(/var/log/nginx/error.log,记录Nginx自身及代理错误);/var/log/php-fpm/error.log,记录PHP脚本执行错误;部分系统可能在/var/log/php7.x-fpm.log);/var/log/mysql/error.log,记录数据库启动、连接及查询错误)、慢查询日志(/var/log/mysql/slow.log,记录执行时间超过阈值的查询);/var/log/messages(系统通用日志)、/var/log/secure(安全相关日志,如SSH登录、sudo使用)。使用Linux原生命令可快速定位关键信息:
tail -f /var/log/nginx/error.log(实时跟踪Nginx错误日志);journalctl -f(实时查看systemd管理的所有日志,包括Nginx、PHP-FPM、MySQL)。grep "ERROR" /var/log/nginx/error.log(查找Nginx错误日志中的“ERROR”条目);grep "502" /var/log/nginx/access.log(查找返回502状态的请求)。wc -l /var/log/nginx/access.log(统计Nginx访问日志的总行数,反映访问量);grep "POST" /var/log/nginx/access.log | wc -l(统计POST请求的数量)。journalctl --since "2025-10-22 10:00:00" --until "2025-10-22 11:00:00"(查看指定时间段的系统日志)。日志文件长期积累会占用大量磁盘空间,需通过logrotate工具定期轮转(压缩、删除旧日志):
/etc/logrotate.d/nginx、/etc/logrotate.d/mysql),默认每日轮转、保留7天。gzip),可编辑对应配置文件或新增配置。例如,为PHP应用日志添加轮转规则:sudo nano /etc/logrotate.d/php-app
内容如下:/var/log/php-app/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/php-fpm/php-fpm.sock ]; then
kill -USR2 $(cat /var/run/php-fpm/php-fpm.pid)
fi
endscript
}
测试配置是否正确:sudo logrotate -d /etc/logrotate.d/php-app(模拟运行);启用自动轮转:sudo systemctl enable logrotate && sudo systemctl start logrotate。grep -i "fail\|error\|warning" /var/log/syslog # 查找系统日志中的失败、错误、警告信息
grep "max_execution_time" /var/log/php-fpm/error.log # 查找PHP脚本超报错
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10 # 统计访问量Top10的URL
/etc/my.cnf中添加slow_query_log=1、long_query_time=2),然后使用mysqldumpslow工具分析:mysqldumpslow -s c /var/log/mysql/slow.log # 按执行次数排序慢查询
mysqldumpslow -s t /var/log/mysql/slow.log # 按执行时间排序慢查询
grep "upstream timed out" /var/log/nginx/error.log # Nginx超时日志
grep "WARNING: [pool www] child" /var/log/php-fpm/error.log # PHP-FPM子进程异常
对于大规模或复杂的日志分析,可使用以下工具提升效率:
sudo yum install elasticsearch)、Logstash(sudo yum install logstash)、Kibana(sudo yum install kibana);logstash.conf,定义输入、过滤、输出规则);http://服务器IP:5601)创建仪表板。sudo yum install goaccess
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --real-time-html # 生成实时报告
/etc/logwatch/conf/services.conf启用所需服务(如nginx、mysql),设置邮件接收地址(MailTo = root),然后每日运行logwatch即可收到报告。通过以上方法,可全面覆盖LNMP环境的日志分析需求,从基础排查到高级优化均能高效应对。