Regexp, чтобы найти робота Google с http-кодом статуса 200 в логах apache - PullRequest
1 голос
/ 02 февраля 2012

Я ищу регулярное выражение, чтобы отфильтровать только строки из робота Google, которые имеют код состояния 200, например:

xxx.xxx.xxx.xxx - - [02/Feb/2012:12:21:26 +0100] "GET /some/url/here HTTP/1.1" 200 9823 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

И не показывать это перенаправление (статус 301)код):

xxx.xxx.xxx.xxx - - [02/Feb/2012:12:23:36 +0100] "GET /other/url HTTP/1.1" 301 579 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

В настоящее время я использую: tail -f access_log | grep Googlebot

Это показывает, что я все сканирую от Google, но я видел здесь, что вы также можете использовать регулярное выражение при выполнении tail наlog: http://www.electrictoolbox.com/view-apache-logs-tail-grep-egrep/

Приветствуются любые другие рекомендации по инструменту, обеспечивающему лучший способ фильтрации журналов.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 02 февраля 2012

как насчет

grep 'HTTP[^"]*" 200 .*Googlebot/2.1' log
3 голосов
/ 21 мая 2012

или намного проще

tail -f access_log | grep "Googlebot" | grep 200
1 голос
/ 02 февраля 2012

Если я правильно понимаю, я бы использовал awk:

awk '$9 ~ /^200$/ { print $0 }' file.txt

Если вас интересуют только последние 10 растущих линий, вы можете попробовать:

tail -f access_log | awk '$9 ~ /^200$/ { print $0 }'

EDIT:

Я должен был быть более строгим, попробуйте:

awk '$9 ~ /^200$/ && $14 ~ /^Googlebot/ { print $0 }' file.txt

или

tail -f access_log | awk '$9 ~ /^200$/ && $14 ~ /^Googlebot/ { print $0 }'

1 голос
/ 02 февраля 2012

Я уверен, что должно быть что-то лучше, но это работает с примерами, которые вы предоставили

.+?\[.+?\] ".*?" 200 .+Googlebot.+

С egrep:

tail access.log  | egrep '.+?\[.+?\] ".*?" 200 .+Googlebot.+'
...