从 nginx 日志中获取用户代理列表

从 nginx 日志中获取用户代理列表

我有 nginx 日志文件,我想找出每个主要浏览器版本的市场份额。我对次要版本和操作系统不感兴趣。我希望得到如下结果:

100 IE6
 99 IE7
 20 IE8
200 FF2
300 FF3

我知道如何从文件中获取用户代理列表,但我想汇总列表以仅查看浏览器的主要版本。 有没有可以做到这一点的工具?

答案1

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/ sed/ perl/ python/etc 脚本来代替。我只是想展示一下 unix-way 有多丰富。

答案2

虽然SaveTheRbtz 的一句话完成这项工作,花了几个小时来解析我的nginx访问日志。

下面是基于他的一个更快的版本,每 100MB 日志文件(对应约 100 万行)花费不到 1 分钟:

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

它使用 的默认访问日志格式,该格式与Apache 的格式nginx相同,并以作为最后一个字段,用 分隔。combinedhttpdUser-Agent"

答案3

获取用户代理

sudo awk -F"\"" '{print $6}' /var/log/nginx/access.log | sort | uniq -dc

答案4

统计信息系统应该可以解决问题,但会提供更多信息。希望这能有所帮助...

相关内容