URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 85047
[ Назад ]

Исходное сообщение
"Как отфильтровать строки в логе по datetime?"

Отправлено 100chuk , 25-Апр-09 23:13 
Всем доброго!

Есть вывод ipшников обращений к вебсерверу с сортировкой по числу запросов с ip:
cat *.log | awk '{print $1}' | sort | uniq -c | sort

Что необходимо добавить, чтобы учитывались только обращения за последние n минут?
Нагуглить сходу не получилось.

Заранее спасибо.


Содержание

Сообщения в этом обсуждении
"Как отфильтровать строки в логе по datetime?"
Отправлено pon , 26-Апр-09 13:17 
формат то строки в логах какой? и какой формат даты-времени?

"Как отфильтровать строки в логе по datetime?"
Отправлено 100chuk , 26-Апр-09 20:49 
>формат то строки в логах какой? и какой формат даты-времени?

Вот такой:
72.30.81.190 - - [26/Apr/2009:03:37:12 +0400] "GET /forum/index.php?PAGE_NAME=read&FID=16&TID=503&MID=s&PAGEN_1=14 HTTP/1.0" 200 24760 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"


"Как отфильтровать строки в логе по datetime?"
Отправлено pon , 26-Апр-09 21:17 
>>формат то строки в логах какой? и какой формат даты-времени?
>
>Вот такой:
>72.30.81.190 - - [26/Apr/2009:03:37:12 +0400] "GET /forum/index.php?PAGE_NAME=read&FID=16&TID=503&MID=s&PAGEN_1=14 HTTP/1.0" 200 24760 "-" "Mozilla/5.0
>(compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"

а как-то так не пойдет?

tail -1000 *.log | awk '{print $1}' | sort | uniq -c | sort

если нужено конкретно за 2-е последние минуты, то скрипт написать


"Как отфильтровать строки в логе по datetime?"
Отправлено angra , 27-Апр-09 11:34 
Вот любопытно зачем надо было спрашивать про формат лога и даты, а потом морозить херню про tail?

2автор
Если я не ошибаюсь, то DateTime::Format::Mail включается в стандартную поставку perl. Добавь
в конвеер
perl -MDateTime::Format::Mail -ne 'm|(\d\d)/(\w+)/(\d\d\d\d):([\d:]+) ([^\]]+)|;$d = DateTime::Format::Mail->parse_datetime("$1 $2 $3 $4 $5"); print if time-$d->epoch <3*60'
альтернативно можно воспользоваться возможностями date.
perl -ne 'm|(\d\d)/(\w+)/(\d\d\d\d):([\d:]+) ([^\]]+)|;$d=`date +%s --date="$1 $2 $3 $4 $5"`; print if time-$d <3*60'
Ну и возможно, что awk тоже с таким справится, но это уже не ко мне.
Думаю, где задается интервал в этих однострочниках догадаться не сложно :)


"Как отфильтровать строки в логе по datetime?"
Отправлено 100chuk , 29-Апр-09 16:44 
Спасибо, попробую.

А как через awk сделать, никто не знает?


"Как отфильтровать строки в логе по datetime?"
Отправлено троллъ , 29-Апр-09 17:00 
>Спасибо, попробую.
>
>А как через awk сделать, никто не знает?

Это конечно не совсем то но можно выбирать строки по регекспу поля со временем

72.30.81.190 - - [26/Apr/2009:03:37:12 +0400] "GET /forum/index.php?PAGE_NAME=read&FID=16&TID=503&MID=s&PAGEN_1=14 HTTP/1.0" 200 24760 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"

За интервал в 5 минут
awk ' $4~/26/Apr/2009:03:3[2-7]/ {ips[$1]++} END {for (ip in ips) print ips[ip]" "ip}' loh-file | sort -n -k 1

{ips[$1]++} END {for (ip in ips) print ips[ip]" "ip}  - такая конструкция чесна спиж..на с опеннета :), кто писал в советах


"Как отфильтровать строки в логе по datetime?"
Отправлено троллъ , 29-Апр-09 17:01 
>[оверквотинг удален]
>
>72.30.81.190 - - [26/Apr/2009:03:37:12 +0400] "GET /forum/index.php?PAGE_NAME=read&FID=16&TID=503&MID=s&PAGEN_1=14 HTTP/1.0" 200 24760 "-" "Mozilla/5.0
>(compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"
>
>За интервал в 5 минут
>awk ' $4~/26/Apr/2009:03:3[2-7]/ {ips[$1]++} END {for (ip in ips) print ips[ip]" "ip}'
>loh-file | sort -n -k 1
>
>{ips[$1]++} END {for (ip in ips) print ips[ip]" "ip}  - такая
>конструкция чесна спиж..на с опеннета :), кто писал в советах

Слеши в регекспе есесна заэкранировать