1.1, karl (?), 04:04, 20/01/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Идея чудесная -- только лог лучше парсить по мере поступления. Доходим до EOF, ждём несколько секуд, сбрасываем состояние ошибки и читаем снова.
Можно проверить иноду файла (вдруг он ротировался). Вот исходник:
int log_getc(void)
{
int c, counter=0;
for(;;) {
c = fgetc(log);
if(c == EOF) {
if(counter > 60) {
struct stat b;
if(stat(log_file,&b) != 0) {
char errmsg[1024];
sprintf(errmsg, "stat , log_file, strerror(errno));
fatal_error(errmsg);
}
else {
if(log_inode != b.st_ino)
fatal_error("Log rotated");
}
counter = 0;
}
else {
sleep(30);
counter++;
clearerr(log);
}
}
else return c;
}
}
Полный текст утилитки (только для postgres'а) дарю попросившему почтой ;) | |
|
2.7, Осипов Станислав (?), 18:43, 20/01/2004 [^] [^^] [^^^] [ответить]
| +/– |
>Идея чудесная -- только лог лучше парсить по мере поступления. Доходим до
>EOF, ждём несколько секуд, сбрасываем состояние ошибки и читаем снова.
>Можно проверить иноду файла (вдруг он ротировался). Вот исходник:
прощу прощения, я не программирую на C/C++. ваша утилитка для моего случая - рабочая? и как ей пользоваться? | |
2.9, yarmol (?), 00:29, 21/01/2004 [^] [^^] [^^^] [ответить]
| +/– |
А я для этих целей крутить на С не стал, и сделал
tail -n 1 -f /var/log/squid/access.log | gawk ........
а в gawk добавляю данные в mysql по мере поступления.
PS Кстати, кроме поля с url, я добавляю поле с именем сервера (выдергиваю из url). Сделал только недавно, еще не оценил насколько оно надо, но кажется что группировка по имени сервера дает красивые (наглядные) резуьтатаы. | |
|
1.2, Vaker (?), 08:58, 20/01/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Интересно!
Пришли утилитку почтой.
А то давно пытался под postgres трафик перевести | |
1.3, AndSerg (?), 09:02, 20/01/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Только после того как отработает скрипт, мы начнем терять данные. В файле access.log будет тишина. IMXO надо так:
#!/bin/bash
squid -k rotate
sleep "несколько секунд"
cp /www/logs/squid/access.log.0 /tmp/squidforparse.log
awk '{print "INSERT INTO squid (ip,bytes,link,trans,time) VALUES(\""$3"\","$5",\""$7"\",\""$9"\",from_unixtime("$1"));"};' < /tmp/squidforparse.log | mysql -D traffics -u root --password=my_sql_passwd
rm -f /tmp/squidforparse.log
rm -f /tmp/access.log.0
| |
|
2.5, Осипов Станислав (?), 18:26, 20/01/2004 [^] [^^] [^^^] [ответить]
| +/– |
почему терять данные?
идея с rotate достаточно хорошая, но меня не устраивает ситуация, когда я запрашиваю страничку с отчетом и мне надо сидеть эти самые sleep "несколько секунд"
фишка моей статьи в том, что я сделал обновление статистики по запросу страниц не считая регулярного cron'a | |
2.30, Костя (??), 23:31, 22/01/2005 [^] [^^] [^^^] [ответить]
| +/– |
>Только после того как отработает скрипт, мы начнем терять данные. В файле
>access.log будет тишина. IMXO надо так:
>#!/bin/bash
>squid -k rotate
>sleep "несколько секунд"
>cp /www/logs/squid/access.log.0 /tmp/squidforparse.log
>awk '{print "INSERT INTO squid (ip,bytes,link,trans,time) VALUES(\""$3"\","$5",\""$7"\",\""$9"\",from_unixtime("$1"));"};' < /tmp/squidforparse.log | mysql -D
>traffics -u root --password=my_sql_passwd
>rm -f /tmp/squidforparse.log
>rm -f /tmp/access.log.0
А зачем нужно cp /www/logs/squid/access.log.0 /tmp/squidforparse.log ?
Ведь после squid -k rotate - access.log.0 - не гзипованый, станд. лог, с ним можно работать. И что мы удаляем rm -f /tmp/access.log.0? Ведь файла там нет. И зачем нужно sleep "несколько секунд"? :)
И по-моему этот вариант кривоват, если данные нужно получать по запросу, а не в кроне. | |
|
1.4, wapr (?), 10:48, 20/01/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Замечательно. Я не настолько богат, что бы иметь суперкомпьютер, лопатящий базу, содержащую ВЕСЬ ЛОГ. Более 7 дней (60000000 записей. И > 2Гб) - слишком много, что бы любой отчет с помощью cgi построить, ибо занимает > 30 сек. Так что без промежуточных таблиц не обойтись. И товарищи правы - так с логом работать нельзя. | |
|
2.6, Осипов Станислав (?), 18:35, 20/01/2004 [^] [^^] [^^^] [ответить]
| +/– |
>Замечательно. Я не настолько богат, что бы иметь суперкомпьютер, лопатящий базу, содержащую ВЕСЬ ЛОГ. Более 7 дней (60000000 записей. И > 2Гб) - слишком много, что бы любой отчет с помощью cgi построить, ибо занимает > 30 сек. Так что без промежуточных таблиц не обойтись. И товарищи правы - так с логом работать нельзя.
Согласен, но если у вас в организации такое потребление трафика, то наверно, неспроста, и контора не бедная, чтоб купить себе для этих целей емкую дисковую систему на сервер. Соответственно, будьте добры не плевать в практически единственный материал по данной тематике. Я выложил _ПРОСТЕЙШИЙ_ пример как можно делать, ибо остальное, если вы не дураки, вы додумаете сами. Еще добавлю, что имея такие обьемы логов, можно одну таблицу держать для подробной статистики по паре последних месяцев, а другую пополнять по истечении каждого месяца на базе информации в первой таблице, попутно освобождая первую таблицу за устаревший месяц. | |
2.8, Осипов Станислав (?), 21:12, 20/01/2004 [^] [^^] [^^^] [ответить]
| +/– |
да, и еще... БД на то и БД, чтоб не лопатить ВЕСЬ ЛОГ, а только запрошенную вами часть. За сим се ля ви. Не к месту высказались вы. | |
|
|
2.11, yarmol (?), 17:51, 21/01/2004 [^] [^^] [^^^] [ответить]
| +/– |
>зачем изобретать велосипед с квадратными колесами ? :-)
Ну так это все вещи достаточно несложные, что-бы время потраченное на установку и изучение готового софта, было сравнимо с временем потраченным на написание своего. Тот случай когда дешевле изобрести и собрать велосипед, чем заработать на него денег и купить.
Я поставил себе squid2mysql, увидел что у него квадратные колеса :-), например он подменяет собой /etc/init.d/squid, а это как-то некрасиво, да и создать базу мне пришлось руками, его скрипт на разных этапах отваливался. Вот из-за квадратных колес прибил его, и _за_такое-же_время_ нарисовал свои скрипты, которые (я писал чуть выше, снимают tail'ом) абсолютно не трогают никаких системных компонентов (включая файлы логов).
| |
|
1.13, Skif (?), 18:20, 05/03/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
У меня нечто подобное работает у самого(мене функционально в том плане, что не показывает сколько из кеша было вытянуто, а скока нет) месяцев пять - просто использование сарга запарило, да и надо что-то а-ля риал-тайм для юзверов, но я бы не сказл, что совсем не затрагивает файлов - полностью не читал статью - она мне не столь интересна, раз моя софтина работает - но ты же тоже должен очищать /_чего_то_там_/squid/logs/access.log после того как кинул очередную порцию в топку ;))) базы
Кстати, мой совет(впрочем может ты уже сам так же реализовал) - наваять клиенты на сях/делфе, который бы коннектился к базе раз 20-30 минут и получал данные по статистике пользоваеля, что бы он знал когда пробьет его час и пора готовиться к отключению трафика ;)))
Оч полезная штука. ;))) | |
1.14, jack (??), 15:21, 01/06/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Самая простая и прекрасная программа для подсчета и ограничения лимита трафика у пользователя squserlim
И ничего изобретать не надо. Пишите сами | |
1.15, raen (?), 12:37, 06/07/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
От себя добавлю, что не помешало бы заменить в insert'е в поле link символы " на \" ;) | |
1.18, Dmitry (??), 11:34, 14/07/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А как на счет function 'from_unixtime' not defined? Стоит FreBSD 4.10-STABLE. | |
|
2.28, Осипов Станислав (?), 16:26, 09/12/2004 [^] [^^] [^^^] [ответить]
| +/– |
>А как на счет function 'from_unixtime' not defined? Стоит FreBSD 4.10-STABLE.
это ж, батенька, функция mysql v4.xx
попробуйте написать ее ПРОПИСНЫМИ БУКВАМИ | |
|
1.21, ilya (??), 15:15, 10/11/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Мой вопрос немного оффтоп для данной ветки, но тема, безусловно, смежная.
Во многих предложенных системах анализа трафика Squid используется basic аутентификация для ведения статистики по пользователям. По сути имена и пароли передаются в открытом виде. В случае, если еще вводятся лимиты для пользователей, то этот становится опасно - передавать в открыто виде.
Есть идеи создания безопасной аутентификации на прокси? | |
|
2.24, cathul (??), 17:10, 25/11/2004 [^] [^^] [^^^] [ответить]
| +/– |
При запуске скрипта squid-to-mysql выдает следующее, как это победить, подскажите плиззз, горю.............!!!!!!!!!
awk: cmd. line:1: {print "INSERT INTO squid (ip,bytes,link,trans,time) VALUES(\""$3"\","$5",\""$7"\",\""$9"\",from_unixtime("$1"));};
awk: cmd. line:1: ^ unterminated string
| |
|
1.25, cathul (??), 17:32, 25/11/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А сейчас так :(
proxy:/srv/www/htdocs/reports # ./squid-to-mysql
ERROR at line 1: Unknown command '\%'. | |
|
2.26, Megavolt (?), 09:01, 01/12/2004 [^] [^^] [^^^] [ответить]
| +/– |
Я вообще для этой цели патч на сквид писал ... конечно не очень хороший, но считает ... кому надо могу кинуть
| |
|
3.27, cathul (??), 17:12, 07/12/2004 [^] [^^] [^^^] [ответить]
| +/– |
>Я вообще для этой цели патч на сквид писал ... конечно не
>очень хороший, но считает ... кому надо могу кинуть
Скинь плиззз.......
cathul@ukr.net
| |
|
|
1.29, sergey (??), 00:12, 16/01/2005 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Привет. Нужна помощь, при попытке доступа к странице статистики выдается:
Fatal error: Call to undefined function: mysql_connect() in /var/www/html/reports/index.php on line 4
скрипт автора взят из статьи и не подвергался изменениям, единственное разница в том, что у меня пути разные к корню Апача, то есть /var/www/html, ну да это мелочь.....
| |
1.33, Dimmus (?), 09:03, 12/10/2005 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Скрипт не очень актуален, ибо БД забивается ненужным хламом, допустим один и тот же IP дублируется, меняя разве что размер байтов. Можно ли как-нибудь суммировать эти значения? Иначе с такими темпами за неделю пару Гб будет весить. | |
|
2.35, yarmol (ok), 12:10, 12/10/2005 [^] [^^] [^^^] [ответить]
| +/– |
>Иначе с такими темпами за неделю пару
>Гб будет весить.
Так и есть :), и даже не пару гиг, а много больше.
Но я считаю трафик совсем по другому, а результаты этого скрипта использую для решения "спорных" вопросов "да я вощще в интернете не был!", а в таких случаях, очень полезны полные урлы с размером файлов.
Данные больше месяца не хранятся, прибиваются. Спорные вопросы длинной в месяц бывают ОЧЕНЬ редко.
Кстати, то что ты сделал в своем скрипте, ИМХО, значительно проще, быстрее, и правильней сделать в том же mysqlе. Из подробной базы, в твою, агрегированную, потом из подробной удалить.
| |
|
1.34, Dimmus (?), 10:26, 12/10/2005 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Лично я сделал так:
--------------------------------------------------
write:
--------------------------------------------------
#! /bin/sh
#
#write log
#
#copy squid log
cp /var/log/squid/access.log /tmp/squid.log
>/var/log/squid/access.log
#count ip,bytes
cat /tmp/squid.log | awk '{print $3}'| sort -u > /tmp/ips
for i in 'cat /tmp/ips' ; do
echo -n "$i "
grep -w $i /tmp/squid.log > /tmp/t1
cat /tmp/t1 | awk 'BEGIN {a=0} {a=a+$2} END{print a}'
done
#clear
>/tmp/squid.log
rm -f /tmp/ips
rm -f /tmp/t1
--------------------------------------------------
run
--------------------------------------------------
#! /bin/sh
#
#run log > mysql
#
#run write
/root/.sh/sq-my/write > /tmp/run.log
#insert time
awk '{print $1,$2,strftime("%s")}' /tmp/run.log > /tmp/squid.log
rm -f /tmp/run.log
#into mysql
awk '{print "INSERT INTO squid (ip,bytes,time) VALUES(\""$1"\","$2",from_unixtime("$3"));"};' < /tmp/squid.log | mysql -h host -D squid -u squid --password=pass >/dev/null 2>&1
rm -f /tmp/squid.log | |
1.36, Dimmus (?), 20:39, 16/10/2005 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
были и такие идеи, но быстрее было накатать скриптик, чем еще с крондом возиться :) | |
1.39, rook (??), 15:00, 27/10/2006 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Я может что-то не догоняю, но как вы считаете траффик фтп,... Я в логах сквида этого не нашел | |
|
2.40, yarmol (??), 11:58, 28/10/2006 [^] [^^] [^^^] [ответить]
| +/– |
>Я может что-то не догоняю, но как вы считаете траффик фтп,... Я
>в логах сквида этого не нашел
Никак :)
Точнее, не "никак", а весь трафик, я например, считаю совсем другими способами, а логи сквида занесенные в мускул очень помогают при общении с клиентами.
Ну или, если понадобился какой-то анализ http трафика - сколько туда, да сколько сюда...
| |
|
1.41, Александр (??), 12:27, 29/12/2006 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А SAMS использовать совместно с контролером домена нельзя ? 8) отличный тарификатор + ACL + правила для юзеров | |
|
2.43, DoBeRmAn8482 (?), 17:05, 10/01/2008 [^] [^^] [^^^] [ответить]
| +/– |
Почитал статью, понравилось, притом что от меня как раз попросили такую вещь, только у меня возникла одна загвоздка у меня отдельно действующий сервер Mysql, как ему передать данный из сквидовского access.log'a???
| |
|
|