温馨提示×

Debian Nginx 日志如何查看分析

小樊
34
2025-12-25 18:17:38
栏目: 智能运维

Debian 上 Nginx 日志的查看与分析指南

一 定位日志位置与确认配置

  • 默认路径:Nginx 日志通常在 /var/log/nginx/,常见文件为 access.logerror.log。若目录或文件名被自定义,可通过以下方式确认:
    • 执行 nginx -t 检查配置语法并查看加载的配置文件路径;随后在配置中搜索 access_logerror_log 指令。
    • 通过进程反查打开的日志文件:lsof -p $(pidof nginx | head -n 1) | grep log
    • 若使用 systemd 管理 Nginx,可用 journalctl -u nginx -f 实时查看服务日志(适合容器或无文件日志场景)。

二 快速查看与实时监控

  • 实时查看错误日志(排错首选):tail -f /var/log/nginx/error.log
  • 实时查看访问日志:tail -f /var/log/nginx/access.log
  • 查看最近 N 行:tail -n 50 /var/log/nginx/error.log
  • 按时间过滤 systemd 日志:journalctl -u nginx --since “2025-12-25 00:00:00” --until “2025-12-25 12:00:00”

三 常用命令行分析示例 以下示例基于常见的 Combined 日志格式(字段顺序以实际为准):

  • Top 10 来源 IP
    • awk ‘{print $1}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
  • Top 10 请求路径
    • awk ‘{print $7}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
  • 状态码分布
    • awk ‘{print $9}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr
  • 指定时间段的 404 请求
    • awk ‘$4 >= “[01/Dec/2025:00:00:00” && $4 <= “[01/Dec/2025:23:59:59” && $9 == 404 {print $0}’ /var/log/nginx/access.log
  • 上一分钟请求总量
    • date=$(date -d ‘-1 minute’ +‘%d/%b/%Y:%H:%M’); awk -v d=“$date” ‘$4 ~ d {c++} END {print c}’ /var/log/nginx/access.log
  • 每个 URL 的访问次数与总发送字节数
    • awk ‘{a[$7]++; size[$7]+=$10} END {for(v in a) print a[v], v, size[v]}’ /var/log/nginx/access.log
  • 说明:若启用了耗时字段(如 $request_time$upstream_response_time),可按耗时排序定位慢请求,例如:awk ‘{print $10, $7}’ access.log | sort -nr | head

四 可视化与集中化分析

  • GoAccess 快速报告
    • 安装:sudo apt-get install goaccess
    • 生成 HTML 报告:goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
    • 实时 HTML(需指定端口):goaccess /var/log/nginx/access.log --log-format=COMBINED --real-time-html --port=7890 -o /var/www/html/realtime.html
    • 可结合 –ignore-crawlers–geoip-database 等参数过滤与增强分析。
  • 集中式方案
    • ELK Stack(Elasticsearch + Logstash + Kibana) 适合海量日志的采集、检索与可视化。
    • 系统级报告:logwatch 可生成日报/周报,例如:sudo logwatch --output html --range yesterday --detail high

五 错误日志定位与常见问题处理

  • 核心要点
    • 错误日志是排错核心,优先查看 error.log;必要时在 http/server/location 中设置 error_log /var/log/nginx/error.log warn;,排查完成后再恢复合适级别(生产慎用 debug)。
    • 典型错误与处置:
      • 502 Bad Gateway / upstream timed out:检查上游(如 PHP-FPM/Node.js)是否运行、端口连通性、以及防火墙;必要时调整 proxy_connect_timeout / proxy_read_timeout
      • Permission denied:核对静态文件/目录权限与属主(如 www-data:www-data),并排查 SELinux/AppArmor 等安全模块限制。
      • Segmentation fault:开启 worker_rlimit_core 生成 core dump,使用 gdb /usr/sbin/nginx core.pid 分析回溯;编译时加入 -g 便于调试。
    • 辅助定位
      • 配置语法校验:nginx -t
      • 进程跟踪:对 Worker 执行 strace -p -s 1024 -e trace=file,network 观察文件访问与网络连接失败原因。

0