Ubuntu LNMP如何实现日志分析
导读:Ubuntu LNMP日志分析实操指南 一 日志位置与快速定位 建议先明确各组件日志路径与用途,便于快速排查与统计。 组件 常见日志路径 主要用途 Nginx /var/log/nginx/access.log、/var/...
Ubuntu LNMP日志分析实操指南
一 日志位置与快速定位
- 建议先明确各组件日志路径与用途,便于快速排查与统计。
| 组件 | 常见日志路径 | 主要用途 |
|---|---|---|
| Nginx | /var/log/nginx/access.log、/var/log/nginx/error.log | 访问记录、语法/启动/权限等错误 |
| PHP-FPM | /var/log/php7.x-fpm.log 或 /var/log/php-fpm/error.log(版本与发行版不同) | 运行时错误、进程异常 |
| MySQL/MariaDB | /var/log/mysql/error.log;慢查询日志位置由配置决定 | 启动/运行错误、慢查询 |
| 系统日志 | /var/log/syslog、/var/log/auth.log | 服务启动、认证与安全事件 |
- 快速查看与定位命令示例:
- 实时查看 Nginx 错误日志:
sudo tail -f /var/log/nginx/error.log - 实时查看 Nginx 访问日志:
sudo tail -f /var/log/nginx/access.log - 查看 MySQL 错误日志:
sudo tail -f /var/log/mysql/error.log - 查看 PHP-FPM 日志:
sudo tail -f /var/log/php7.x-fpm.log - 查看系统日志:
sudo tail -f /var/log/syslog、sudo tail -f /var/log/auth.log - 端口占用检查:
sudo netstat -tulnp | grep 80 - Nginx 配置语法检查:
sudo nginx -t
以上路径与命令适用于 Ubuntu 上的常见 LNMP 部署,PHP-FPM 路径会因版本不同略有差异。
- 实时查看 Nginx 错误日志:
二 命令行快速分析范式
- 关键词检索与计数
- 在 Nginx 错误日志中查找“error”并统计次数:
grep "error" /var/log/nginx/error.log | wc -l - 过滤包含指定关键字的行:
grep "error" /var/log/nginx/error.log
- 在 Nginx 错误日志中查找“error”并统计次数:
- 时间范围筛选
- 按日期片段筛选(示例为 2021-01 的日志):
grep "2021-01-[01-31]" /var/log/nginx/error.log
- 按日期片段筛选(示例为 2021-01 的日志):
- 字段提取与统计
- 统计 Nginx 访问日志中 5xx 状态码数量:
awk '$9 ~ /^5[0-9]{ 2} $/ { count++} END { print "5xx count:", count} ' /var/log/nginx/access.log - Top 10 客户端 IP:
awk '{ ips[$1]++} END { for (ip in ips) print ips[ip], ip} ' /var/log/nginx/access.log | sort -nr | head - Top 10 请求路径:
awk '{ paths[$7]++} END { for (p in paths) print paths[p], p} ' /var/log/nginx/access.log | sort -nr | head - 平均响应时间(假设日志包含
$request_time):awk '{ sum+=$NF; n++; } END { print "avg:", sum/n} ' /var/log/nginx/access.log
- 统计 Nginx 访问日志中 5xx 状态码数量:
- 组合检索
- 查找 5xx 且来源为某 IP 的日志:
awk '$9 ~ /^5[0-9]{ 2} $/ & & $1=="203.0.113.10"' /var/log/nginx/access.log
以上命令基于 grep/awk/sed 的组合,可覆盖大多数日常定位与统计需求。
- 查找 5xx 且来源为某 IP 的日志:
三 可视化与集中化分析
- 实时可视化
- 使用 GoAccess 对 Nginx 访问日志做实时分析与可视化:
goaccess /var/log/nginx/access.log -a -o /var/www/html/report.html --log-format=COMBINED
- 使用 GoAccess 对 Nginx 访问日志做实时分析与可视化:
- 集中化平台
- ELK Stack(Elasticsearch + Logstash + Kibana):适合多机统一检索、可视化与告警。
- Graylog:集中日志、灵活路由与告警。
- Fluentd:统一数据收集与转发(可对接 ES)。
以上工具适合访问量增长、多实例或需要长期留存与可视化的场景。
四 日志轮转与保留策略
- 使用 logrotate 管理日志生命周期,防止磁盘被撑满。
- 示例(为 PHP 应用日志配置轮转,可按需调整):
/path/to/your/php/app/logs/*.log { daily missingok rotate 7 compress delaycompress 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 - 通常随系统定时任务自动运行,无需额外启动服务。
通过合理的轮转与压缩策略,可显著降低磁盘占用并保留必要的审计线索。
- 测试配置:
五 常见问题排查路径
- Nginx 无法启动
- 语法检查:
sudo nginx -t - 端口占用:
sudo netstat -tulnp | grep 80 - 查看错误日志:
sudo tail -f /var/log/nginx/error.log
- 语法检查:
- PHP 异常
- 查看 PHP-FPM 日志:
sudo tail -f /var/log/php7.x-fpm.log - 必要时在
php.ini中开启error_reporting、log_errors、error_log并重启 PHP-FPM
- 查看 PHP-FPM 日志:
- MySQL 连接失败
- 查看错误日志:
sudo tail -f /var/log/mysql/error.log - 确认服务已启动并检查应用数据库连接配置
- 查看错误日志:
- 网站访问异常
- 同时比对 access.log(流量与状态码)与 error.log(后端报错)
以上步骤覆盖了最常见的故障面,配合“命令行快速分析”可迅速定位根因。
- 同时比对 access.log(流量与状态码)与 error.log(后端报错)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu LNMP如何实现日志分析
本文地址: https://pptw.com/jishu/781837.html
