The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Организовать 'синхронное' дублирование лога Squid в базе P-S..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Разное)
Изначальное сообщение [ Отслеживать ]

"Организовать 'синхронное' дублирование лога Squid в базе P-S..."  +/
Сообщение от Af. on 10-Июн-10, 10:07 
Есть желание в access_log.cc дописать дублирование лога в PostgreSQL средствами libpq.

Если просто вставить нужное в какую-либо из функций записи строк лога в файл (прямо в accessLogLog или в одну из трёх вызываемых оттуда), то эта функция записи в файл будет каждый раз ожидать окончания записи в базу. При относительно скромном опыте и знании языка С пытаюсь понять насколько оптимально поступить именно так.

Чем чревата моя добавка, как при слабой, так и при сильной разнообразной нагрузке на сервер? При том, что записи в базу для меня ценнее записей в файл.

Есть ли другие способы, лучшие по скорости и надёжности?
Как лучше организовать "синхронное" дублирование лога Squid в базе Postgesql?

P.S. Отправлять "в параллель" при открытых соединениях с базой через libpq в случае Unix не велит начало раздела номер 30.1. из мануала к Postgresql 8.4.4. ( второй абзац http://www.postgresql.org/docs/8.4/interactive/libpq-connect... ). Как понимаю в Линукс это тоже нужно учитывать. Хотя... объём знаний не позволяет для нужного осознать необходимость "форка".

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Организовать 'синхронное' дублирование лога Squid в базе P-S..."  +/
Сообщение от svn (??) on 10-Июн-10, 12:42 
Чревато. субд менее надёжное и менее предсказуемое подключение, и работать с ним сложнее чем с файлом.

syslog-ng ?


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Организовать 'синхронное' дублирование лога Squid в базе P-S..."  +/
Сообщение от Af. on 07-Июл-10, 14:40 
Да, это оно. Спасибо.

syslog-ng - для Suse "из коробки". Для Fedora - rsyslog. Инструменты примерно одинаковые. У меня Федора.

Итак - запись лога Squid в базу Postgresql.

Создать нужную базу. Здесь это не описываю.

Фрагмент конфигурации squid (версия 3.1.1):

logformat squid_2_rsyslog CuStOmMaRkEr#DBase_Table_Name#squid#%>a#%<A#%>p#3128#noname#_sql-inj_>ru#%Ss/>Hs#%<st#%<st#%{%Y-%m-%d}tl#%{%H:%M:%S}tl#%{%Y-%m-%d}tl#%{%H:%M:%S}tl#%{%Y-%m-%d %H:%M:%S}tl#%{%Y-%m-%d %H:%M:%S}tl
access_log syslog squid_2_rsyslog


Установка нужного модуля:


# yum install rsyslog-pgsql

Фрагмент конфигурации rsyslog, v3, из ASPLinux 14 (Fedora Core 9):

$ModLoad ompgsql.so  # load the output driver for PostgreSQL

# Template with removing of message custom marker. The result is ready to use SQL command.
$template rsyslog_2_pgsql, "\nINSERT INTO %msg:F,35:2% VALUES( '%msg:F,35:3%', '%msg:F,35:4%', '%msg:F,35:5%', '%msg:F,35:6%', '%msg:F,35:7%', '%msg:F,35:8%', '%msg:F,35:9%', '%msg:F,35:10%', '%msg:F,35:11%', '%msg:F,35:12%', '%msg:F,35:13%', '%msg:F,35:14%', '%msg:F,35:15%', '%msg:F,35:16%', '%msg:F,35:17%', '%msg:F,35:18%' );", stdsql

# Filter by message custom marker and log it to separate file. BTW strings in this file are ready to use SQL commands.
if $msg contains 'CuStOmMaRkEr' then /var/log/squid-sql.log;rsyslog_2_pgsql

# In case SQL server is down setup on-disk queue.
# This setup only for next logging command. Each "command" must have separate block before the command.
$WorkDirectory /var/log/squid # where to place spool files
$ActionQueueFileName rsyslog.squid2sql_queue # unique name prefix for spool files
$ActionQueueMaxDiskSpace 5m   # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList   # run asynchronously
$ActionResumeRetryCount -1    # infinite retries if host is down

# Filter by custom marker inside the message and log information to RMBill data base.
if $msg contains 'CuStOmMaRkEr' then :ompgsql:127.0.0.1,rmbill,rmbill,123;rsyslog_2_pgsql

# And finally discard the messages, to avoid logging them to other containers.
:msg, contains, "CuStOmMaRkEr"  ~

Встреченные особенности:

Интерпретация поля >Hs зависит от версии Squid. "Уголок" м.б. нужен, м.б. нет. Squid отчитается, если неправильно.

Пока не осознал возможна ли инъекция через адрес назначения в ">Hs", потому сейчас при записи в базу подставляю _sql-inj_ вместо реального адреса. Не успел найти точного указания, что stdsql защитит.

Не претендую на оптимальность фильтра сообщений в rsyslog. С удовольствием увижу предложения по оптимизации.

P.S. Не обращайте внимание на выборку полей для лога. Этот набор заточен под нечто третье, в чью базу дописываются эти логи.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру