Всем доброго!Есть вывод ipшников обращений к вебсерверу с сортировкой по числу запросов с ip:
cat *.log | awk '{print $1}' | sort | uniq -c | sortЧто необходимо добавить, чтобы учитывались только обращения за последние n минут?
Нагуглить сходу не получилось.Заранее спасибо.
формат то строки в логах какой? и какой формат даты-времени?
>формат то строки в логах какой? и какой формат даты-времени?Вот такой:
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)"
>>формат то строки в логах какой? и какой формат даты-времени?
>
>Вот такой:
>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-е последние минуты, то скрипт написать
Вот любопытно зачем надо было спрашивать про формат лога и даты, а потом морозить херню про 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 тоже с таким справится, но это уже не ко мне.
Думаю, где задается интервал в этих однострочниках догадаться не сложно :)
Спасибо, попробую.А как через awk сделать, никто не знает?
>Спасибо, попробую.
>
>А как через 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} - такая конструкция чесна спиж..на с опеннета :), кто писал в советах
>[оверквотинг удален]
>
>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} - такая
>конструкция чесна спиж..на с опеннета :), кто писал в советахСлеши в регекспе есесна заэкранировать