LNMP(Linux+Nginx+MySQL+PHP)环境中,日志管理是保障系统稳定、快速定位问题的核心环节。以下从Nginx、MySQL、PHP-FPM三大组件的日志管理(包括配置、轮转、分析)及集中化管理方面展开说明:
Nginx的日志主要分为访问日志(记录客户端请求详情)和错误日志(记录服务器运行错误),默认路径为/var/log/nginx/access.log和/var/log/nginx/error.log。
/etc/nginx/nginx.conf或在虚拟主机配置文件(如/etc/nginx/conf.d/default.conf)中调整日志设置。可自定义日志格式(如添加请求时间、响应时间等字段)、日志级别(如error、warn、info)及路径。例如:http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" rt=$request_time';
access_log /var/log/nginx/access.log main; # 使用自定义格式
error_log /var/log/nginx/error.log warn; # 设置错误日志级别为warn
}
logrotate工具实现自动切割,避免日志文件过大。创建/etc/logrotate.d/nginx配置文件,内容如下:/var/log/nginx/*.log {
daily # 每天切割
rotate 7 # 保留7份旧日志
compress # 压缩旧日志(如access.log.1.gz)
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 日志不存在时不报错
notifempty # 日志为空时不切割
create 644 root root # 新日志文件权限
sharedscripts # 所有日志切割完成后执行脚本
postrotate
kill -USR1 `cat /var/run/nginx.pid` 2>/dev/null || true # 通知Nginx重新打开日志文件
endscript
}
goaccess工具实现实时可视化分析。安装后执行以下命令生成HTML报告:goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/nginx_report.html
通过浏览器访问http://服务器IP/nginx_report.html即可查看访问统计(如PV/UV、请求时间分布等)。MySQL的日志主要包括错误日志(记录启动/停止错误)、慢查询日志(记录执行慢的SQL)、通用查询日志(记录所有SQL,生产环境慎开)及二进制日志(记录数据变更,用于复制/恢复)。
/etc/my.cnf(或/etc/mysql/my.cnf)文件,开启所需日志。例如:[mysqld]
log_error = /var/log/mysql/mysql_error.log # 错误日志路径
slow_query_log = 1 # 开启慢查询日志
slow_query_log_file = /var/log/mysql/mysql_slow.log
long_query_time = 1 # 慢查询阈值(秒)
log_queries_not_using_indexes = 1 # 记录未使用索引的查询
重启MySQL使配置生效:systemctl restart mysqld。logrotate管理MySQL日志,创建/etc/logrotate.d/mysql配置文件:/var/log/mysql/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 mysql mysql
sharedscripts
postrotate
systemctl restart mysqld >/dev/null 2>&1 || true
endscript
}
pt-query-digest(Percona Toolkit工具包中的命令)分析慢查询日志,找出性能瓶颈。例如:pt-query-digest /var/log/mysql/mysql_slow.log > slow_report.txt
报告中会列出最耗时的SQL语句、执行次数、平均执行时间等信息。PHP-FPM的日志主要记录PHP进程的运行错误、慢请求及访问信息,默认路径为/var/log/php-fpm/error.log(错误日志)和/var/log/php-fpm/www-access.log(访问日志,需手动开启)。
/etc/php-fpm.d/www.conf文件(PHP-FPM子进程池配置),开启日志记录。例如:[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
error_log = /var/log/php-fpm/error.log # 错误日志路径
log_level = notice # 日志级别(notice/warn/error)
slowlog = /var/log/php-fpm/slow.log # 慢请求日志路径
request_slowlog_timeout = 1s # 慢请求阈值(秒)
catch_workers_output = yes # 捕获工作进程输出(便于调试)
重启PHP-FPM使配置生效:systemctl restart php-fpm。/etc/logrotate.d/php-fpm配置文件,内容如下:/var/log/php-fpm/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
sharedscripts
postrotate
kill -USR2 `cat /var/run/php-fpm/php-fpm.pid` 2>/dev/null || true
endscript
}
Monolog库(PHP第三方日志库)实现更灵活的日志记录(如分级存储、异步写入)。通过Composer安装后,在PHP代码中配置:require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('app');
$log->pushHandler(new StreamHandler('/var/log/php/app.log', Logger::ERROR)); // 错误日志写入指定文件
$log->error('This is a PHP error message'); // 记录错误日志
这样可将PHP错误日志与PHP-FPM日志分离,便于集中管理。对于多台服务器的LNMP集群,建议使用集中式日志系统(如ELK Stack:Elasticsearch+Logstash+Kibana、Graylog)收集、存储和分析日志。基本流程:
Filebeat(轻量级日志采集工具),配置采集Nginx、MySQL、PHP-FPM的日志路径;Logstash(日志处理管道),进行过滤、解析(如提取请求时间、SQL语句);Elasticsearch(分布式搜索引擎),便于快速检索;Kibana(可视化工具)实现日志的实时展示(如访问趋势、慢查询分布、错误统计)。集中式日志管理可大幅降低日志分析难度,尤其适合大规模生产环境。
通过以上步骤,可实现CentOS下LNMP环境的日志规范化配置、自动化轮转、高效分析,提升系统运维效率和稳定性。