Nginx

從 nginx 日誌中獲取使用者代理列表

  • February 17, 2020

我有 nginx 日誌文件,我想了解每個主要版本的瀏覽器的市場份額。我對次要版本和作業系統不感興趣。我想得到這樣的東西:

100 IE6
99 IE7
20 IE8
200 FF2
300 FF3

我知道如何從文件中獲取使用者代理列表,但我想聚合列表以僅查看瀏覽器的主要版本。有沒有一個工具可以做到這一點?

awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
  • awk(1)- 選擇 GET 請求的完整 User-Agent 字元串
  • cut(1)- 使用它的第一個詞
  • sort(1)- 排序
  • uniq(1)- 數數
  • sort(1)- 按計數排序,反轉

PS。當然也可以用一個awk//// etc腳本代替sed。我只是想展示一下 unix-way 的豐富程度。perl``python

雖然SaveTheRbtz 的一個班輪完成了這項工作,但解析我的nginx訪問日誌需要幾個小時。

這是基於他的更快的版本,每 100MB 的日誌文件耗時不到 1 分鐘(對應約 100 萬行):

sed -n 's!.* "GET.* "\([[:alnum:].]\+/*[[:digit:].]*\)[^"]*"$!\1!p' /var/log/nginx/access.log | sort | uniq -c | sort -rfg

它使用預設的訪問日誌格式nginx,該combined格式與 Apache 的格式相同,httpd並以.User-Agent作為最後一個欄位,由 . 分隔"

引用自:https://serverfault.com/questions/89773