Получение агента пользователя из Apache / Nginx Access.log - PullRequest
0 голосов
/ 10 июня 2019

У меня есть команда ниже, которая распечатывает попадания, IP-адрес хоста (локальный сервер / балансировщик нагрузки) и внешний IP-адрес (вызывающий попадание). Я также хотел бы распечатать информацию об агенте пользователя вместе с предоставленной информацией.Как это может быть достигнуто, пожалуйста?

cat access.log | sed -e 's/^\([[:digit:]\.]*\).*"\(.*\)"$/\1 \2/' | sort -n | uniq -c | sort -nr | head -20

Что я получаю ниже ...

Хиты, IP-адрес хоста, Внешний IP

Что бы я хотел, если это возможно...

Хиты, IP (пример хоста), Внешний IP (вызывающий попадание), Пользовательский агент

10000 192.168.1.1 148.285.xx.xx Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4

Ниже приводится выдержка из журнала

192.168.xxx.x - - [10/Jun/2019:12:40:15 +0100] "GET /company-publications/152005 HTTP/1.1" 200 55848 "google.com" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6" "xx.xx.xx.xx"

1 Ответ

0 голосов
/ 11 июня 2019

Если доступен GNU AWK (gawk), попробуйте следующее:

awk -v FPAT='(\"[^"]+\")|(\\[[^]]+])|([^ ]+)' '
{ gsub("\"", "", $9); gsub("\"", "", $10); print $1 " " $10 " " $9 }
' access.log | sort -n | uniq -c | sort -nr | head -20
  • Значение FPAT представляет регулярное выражение каждого поля в access.log. То есть: «строка в двойных кавычках», «строка в квадратных» скобки "или" строка, разделенная пробелами ".
  • Затем вы можете разбить каждую строку access.log на поля: $1 для host IP, $10 для external IP и $9 для user agent.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...