Получить список пользовательских агентов из журнала nginx

У меня есть файл журнала nginx, и я хочу узнать долю рынка для каждой основной версии браузеров. Меня не интересуют второстепенные версии и операционные системы. Я хотел бы получить что-то вроде этого:

100 IE6
 99 IE7
 20 IE8
200 FF2
300 FF3

Я знаю, как получить список пользовательских агентов из файла, но я хочу объединить список, чтобы видеть только основные версии браузеров. Есть ли инструмент, который это делает?

6 ответов

Решение
awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
  • awk(1) - выбор полной строки User-Agent из запросов GET
  • cut(1) - используя первое слово из него
  • sort(1) - сортировка
  • uniq(1) - считать
  • sort(1) - сортировка по количеству, в обратном порядке

PS. Конечно, его можно заменить одним awk/sed/perl/python/ etc скрипт Я просто хотел показать, насколько богат Unix-Way.

В то время как один лайнер от SaveTheRbtz делает свою работу, мне понадобилось несколько часов, чтобы разобрать мой nginx доступ к журналу.

Вот более быстрая версия на его основе, которая занимает менее 1 минуты на 100 МБ файла журнала (что соответствует примерно 1 миллиону строк):

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

Он работает с форматом журнала доступа по умолчанию nginx, который совпадает с combined формат Apache's httpd и имеет User-Agent как последнее поле, разделенное ",

Чтобы получить пользовательский агент

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

Это небольшое изменение принятого ответа, используя fgrep а также cut,

cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn

Есть что-то привлекательное в использовании "более слабых" команд, когда это возможно.

Awstats должен сделать свое дело, но предоставит гораздо больше информации. Надеюсь, это поможет...

Webalizer может сделать это.

Пример:

webalizer -o reports_folder -M 5 log_file
  • -o reports_folder указывает папку, в которой создается отчет
  • -M 5 отображает только имя браузера и основной номер версии
  • log_file указывает имя файла журнала
  • источник: ftp://ftp.mrunix.net/pub/webalizer/README

Я бы использовал для этого сценарий оболочки: cat, awk pipe, sort и uniq сделают эту работу

Другие вопросы по тегам