Получить список пользовательских агентов из журнала 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 из запросов GETcut(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
Есть что-то привлекательное в использовании "более слабых" команд, когда это возможно.
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 сделают эту работу