Nginx日志分析001

为了分析Nginx日志,通常需要先了解日志格式,然后通过命令行工具或专业工具提取关键信息。以下是完整的操作指南:


1. 确认日志格式

检查Nginx配置文件(如/etc/nginx/nginx.conf),找到log_format定义。例如:

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

如果日志是JSON格式(例如使用escape=json),可能需要使用jq工具解析。


2. 常用命令行分析示例

(1) 统计访问量最多的IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
(2) 查看最常见的请求URL
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
(3) 列出所有HTTP错误(如4xx/5xx)
awk '$9 >= 400 {print $9, $7, $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
(4) 统计流量消耗最大的请求
awk '{sum[$7]+=$10} END {for (url in sum) print sum[url], url}' /var/log/nginx/access.log | sort -nr | head -n 10
(5) 分析用户浏览器分布
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

3. 使用jq分析JSON格式日志

如果日志是JSON格式(需配置log_format启用escape=json),例如:

log_format json_analytics escape=json '{'
    '"time_local":"$time_local",'
    '"remote_addr":"$remote_addr",'
    '"request":"$request",'
    '"status":"$status",'
    '"body_bytes_sent":"$body_bytes_sent",'
    '"user_agent":"$http_user_agent"'
'}';
(1) 安装jq(若未安装)
# CentOS 7/8 启用EPEL后安装
yum install -y epel-release && yum install -y jq
(2) 提取关键字段
cat /var/log/nginx/access.log | jq -r '[.time_local, .remote_addr, .request, .status] | @tsv'
(3) 统计状态码分布
cat /var/log/nginx/access.log | jq -r '.status' | sort | uniq -c | sort -nr

4. 使用专业工具分析

(1) GoAccess(实时可视化分析)
# 安装GoAccess
yum install -y goaccess

# 生成HTML报告
goaccess /var/log/nginx/access.log --log-format=COMBINED -o report.html
(2) ELK Stack(长期日志管理)
  • 使用Elasticsearch、Logstash、Kibana搭建日志分析平台,适合大规模日志处理。

5. 高级场景分析

(1) 识别恶意爬虫
grep -E 'Googlebot|Baiduspider|YandexBot' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq
(2) 分析慢请求(需日志记录响应时间)

如果配置了$request_time字段:

awk '{print $NF, $7}' /var/log/nginx/access.log | sort -nr | head -n 20

6. 自动化脚本示例

保存以下脚本为nginx_analytics.sh,赋予执行权限后运行:

#!/bin/bash
LOG_PATH="/var/log/nginx/access.log"

echo "Top 10 IPs:"
awk '{print $1}' $LOG_PATH | sort | uniq -c | sort -nr | head -n 10

echo -e "\nTop 10 URLs:"
awk '{print $7}' $LOG_PATH | sort | uniq -c | sort -nr | head -n 10

echo -e "\nStatus Code Distribution:"
awk '{print $9}' $LOG_PATH | sort | uniq -c | sort -nr

7. 注意事项

  • 权限问题:若日志文件权限受限,使用sudo或切换为root用户。
  • 日志轮转:检查是否启用了logrotate,避免分析旧日志(如access.log.1)。
  • 自定义字段:根据实际日志格式调整命令中的字段位置(如$7表示URL,可能因配置不同而变化)。

通过以上方法,你可以快速定位Nginx服务器的性能瓶颈、安全威胁或用户行为模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩公子的Linux大集市

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值