插件窝 干货文章 Nginx日志分析与统计,了解网站访问情况

Nginx日志分析与统计,了解网站访问情况

使用 日志 分析 http 429    来源:    2025-04-02

Nginx日志分析与统计指南

一、Nginx日志基础

Nginx默认的访问日志格式(通常在nginx.conf中定义)如下:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

二、常用分析工具

1. 使用awk进行基础分析

# 统计访问量前10的IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

# 统计HTTP状态码
awk '{print $9}' access.log | sort | uniq -c | sort -rn

# 统计最频繁的URL请求
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20

2. 使用GoAccess实时分析

GoAccess是一个开源的实时Web日志分析工具:

# 安装
sudo apt-get install goaccess  # Ubuntu/Debian
sudo yum install goaccess     # CentOS/RHEL

# 基本使用
goaccess access.log -a

# 生成HTML报告
goaccess access.log -o report.html --log-format=COMBINED

3. 使用AWStats

AWStats是一个功能强大的日志分析工具:

  1. 安装AWStats
  2. 配置AWStats解析Nginx日志
  3. 生成报告

三、高级分析技巧

1. 使用ELK Stack(Elasticsearch, Logstash, Kibana)

  1. 使用Logstash解析Nginx日志
  2. 存储到Elasticsearch
  3. 使用Kibana进行可视化

示例Logstash配置:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

2. 使用Grafana+Loki/Prometheus

  1. 使用Promtail收集日志到Loki
  2. 使用Grafana进行可视化查询

四、关键指标分析

1. 流量分析

  • 总PV/UV
  • 流量趋势(按小时/天/月)
  • 热门页面

2. 用户分析

  • 地理位置分布
  • 设备类型(PC/移动)
  • 浏览器类型

3. 性能分析

  • 慢请求(响应时间长的URL)
  • 错误率(4xx/5xx)
  • 带宽使用情况

4. 安全分析

  • 异常访问模式
  • 扫描/攻击行为
  • 恶意爬虫识别

五、自动化监控方案

  1. 设置日志轮转(使用logrotate)
  2. 配置告警规则(如错误率突增)
  3. 定期生成报告(日报/周报/月报)

六、日志优化建议

  1. 使用JSON格式日志便于解析:
log_format json_combined escape=json
  '{'
    '"time_local":"$time_local",'
    '"remote_addr":"$remote_addr",'
    '"remote_user":"$remote_user",'
    '"request":"$request",'
    '"status": "$status",'
    '"body_bytes_sent":"$body_bytes_sent",'
    '"http_referrer":"$http_referer",'
    '"http_user_agent":"$http_user_agent",'
    '"http_x_forwarded_for":"$http_x_forwarded_for",'
    '"request_time":"$request_time"'
  '}';
  1. 分离不同业务的日志
  2. 考虑使用syslog集中收集日志

通过以上方法,您可以全面了解网站的访问情况,及时发现性能瓶颈和安全问题,为优化网站提供数据支持。