在Linux中統計IP訪問情況並分析Nginx訪問日誌,以找出訪問頁面數量在前十位的IP地址,可以透過一系列命令列工具高效完成。這裡以一個典型的工作流程為例,說明如何進行這一分析:
1. 確定日誌檔案位置
首先,需要知道Nginx的訪問日誌檔案位置。通常,這個檔案位於/var/log/nginx/access.log
,但具體位置可能會根據Nginx配置有所不同。你可以檢查Nginx的配置檔案(如/etc/nginx/nginx.conf
或相應的site配置檔案)來確定確切位置。
2. 分析日誌檔案
接下來,使用awk
、sort
和uniq
等命令來統計IP地址和訪問頁面的數量。下面是一個示例命令,演示如何統計訪問頁面數量最多的前十個IP地址:
cat /var/log/nginx/access.log | \
awk '{print $1 " " $7}' | # 提取IP地址和請求的URL路徑
cut -d '?' -f1 | # 移除URL中的查詢字串,確保只統計頁面路徑
sort | # 排序以便後續統計
uniq -c | # 計算每行(即每個IP和頁面組合)的數量
sort -nr | # 按照訪問次數降序排序
awk '{print $2}' | # 只保留IP地址
uniq -c | # 再次統計每個IP的總訪問次數
sort -nr | # 再次按訪問次數降序排序
head -n 10 # 顯示訪問次數最多的前10個IP
3. 解釋步驟
- 使用
cat
讀取日誌檔案內容。 awk '{print $1 " " $7}'
提取每行的第一列(即客戶端IP地址)和第七列(即請求的URL路徑)。cut -d '?' -f1
確保統計的是頁面路徑而不是帶有查詢引數的完整URL。sort
對提取的資料進行初步排序,為後續統計做準備。uniq -c
統計每行出現的次數,生成每條記錄的計數。- 第一次
sort -nr
按訪問次數降序排序,以便後續步驟能正確統計每個IP的訪問頁面總數。 - 第一次
awk '{print $2}'
和第二次uniq -c
是為了確保我們計算的是每個IP總的訪問頁面數,而不僅僅是單一頁面的訪問次數。 - 第二次
sort -nr
確保最終結果是按照IP總的訪問次數降序排列的。 head -n 10
顯示排名前十的IP地址及其訪問次數。
請注意,這個命令可能需要根據實際日誌格式和需求進行適當調整。如果你的日誌格式有所不同,欄位的位置可能需要相應調整。此外,如果日誌檔案非常大,考慮使用awk
直接處理檔案而不是透過cat
管道,以提高效率。