在Linux中,如何統計ip訪問情況?分析 nginx 訪問日誌?如何找出訪問頁面數量在前十位的ip?

黄嘉波發表於2024-06-23

在Linux中統計IP訪問情況並分析Nginx訪問日誌,以找出訪問頁面數量在前十位的IP地址,可以透過一系列命令列工具高效完成。這裡以一個典型的工作流程為例,說明如何進行這一分析:

1. 確定日誌檔案位置

首先,需要知道Nginx的訪問日誌檔案位置。通常,這個檔案位於/var/log/nginx/access.log,但具體位置可能會根據Nginx配置有所不同。你可以檢查Nginx的配置檔案(如/etc/nginx/nginx.conf或相應的site配置檔案)來確定確切位置。

2. 分析日誌檔案

接下來,使用awksortuniq等命令來統計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管道,以提高效率。

相關文章