У меня нет прокси-сервера и использовать его я не хочу, однако есть задача собирать статистику кто из юзеров куда ходил.
Статистику собираю так:
httpry -i em0 -d -o /home/httpry/em0.log -u nobody -f timestamp,source-ip,host,method -m get,post 'tcp port 80'
статистика получается такого вида:
# head -10 em0.log
2014-04-28 12:27:03 192.168.5.32 pagestat.mmi.bemobile.ua GET
2014-04-28 12:27:03 192.168.5.32 pagestat.mmi.bemobile.ua GET
2014-04-28 12:27:03 194.247.175.21 - -
2014-04-28 12:27:05 192.168.5.32 pbs.twimg.com GET
2014-04-28 12:27:05 68.232.35.139 - -
2014-04-28 12:27:05 91.198.36.16 - -
2014-04-28 12:27:07 192.168.5.32 glavcom.ua GET
2014-04-28 12:27:07 192.168.5.32 pagestat.mmi.bemobile.ua GET
путем нехитрых манипуляций вытягиваю из файла только строки с ГЕТ/ПОСТ, удаляю повторяющиеся строки по времени, оставляю только ИП и Хост, сортирую, вывожу только дубликаты и счетчик и сортирую в обратном порядке, затем меняю ИП на имена.
#!/bin/bash
FILE1=em0.log
FILE2=result.txt
declare -A IPName
IPName[192.168.5.1]='name1'
IPName[192.168.5.11]='name2'
egrep "GET|POST" $FILE1 | uniq | \
awk 'BEGIN {OFS = "\t"} {print $3, $4}' | sort | uniq -cd | sort -r | \
while read COUNT IP URL; do
if [ "${IPName[$IP]}" ]; then
echo "${IPName[$IP]} $URL $COUNT" >> $FILE2
fi
done
получаю
# head -10 result.txt
name1 i.obozrevatel.ua 684
name1 i3.obozrevatel.ua 667
name2 atn.ua 523
name3 vplayer.mmi.bemobile.ua 522
name4 server.iad.liveperson.net 513
name5 vplayer.mmi.bemobile.ua 483
name6 mc.yandex.ru 457
name6 pagestat.mmi.bemobile.ua 448
name6 i.obozrevatel.ua 409
name6 cdn.oboz.ua 390
но как-то все равно не то. надо бы по именам еще сортировать + файлик с логом растет очень быстро и только на пару часов набежало:
# ls -lah
total 16900
drwxr-xr-x 2 nobody wheel 512B Apr 28 16:45 .
drwxr-xr-x 4 root wheel 512B Apr 28 12:22 ..
-rw-r--r-- 1 nobody nobody 8.2M Apr 28 17:04 em0.log
-rw-r--r-- 1 root wheel 59.9K Apr 28 16:45 result.txt
-rwxr-xr-x 1 root wheel 1.5K Apr 28 16:45 webstat.bash
то есть надо его обрабатывать периодически и обнулять.
в общем если у кого есть какие идеи как можно улучшить, хотя бы словесно описать функционал - велкам.