使用Linux命令分析Nginx日志文件

本文介绍了一系列日志分析的实用命令,包括统计IP访问次数、访问量大于特定次数的IP、访问IP次数并排序、某时间段内访问最多的IP、上一分钟访问量、访问最多的页面、每个URL的数量和返回内容总大小、每个IP访问状态码数量、访问IP的404状态次数、访问URL的PV等。此外,还提供了查询特定时间段内访问日志的方法。

常见日志格式:

$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "

$http_referer" "$http_user_agent" "$http_x_forwarded_for"'

 

统计 IP 访问次数:

# awk '{a[$1]++}END{for(v in a)print v,a[v]}' access.log

 

统计访问量大于 100 次的 IP:

# awk '{a[$1]++}END{for(v in a){if(a[v]>100)print v,a[v]}}' access.log

 

统计访问 IP 次数并排序取前 top10:

# awk '{a[$1]++}END{for(v in a)print v,a[v] |"sort -k2 -nr |head -10"}' access.log

 

统计某时间段访问最多的 IP:

# awk '$4>="[02/Jan/2017:00:02:00" && $4<="[02/Jan/2017:00:03:00"{a[$1]++}END{for(v in a)print v,a[v]}' access.log

 

统计上一分钟访问量:

# date=$(date -d '-1 minute' +%d/%d/%Y:%H:%M)

# awk -vdate=$date '$4~date{c++}END{print c}' access.log

统计访问最多的 10 个页面:

# awk '!/.js|.css|.png|.gif|.svg|ImageEngine|.jpg|.jpeg|.mp4/{a[$7]++}END{for(v in a) print v,a[v] | "sort -k2 -nr|head -10"}' access.log

# awk '{a[$7]++}END{for(v in a)print v,a[v] |"sort -k2 -nr|head -n 10"}’ access.log

 

统计每个 URL 数量和返回内容总大小:

# awk '{a[$7]++;size[$7]+=$10}END{for(v in a)print a[v],v,size[v]}' access.log

 

统计每个 IP 访问状态码数量:

# awk '{a[$1" "$9]++}END{for(v in a)print v,a[v]}' access.log

 

统计访问 IP 是 404 状态次数:

# awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print v,a[v]}' access.log

 

统计访问URL统计PV:

# awk '{print $7}' /usr/local/nginx/logs/access.log|wc -l

# awk '{print $1}' access.log|sort|uniq -c

根据访问IP统计UV:

# awk '{print $1}' /usr/local/nginx/logs/access.log|sort | uniq -c |wc -l

查询访问最频繁的IP

# awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|head -n 50

查询访问最频繁的URL

# awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|head -n 50

nginx当前并发数

netstat -ant | grep :80 | awk '{print $5}' | awk -F":" '{print $1}'| sort | uniq -c | sort -r -n | awk 'BEGIN{total=0}{total+=$1}END{print total}'

 

6、查询时间段内的访问日志(404),统计出访问IP及其访问次数

tac access.log | grep "HTTP/1.1\" 404" | awk -v st="15/Oct/2018:14:58:47" -v et="15/Oct/2018:14:59:47" '{t=substr($4,RSTART+2,21);if(t>st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr

 

其他命令

 ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total size is",sum}'                    //计算文件大小

 

命令使用实例

tac dossier_access_2020-05-14.log | grep "/rest/" | awk -v st="12/May/2020:00:00:01" -v et="13/May/2020:00:00:01" '{t=substr($4,RSTART+2,21);if(t>st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr

tac dossier_access_2020-05-14.log | grep "/rest/" | awk -v st="13/May/2020:00:00:01" -v et="14/May/2020:00:00:01" '{t=substr($4,RSTART+2,21);if(t>st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr

tac dossier_access_2020-05-14.log | grep "HTTP/1.1\" " | awk -v st="14/May/2020:00:00:01" -v et="15/May/2020:00:00:01" '{t=substr($4,RSTART+2,21);if(t>st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr

 

 

 

 

 

 

 

 

### 分析 Nginx 日志文件的方法 在 Linux 环境下,Nginx 生成的日志文件是系统运行状态的重要记录。通过分析这些日志文件,可以排查问题或获取统计信息。以下是几种常见的方法和工具。 #### 使用 ngxtop 实时分析 Nginx 日志 `ngxtop` 是一个强大的实时日志分析工具,能够解析多种 Nginx 日志格式,包括默认的 `combined` 格式以及用户自定义的格式。在使用 `ngxtop` 时,请确保指定正确的日志格式,以确保正确解析日志文件[^1]。 - **解析默认格式的日志**: ```bash ngxtop ``` - **解析自定义格式的日志**: 如果 Nginx日志格式被修改过,则需要在命令中指定正确的日志格式。 ```bash ngxtop --format='[$time_local] $status "$request" $body_bytes_sent' ``` - **从远程服务器解析日志**: 可以通过 SSH 连接到远程服务器并实时解析日志。 ```bash ssh user@remote_server tail -f /var/log/nginx/access.log | ngxtop -f common ``` #### 手动分析 Nginx 日志 对于简单的分析需求,可以直接使用命令行工具手动分析日志文件。 - **查看日志内容**: 使用 `tail` 或 `cat` 命令查看日志文件的内容。 ```bash tail -f /var/log/nginx/access.log ``` - **搜索特定关键字**: 使用 `grep` 命令日志文件中查找特定关键字。 ```bash grep "404" /var/log/nginx/access.log # 查找所有返回 404 的请求 ``` - **统计访问频率**: 使用 `awk` 和 `sort` 统计每个 IP 地址的访问次数。 ```bash awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr ``` #### 使用 ELK Stack 分析 Nginx 日志 ELK Stack(Elasticsearch、Logstash、Kibana)是一个流行的日志管理和分析解决方案,适用于大规模日志处理。它可以收集、存储和可视化 Nginx 日志数据。 - **配置 Logstash**: 在 Logstash 配置文件中定义 Nginx 日志的输入、过滤器和输。 ```bash input { file { path => "/var/log/nginx/access.log" start_position => "beginning" } } filter { grok { match => { "message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:agent}"' } } } output { elasticsearch { hosts => ["localhost:9200"] } } ``` - **启动 Logstash**: 启动 Logstash 并开始处理日志数据。 ```bash logstash -f /etc/logstash/conf.d/nginx.conf ``` - **使用 Kibana 可视化数据**: 配置 Kibana 并创建仪表板以可视化 Nginx 日志数据。 #### 自动化脚本分析 编写自动化脚本可以定期检查 Nginx 日志文件中的异常情况并发送通知。 - **示例 Bash 脚本**: 下面是一个简单的 Bash 脚本,用于检查 `/var/log/nginx/error.log` 文件中是否存在错误日志,并将结果发送到指定邮箱。 ```bash #!/bin/bash ERROR_LOG=$(grep "error" /var/log/nginx/error.log) if [ -n "$ERROR_LOG" ]; then echo "$ERROR_LOG" | mail -s "Nginx Error Report" admin@example.com fi ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值