Nginx
從 nginx 日誌中獲取使用者代理列表
我有 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
作為最後一個欄位,由 . 分隔"
。