温馨提示×

centos lnmp日志如何分析

小樊
34
2025-12-23 15:05:48
栏目: 智能运维

CentOS 上 LNMP 日志分析与排查实操

一 日志位置与关键字段

  • 建议先明确各组件日志路径与核心字段,便于后续检索与分析。
组件 常见日志路径 关键字段/用途
Nginx /var/log/nginx/access.log/var/log/nginx/error.log access:客户端 IP、时间、请求方法、URI、状态码、响应时间、Referer、User-Agent;error:错误级别、文件、行号、原因
MySQL/MariaDB 错误日志:/var/log/mysqld.log/var/log/mysql/error.log;慢查询日志:由配置决定(常见如 /var/log/mysql/mysql-slow.log/var/lib/mysql/hostname-slow.log 慢查询:执行时间、锁等待、扫描行数、SQL 指纹;错误:启动失败、崩溃、告警
PHP-FPM /var/log/php-fpm/error.log 致命/语法/警告错误、文件与行号、调用栈
应用日志 由应用配置(如 /var/www/ 下自定义目录) 业务错误、异常堆栈、关键业务事件

以上路径与字段为常见默认位置与内容,实际以你的发行版与配置为准。


二 Nginx 访问日志分析

  • 实时查看与排查
    • 实时跟踪最新请求与错误:tail -f /var/log/nginx/access.log;tail -f /var/log/nginx/error.log
  • 常用指标与命令
    • PV/UV(按天)
      • 统计当天 PV:awk ‘{print $4}’ access.log | awk -F’[: ]’ ‘{print $1" “$2” "$3}’ | sort | uniq -c | sort -nr
      • 统计当天 UV:awk ‘{print $1}’ access.log | sort | uniq | wc -l
    • Top N IP、Top N URL、状态码分布
      • Top 10 IP:awk ‘{a[$1]++}END{for(v in a)print a[v],v}’ access.log | sort -nr | head
      • Top 10 URL:awk ‘{print $7}’ access.log | sort | uniq -c | sort -nr | head
      • 状态码分布:awk ‘{a[$9]++}END{for(v in a)print a[v],v}’ access.log | sort -nr
  • 可视化与集中化
    • 使用 GoAccess 生成 HTML 报告:goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
    • 使用 ELK(Elasticsearch+Logstash+Kibana)集中采集、检索与可视化(适合多机与长期留存)。

三 MySQL 慢查询与错误日志分析

  • 启用与确认慢查询日志
    • 查看状态:SHOW VARIABLES LIKE ‘%slow_query_log%’; SHOW VARIABLES LIKE ‘%long_query_time%’;
    • 动态开启(重启失效):SET GLOBAL slow_query_log=‘ON’; SET GLOBAL long_query_time=1;
    • 永久生效(/etc/my.cnf 的 [mysqld] 段):slow_query_log=1;slow_query_log_file=/var/log/mysql/mysql-slow.log;long_query_time=1;log_queries_not_using_indexes=1
    • 重启:systemctl restart mysqld;日志路径亦可用 SHOW VARIABLES LIKE ‘%slow_query_log_file%’;
  • 分析慢查询
    • mysqldumpslow:按执行时间取 Top N
      • mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
    • pt-query-digest(Percona Toolkit):更强大的聚合与指纹分析
      • pt-query-digest /var/log/mysql/mysql-slow.log --limit 10 --order-by Query_time_sum
  • 优化闭环
    • 对问题 SQL 使用 EXPLAIN 检查是否走索引、扫描行数、是否出现 Using filesort/Using temporary 等;必要时增加或调整索引、改写 SQL、避免 SELECT *、减少大表扫描与锁等待。

四 PHP 与 PHP-FPM 错误日志分析

  • 定位日志文件
    • PHP-FPM 错误日志:/var/log/php-fpm/error.log
    • 若 PHP 以模块方式运行,也可能写入 Web 服务错误日志(如 Nginx 的 error.log)
  • 常见错误类型与排查
    • Parse error(语法错误)、Fatal error(致命错误)、Warning/Notice(警告/提示)
    • 快速检索:tail -f /var/log/php-fpm/error.log;grep -i “Fatal error” /var/log/php-fpm/error.log
    • 结合文件与行号修复代码,必要时开启 Xdebug 获取堆栈与变量状态,便于定位复杂问题。

五 日志轮转 监控与告警

  • 日志轮转
    • 使用 logrotate 管理日志生命周期(压缩、保留份数、按日/小时轮转),为 Nginx、PHP-FPM、应用日志分别配置,避免磁盘被撑满;示例与做法见 logrotate 配置与 PHP 应用轮转实践。
  • 实时监控与告警
    • 命令行实时:tail -f 配合 grep/sed/awk 做关键字与模式告警
    • 监控平台:部署 Prometheus + GrafanaZabbix,对错误率、响应时延、慢查询数、磁盘使用率等设置阈值告警,联动故障排查流程。

0