web site statistics

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

web site statistics

Сообщение nerve » 28.04.2014 18:07

Привет парни. Нужны ваши советы в плане как сделать лучше.
У меня нет прокси-сервера и использовать его я не хочу, однако есть задача собирать статистику кто из юзеров куда ходил.
Статистику собираю так:

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

то есть надо его обрабатывать периодически и обнулять.
в общем если у кого есть какие идеи как можно улучшить, хотя бы словесно описать функционал - велкам.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: web site statistics

Сообщение drBatty » 28.04.2014 20:01

nerve писал(а):
28.04.2014 18:07
egrep "GET|POST" $FILE1 | uniq | \
awk 'BEGIN {OFS = "\t"} {print $3, $4}' | sort

1. sort умеет --unique, т.е. sort|uniq это лишнее.
2. sort умеет не всё сртировать, а лишь некоторые поля, awk тут тоже не нужно.
3. весь файл брать не нужно возьмите лишь новые строчки командой tail -f

ps egrep устарела, используйте просто grep 'POST\|GET' или sed или grep -E.

PPS если что, моя аська у вас есть.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: