KOI8-R

Kirill Lopuchov, lopuchov at mail ru

Ведение логов сервера в SQL-базе имеет свои приемущества перед обычными текстовыми файлами. 3proxy поддерживает ведение логов через ODBC-менеджер в любой базе данных, имеющих ODBC-драйвер. Этот менеджер стал стандартом де-факто в среде Windows, чего, к сожалению, не скажешь про Unix. Поэтому далее  рассмотрим на примере FreeBSD настройку ведения логов в базе SQLite. Эта  база данных выбрана в качестве примера потому,  что она проста в установке и настроке (в принципе настройка ведения логов в любой другой базе mysql или  postgresql отличается только настройкой его odbc-драйвера)
 
 Устанавливаем SQLite
wget http://www.sqlite.org/sqlite-2.8.14.tar.gz
tar -xvzf sqlite-2.8.14.tar.gz
cd sqlite 
./configure
gmake 
gmake install

 Устанавливаем iODBC менеджер
wget http://www.iodbc.org/libiodbc-3.51.2.tar.gz
tar -xvzf libiodbc-3.51.2.tar.gz
cd libiodbc-3.51.2
./configure --disable-gui --disable-gtktest
make 
make install

 Устанавливаем odbc драйвер SQLite
wget http://www.ch-werner.de/sqliteodbc/sqliteodbc-0.62.tar.gz
tar -xvzf sqliteodbc-0.62.tar.gz
cd sqliteodbc-0.62

./configure
 Если у вас скрипт configure выдал ошибку : 
 (configure: error: SQLite library too old)
 то ее можно попробовать обойти, вставив (SQLITE_COMPILE=1
 в стр. 5092 после условия if endif) в файле configure
make 
make install


 Далее настраиваем записи для iODBC менеджера в
файлах /etc/odbcinst.ini и /etc/odbc.ini

Настраиваем odbc драйвер 
--------------/etc/odbcinst.ini-------------
[ODBC Drivers]
SQLite=Installed

[SQLite]
Driver=/usr/local/lib/libsqliteodbc.so
---------------------------------------

Создаем DSN для базы c именем "sqlite", которая будет 
располагаться в каталоге: /usr/local/3proxy/logs.db

--------------/etc/odbc.ini----------------
[ODBC Data Sources]
sqlite=SQLite

[sqlite]
Driver=/usr/local/lib/libsqliteodbc.so
Description=SQLite test database
Database=/usr/local/3proxy/logs.db
# optional lock timeout in milliseconds
Timeout=2000
---------------------------------------

Создаем базу для логов и таблицу в формате (logformat 
см. описание в 3proxy.cfg.sample )

sqlite /usr/local/3proxy/logs.db

SQLite version 2.8.14
Enter ".help" for instructions
sqlite>create table log (
   ...> l_date char (11), 
   ...> l_chour char (10), 
   ...> l_user char (30), 
   ...> l_service char (30), 
   ...> l_in  integer, 
   ...> l_out integer, 
   ...> l_descr char  (64000), 
   ...>);


Добавляем следующие записи в конфигурационный файл 3proxy.cfg
---------------3proxy.cfg-----------------   
log &sqlite

logformat "Linsert into log ( l_date, l_chour, l_user, l_service, l_in, l_out, 
l_descr)
values ('%d-%m-%Y', '%H:%M:%S', '%U', '%N', %I, %O, '%T')"
------------------------------------------

Cобрать 3proxy c поддрежкой iODBC, для этого в Makefile.unix поменять
 
CFLAGS = -Wall -O2 -c -pthread -D_THREAD_SAFE -D_REENTRANT -DWITH_STD_MALLOC -I/usr/local/include
LIBS = -L /usr/local/lib -lodbc

и дать команды

make clean
make -f Makefile.unix

