Дек 03 2009

Установка и настройка syslog-ng

Обычный, тот, что присутствует в базовой системе FreeBSD для больших систем не совсем подходит. Пользоваться конечно можно, но не удобно. Не хватает возможностей фильтровать сообщения по адресам хостов и т.п. Работу с rsyslog мы уже рассматривали в статьe Rsyslogd. Установка и настройка., но помимо rsyslog, есть еще syslog-ng. syslog-ng расшифровывается как Syslog New Generetions, то есть сислог нового поколения. Они(syslog-ng и rsyslog) в принципе идентичны по возможностям, но многие считают, что syslog-ng более удобен и практичен.

Спорить не буду, работал и работаю с обоими логгерами. В стабильности работы большой разницы не замечал.
Итак начнем устанавливать. В FreeBSD в портах присутствуют все ветки syslog-ng. Последняя ветка 3. Но мы будем ставить вторую ветку, третья работать у меня отказалась.

/usr/ports/sysutils/syslog-ng2
make install clean

Установка проходит без дополнительных вопросов.
После установки в /usr/local/etc/syslog-ng/ расположится файл syslog-ng.conf.sample. Это пример конфигурации syslog-ng, полностью повторяющий настройки стандартного /etc/syslog.conf. Для работы достаточно скопировать этот файл в syslog-ng.conf:

cd /usr/local/etc/syslog-ng
cp syslog-ng.conf.sample syslog-ng.conf

и переместим в вышестоящий каталог, стартовый скрипт и сам syslog-ng ожидает увидеь свой конфигурационный файл в /usr/local/etc/.

mv syslog-ng.conf ..

потом разрешить запуск syslog-ng

echo 'syslog_ng_enable="YES"' >> /etc/rc.conf

и все. Можно останавливать стандартный syslog и запускать syslog-ng.

/etc/rc.d/syslogd stop
/usr/local/etc/rc.d/syslog-ng start

После этого нужно отключить запуск syslog.

echo 'syslogd_enable='NO' >> /etc/rc.conf

syslog-ng уже пишет логи в те же файлы что и обычный syslogd.
Теперь разберемся с настройками в конфигурационом файле.
Первая строка конфигруационного файла

options { long_hostnames(off); sync(0); };

Устанавливает, что будут для записи в лог использоваться краткое имя сервера, а sync(0) означает что записывать в файл сообщения, нужно сразу по его приходу. С помощью этой опции можно регулировать нагрузку на дисковую систему. То есть если поставить цифру 5, к примеру, вместо 0-ля, то запись будет откладываться до поступления 5 сообщений.
Следующая секция sources отвечает за настройку источников потупления сообщений.

source src { unix-dgram("/var/run/log");
             unix-dgram("/var/run/logpriv" perm(0600));
             udp(); internal(); file("/dev/klog"); };

Опция unix-dgram — открывает юникс сокет в который могут писать сообщения локальные программы, udp() отвечает за прием сообщений от внешних серверов по протоколу UDP, в примере не приведено, но syslog-ng, так же как и rsyslog может принимать сообщения по tcp, для этого достаточно указать опцию tcp(); Следующая опция internal(); включает запись сообщений от самого syslog-ng. Ну а последняя опция file(/dev/klog), это опция для записи сообщений от ядра.

Следующая секция это описания destination, то есть описывается куда будут писаться сообщения. Писать можно в файл, примером служат все строки описанные в файле. Например для записи в файл /var/log/messages, мы его опишем так:

destination messages { file("/var/log/messages"); };

Эта строка расшифовывается так. Есть desctination с именем messages и используя функцию file она пишет в файл /var/log/messages.
Помимо обычной записи в файл, можно описать передачу записей на stdout программы используя функцию program(/path/to/program), sql() — это подключение к sql сервер, но я с sql для логов никогда не работал. И есть функции tcp() и udp(), они предназначены для перенаправления сообщений на удаленные лог хосты.

И теперь переходим к описанию фильтров. Это собственно то, ради чего затевается вообще переход со стандартного syslogd на syslog-ng.
Фильтры описываются похожим на destination синтаксисом.

filter f_auth { facility(auth); };

Фильтр с именем f_auth используется для фильтрации по facility auth.
Фильтры в syslog-ng можно создавать по таким параметрам:
1. facility — ну это мы уже рассмотрели в примере, остается дополнить, что в этот фильтр можно добавить, через запятую несколько facility
2. priority — точно такой же фильтр по стандартным для syslog свойствам, так же можно задавать разные приоритеты через запятую.
3. host — фильтрация по имени хоста. Вот это то чего не хватает в стандартном syslog
4. match — эта функция позволяет использовать регексп
5. program — фильтрация по имени программы сгенерировавшей сообщение.

Есть еще несколько функций, но я ими не пользовался.

Итак, после того, как мы можем переходить непосредственно к организации записи в лог. Запись в лог формируется из фильтров и источников передаваемых функции log.
Выглядит в стандарте это так:

log { source(src); filter(f_kern); filter(f_debug); destination(messages); };

Приведеная запись означает что в destination(messages); нужно писать сообщения от источника source(src); c фильтрами filter(f_kern); filter(f_debug);

То есть, мы сформируем destinition и фильтра под наши нужды, а потом собираем это в функции log, которая непосредственно отвечает за запись или пересылку(если destinition указывает на удаленный хост) сообщений syslog.

Если вы работали с rsyslog, то простота фильтрации syslog-ng вам должна понравится, по сравнению со сложными конструкциями фильтров rsyslog, фильтра syslog-ng просты и понятны.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By Aemon, 09.08.2010 @ 15:44

    можно добавить логгирование в БД mysql.

    destination d_mysql {
    program(«/usr/bin/mysql —user=syslogger —password=password syslog»
    template(«INSERT INTO logs (host, facility, priority, level, tag, datetime, program, msg)
    VALUES ( ‘$HOST’, ‘$FACILITY’, ‘$PRIORITY’, ‘$LEVEL’, ‘$TAG’, ‘$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC’, ‘$PROGRAM’, ‘$MSG’ );\n»)
    template-escape(yes));
    };

    где в атрибутах доступа указать логин и пароль владельца базы куда будет все писаться.

    За статью спасибо.

  • By hilik, 09.08.2010 @ 19:42

    спасибо за комментарий, сам логи в базу никогда не писал

Other Links to this Post


Украинская Баннерная Сеть