Назад | Перейти на главную страницу

Получить список пользовательских агентов из журнала 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) - выбор полной строки 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 httpd и имеет User-Agent в качестве последнего поля, разделенного ".

Это небольшой вариант принятого ответа с использованием 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

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

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

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