LINUX.ORG.RU

лог squid_a в sqlite


0

0

Я на перле написал скриптец, который загоняет access.log в sqlite базу, для последующего анализа насколько хватит фантазии и SELECT'a

Можно скормить весь access.log или в процессе его создания по типу tail -f access.log | log2sql.pl

Два вопроса:

  • 1. Оно кому-то кроме меня надо? Если да, то оформлю и выложу.
  • 2. На слабой машине с сильно загруженным сквидом (6000-9000 req/min), скрипт не успевает писать в базу.

Интересно, какая у вас типовая загрузка сквида? Проверить можно так: tail -f access.log | ./conn_per_min.pl

где conn_per_min.pl

#!/usr/bin/perl -a -n

if (($F[0]-$a) < 60) {
        $c++;
} else {
        @d = localtime($a);
        printf "%02d:%02d\t%5d\n", $d[2], $d[1], $c;
        $a=$F[0];
        $c=0;
}
★★★★★
Ответ на: комментарий от anonymous

Нет никаких особых причин.
Просто я делаю squid -k rotate каждый день (ежедневно набегает около 10млн.строк в логе сквида) и каждый день открываю новую базу данных. Старые базы данных уходят в архив.
Так файлы баз данных получаются нормальных размеров и к ним нет проблем вернуться.

sdio ★★★★★
() автор топика
Ответ на: комментарий от sdio

Спасибо за ответ. Хотелось бы поинтересоваться у тебя, как у авторитетной личности, какой дистрибутив используешь на серверах и десктопах? И почему? И как ты относишься к BSD, на примере OpenBSD. Надеюсь твой ответ.. Спасибо.

anonymous
()
Ответ на: комментарий от anonymous

Лично я предпочитаю Дебиан на серверах и десктопах, в силу удобства установки программ, обновлений и вообще.

На работе мы только сейчас начинаем миграцию с Юникс на Линукс, чтобы сэкономить на железе (тех. поддержка [только железо] одного SuperDom == 200k$/year) -- и это будет РедХат

sdio ★★★★★
() автор топика

ну ладно, не постгрес, но можно на мускуль хотя бы все перенаправлять. Я именно так и делаю. точнее мой скрипт, в час ночи ежедневно. но загруз у меня гораздо меньше, за месяц в базе около 6млн строк набегает, но данные хранятся максимум месячной давности, остальное - в отчетах

vitroot ★★
()
Ответ на: комментарий от vitroot

запись в постгрес/мускуль быстрее чем в sqlite?

sdio ★★★★★
() автор топика

sqlite база и access.log на одном харде находятся?

Lego_12239 ★★
()
Ответ на: комментарий от Lego_12239

Вопрос в том можно ли в sqlite писать 100 записей в секунду (1-5 insert'ов на каждую строку access.log)

sdio ★★★★★
() автор топика

Есть, вообще, необходимость делать это online? Может, если это делать после squid -k rotate, то будет проще...

Если загрузка уже такая, что не поспевает, то, может быть, получится с отдельным rdbms сервером на выделенной машине и модифицировать скрипт для посылки по сети insert'ов (psql и т.п.). Если на загруженной машинке будет только пересылка данных через insert на db-сервер, то, думаю, сильно облегчит процесс. Но это позатратней, конечно.

Хм, или сделать отдельный лог-сервер с rdbms на борту. Туда через syslogd будут сбрасываться все логи, а потом insert'иться в базу, которая находится тут же. Логи не идущие через syslog можно сразу сбрасывать на базу скриптом, вроде твоего, который будет генерить insert'ы. Так, все логи будут в базе, плюс база на log-сервере может спокойно работать, не будучи задушенная работой других программ. Но это так, в порыве бреда.

Lego_12239 ★★
()
Ответ на: комментарий от Lego_12239

Да, дело в записи на диск мелкими порциями.
Хотя линейная запись на диск идет со скоростью 65Мб/с
sqlite пишет (на диск) со скоростью 200 попугаев/сек, а в tmpfs тоже самое со скоростью 3000 попугаев/сек.

Вобщем все понятно.

sdio ★★★★★
() автор топика
Ответ на: комментарий от sdio

Хм :-)... интересно, sdio, а если попробовать, в качестве эксперемента, хранить в памяти последнии, допустим, 100 записей ( кэш получается) и по заполнению этих 100 позиций сбрасывать их разом? Не работал с sqlite, поэтому не знаю что выйдет. Но интересно...

Lego_12239 ★★
()
Ответ на: комментарий от Lego_12239

>sqlite пишет (на диск) со скоростью 200 попугаев/сек, а в tmpfs тоже самое со скоростью 3000 попугаев/сек.

Это с включеным autocommit'ом

Отключил autocommit и стал делать commit() раз на каждые 100000 входных строк. Скорость на диске выросла до 9000 попугаев/сек. На tmpfs даже проверять не стал.

sdio ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.