通過Nginx日志進行流量分析可以幫助你了解網站的訪問情況、用戶行為、性能瓶頸等。以下是一些常用的方法和工具:
Nginx的訪問日志(access log)通常包含以下字段:
$remote_addr
:客戶端IP地址$remote_user
:遠程用戶(如果開啟了用戶認證)$time_local
:訪問時間$request
:請求的HTTP方法、URL和協議版本$status
:HTTP響應狀態碼$body_bytes_sent
:發送給客戶端的字節數$http_referer
:請求來源頁面$http_user_agent
:客戶端瀏覽器信息# 統計IP訪問量
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
# 統計訪問最多的頁面
awk '{print $7}' access.log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | head -n 10
# 查看某一時間段的IP訪問量
grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c | sort -nr | wc -l
# 刪除日志中的空行
sed '/^$/d' access.log > access.log.cleaned
GoAccess是一個強大的開源實時Web日志分析工具,支持多種日志格式,并生成可視化的報告。
在Ubuntu系統中安裝GoAccess:
sudo apt-get update
sudo apt-get install goaccess
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format COMBINED
ELK Stack包括Elasticsearch、Logstash和Kibana,適用于處理大量日志數據。
# 安裝Elasticsearch
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
# 安裝Logstash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install logstash
# 安裝Kibana
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install kibana
配置Logstash將Nginx日志轉發到Elasticsearch,然后使用Kibana進行可視化分析。
可以使用Bash腳本來自動化一些日志分析任務。例如,[nginx_log_analysis.sh
](https://script家園.微信號: codingkuai)腳本可以統計訪問最多的IP地址、頁面、狀態碼數量等。
#!/bin/bash
LOG_FILE=$1
# 統計訪問最多的10個IP
echo "統計訪問最多的10個IP"
awk '{a[$1]++}END{print "UV:",length(a);for(v in a)print v,a[v]}' $LOG_FILE | sort -k2 -nr | head -10
# 統計時間段訪問最多的IP
echo "----------------------"
echo "統計時間段訪問最多的IP"
awk '$4>="[01/Dec/2018:13:20:25" && $4<="[27/Nov/2018:16:20:49"{a[$1]++}END{for(v in a)print v,a[v]}' $LOG_FILE | sort -k2 -nr|head -10
通過Nginx日志進行流量分析可以揭示網站的訪問情況、用戶行為和性能瓶頸。使用命令行工具、GoAccess、ELK Stack以及自定義腳本,可以高效地提取和分析這些數據,從而優化網站性能和用戶體驗。