Получение пользовательского агента из Apache/Nginx Access.log

У меня есть команда ниже, которая распечатывает хиты, 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"
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
511
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если 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.

Спасибо, это, кажется, работает отлично! Отдельный вопрос... знаете ли вы, как я потенциально могу выполнить поиск домена по IP-адресу, представленному в качестве дополнения к этой команде awk?

thedaishboy 11.06.2019 10:37

Приятно знать, что это работает. Что касается вашего вопроса, AWK не имеет встроенной команды для поиска домена. Возможно, вам придется использовать внешнюю команду как nslookup.

tshiono 11.06.2019 11:04

Спасибо, tshiono... так что потом мне нужно будет запустить это как отдельную команду?

thedaishboy 11.06.2019 11:05

Это может зависеть от того, как вы хотели бы отобразить конечный результат. Если вы можете опубликовать пару примеров строк журнала и желаемый результат, я могу вам помочь.

tshiono 11.06.2019 11:26

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