Замена стандартного syslogd на syslog-ng в slackware linux.

Статья посвящена установке и настройка syslog-ng - "продвинутого" варианта syslog в системе Slackware Linux

[Alexey Osiyuk aka Zmodem (zmodem@zmodem.tomsk.ru)]

Преамбула

syslog-ng (syslog next generation) - это многофункциональный демон протоколирования системных сообщений. По сравнению со стандартным демоном syslogd он имеет ряд отличий:
  • усовершенствованная схема конфигурации
  • фильтрация сообщений не только по приоритетам, но и по их содержанию
  • поддержка regexps (regular expressions)
  • более гибкое манипулирование и организация логов
  • возможность шифрования канала передачи данных с помощью IPSec/Stunnel

Нам понадобится

  • syslog_ng
  • немного времени и чуть-чуть терпения :)

Подготовка

Скачиваем:
          syslog-ng-1.6.9.tar.gz
Устанавливаем:
          bison, flex, byacc, checkinstall. Эти пакеты уже есть в дистрибутиве
          slackware, поэтому я просто установил их через swaret.

Сборка syslog-ng

Копируем syslog-ng-1.6.9.tar.gz, например, в /usr/src/syslog-ng, распаковываем и собираем:
	$ tar zxvf syslog-ng-1.6.9.tar.gz
	$ cd syslog-ng-1.6.9/libol-0.3.17
	$ ./configure
	$ make
make install на этой стадии делать не обязательно, вместо этого мы просто укажем путь к дереву libol для syslog-ng.

По желанию, через --prefix можно указать каталог, относительно которого будет установлен syslog-ng.

	$ cd ..
	$ ./configure --with-libol=/usr/src/syslog-ng/syslog-ng-1.6.9/libol-0.3.17 --prefix=/
	$ make
	$ checkinstall

Настройка

Создаем директорию /etc/syslog-ng (в моем случае после установки она почему-то отсутствовала:) ) Конфигурационный файл syslog-ng.conf оперирует 4-мя основными директивами:
  • source - локальный/удаленный источник сообщений.
  • filter - фильтр сообщений по приоритетам, по имени программы, по имени хоста или же с помощью regexp.
  • destination - указатель на приемник сообщений. Это может быть файл, консоль, внешняя программа или TCP/UDP соединение.
  • log - служит для объединения 3-х предыдущих директив и определяет, каким образом будет обработано сообщение.
Для более подробного описания всех доступных директив обратитесь к справочному руководству по syslog-ng.

Ниже приводится пример конфигурационного файла для замены стандартного syslog.conf в свежеустановленной системе slackware 10.2 (в вашем случае, набор параметров может отличаться:) )

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

source src { unix-stream("/dev/log"); internal(); };

destination authlog { file("/var/log/secure"); };
destination syslog { file("/var/log/syslog"); };
destination warn { file("/var/log/syslog"); };
destination cron { file("/var/log/cron"); };
# Uncomment this to see kernel messages on the console.
#destination kern { file("/dev/console"); };
destination uucp { file("/var/log/spooler"); };
destination newscrit { file("/var/log/spooler"); };
destination mail  { file("/var/log/maillog"); };
destination mailinfo  { file("/var/log/maillog"); };
destination mailwarn  { file("/var/log/maillog"); };
destination mailerr { file("/var/log/maillog"); };
destination debug { file("/var/log/debug"); };
destination messages { file("/var/log/messages"); };


filter f_auth { facility(auth); };
filter f_authpriv { facility(auth); };
filter f_syslog { not facility(mail); };
filter f_cron { facility(cron); };
# Uncomment this to see kernel messages on the console.
#filter f_kern { facility(kern); };
filter f_mail { facility(mail); };
filter f_uucp { facility(uucp); };
filter f_news { facility(uucp); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info)
        and not facility(auth, authpriv, mail, news); };
filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };

log { source(src); filter(f_authpriv); destination(authlog); };
log { source(src); filter(f_syslog); destination(syslog); };
log { source(src); filter(f_warn); destination(syslog); };
log { source(src); filter(f_crit); destination(syslog); };
log { source(src); filter(f_err); destination(syslog); };
log { source(src); filter(f_cron); destination(cron); };
# Uncomment this to see kernel messages on the console.
#log { source(src); filter(f_kern); destination(kern); };
log { source(src); filter(f_mail); destination(mail); };
log { source(src); filter(f_uucp); destination(uucp); };
log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };
log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };
log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };
log { source(src); filter(f_news); filter(f_crit); destination(newscrit); };
log { source(src); filter(f_debug); destination(debug); };
log { source(src); filter(f_messages); destination(messages); };

Для запуска syslog-ng при старте ОС нам понадобится следующий скрипт, за основу взят "родной" rc.syslog:

#!/bin/sh
# Start/stop/restart the syslog-ng daemon.
#

syslog_ng_start() {
  if [ -x /sbin/syslog-ng ]; then
    echo -n "Starting syslog-ng daemon:  "
    echo "/sbin/syslog-ng "
    /sbin/syslog-ng
  fi
}

syslog_ng_stop() {
  killall syslog-ng 2> /dev/null
}


syslog_ng_restart() {
  syslog_ng_stop
  sleep 1
  syslog_ng_start
}

case "$1" in
'start')
  syslog_ng_start
  ;;
'stop')
  syslog_ng_stop
  ;;
'restart')
  syslog_ng_restart
  ;;
*)
  echo "usage $0 start|stop|restart"
esac

Сохраняем его в /etc/rc.d под именем rc.syslog-ng, устанавливаем права на запуск.

Добавляем в /etc/rc.d/rc.M:

	# Start the next generation system logger.
	if [ -x /etc/rc.d/rc.syslog-ng ]; then
	  . /etc/rc.d/rc.syslog-ng start
	fi
Снимаем права на запуск у файла /etc/rc.d/rc.syslog и перезагружаемся.

Если все было сделано правильно, при запуске системы видим Starting syslog-ng daemon и радуемся полчаса :)

Заключение

Все вышеизложенное производилось в системе Slackware Linux 10.2, kernel 2.6.15. Пожелания/критика/ругательства - принимаются :)

Статья взята с сайта OpenNet.ru

[ опубликовано 07/03/2006 ]

Alexey Osiyuk aka Zmodem (zmodem@zmodem.tomsk.ru) - Замена стандартного syslogd на syslog-ng в slackware linux.   Версия для печати