Авг 252011
 

Понадобилось мне хранить логи в mysql с определенных серверов, выбор пал на rsyslog
mysql-server у меня уже установлен и настроен, описывать как его ставить и настраивать в этой статейки я не буду.
Приступим.

# cd /usr/ports/sysutils/rsyslog5-mysql && make install clean

Импартируем базу

$ mysql -u root -p < /usr/local/share/examples/rsyslog/mysql_createDB.sql

Добавим поддержку в файл. /etc/rc.conf

rsyslogd_enable="YES"
rsyslogd_flags="-c4"
rsyslogd_pidfile="/var/run/syslog.pid"
syslogd_enable="NO"

Отредактируем /usr/local/etc/rsyslog.con
У клиента.

$ModLoad ommysql # load MySQL functionality
$ModLoad immark.so # provides --MARK-- message capability 
$ModLoad imuxsock.so # provides support for local system logging
$ModLoad imklog.so   # kernel logging
#Локальные записи в syslogd только по udp
$AllowedSender UDP, 127.0.0.1
#права и владелец локальных файлов
$umask 0000
$FileGroup root
$FileOwner wheel
$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"
#Локальные логи, настройки взял из стандартного /etc/syslog.conf
*.err;kern.warning;auth.notice;mail.crit                /dev/console;TraditionalFormat
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err   /var/log/messages;TraditionalFormat
secur.*                                      /var/log/security;TraditionalFormat
auth.info;authpriv.info                         /var/log/auth.log;TraditionalFormat
mail.info                                       /var/log/maillog;TraditionalFormat
ftp.info                                        /var/log/vsftpd.log;TraditionalFormat
#Отправляем копию сообщений 
#количеством символов @. Одно @ - udp, два @ - tcp
*.*     @@10.15.7.154          # tcp
#Приведенные ниже строки отвечают за то, что бы
#при отсутствии связи с логсервером не терялись логи.
$ActionExecOnlyWhenPreviousIsSuspended on
#при исчезновении сервера, логи пишутся в описанный ниже файл
#тут можно перед файлом описать один или несколько резервных
#лог серверов, тогда в файл будет писаться информация только в том случае,
#если все они не доступны. Сервера описываются так:
#К примеру так & @@10.15.7.153
& /var/log/logical.local
$ActionExecOnlyWhenPreviousIsSuspended off

Настраиваем серверную часть.

cd /usr/ports/sysutils/rsyslog5 && make install clean
#Грузим модуль UDP сервера
$ModLoad imudp
#Грузим модуль TCP сервера
$ModLoad imtcp
#Грузим модуль regexp`ov
$ModLoad lmregexp
#Принятия локальных сообщений по протоколу UDP
$AllowedSender UDP, 127.0.0.1
#От наших серверов по TCP
$AllowedSender TCP, 10.15.7.0/24
#Запускаем UDP сервер
$UDPServerRun 514
#Запускаем TCP сервер
$InputTCPServerRun 514
#$umask 0
$FileGroup root
$FileOwner wheel
$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"
#Локальные логи. Что бы не писались записи от всех серверов
#вносим в фильтр имя локального сервера.
# Описываем нашу БД гед будут храниться логи.
*.*  :ommysql:127.0.0.1,BD_name,User_BD,PassBD
#Добавим локальные конфиги
if $hostname contains 'logserv' and (( $syslogfacility-text contains 'auth' and $syslogpriority-text contains 'info' ) or \
        ( $syslogfacility-text contains 'authpriv' and $syslogpriority-text contains 'info' )) \
                then /var/log/auth.log;TraditionalFormat
if $hostname contains 'logserv' and ( ($syslogpriority-text contains 'notice' ) or \
        ( $syslogfacility-text contains 'authpriv' and $syslogpriority-text contains 'none' ) or \
        ( $syslogfacility-text contains 'kern' and $syslogpriority-text contains 'debug' ) or \
        ( $syslogfacility-text contains 'lpr' and $syslogpriority-text contains 'info' ) or \
        ( $syslogfacility-text contains 'mail' and $syslogpriority-text contains 'crit' )) \
                then /var/log/messages;TraditionalFormat
if $hostname contains 'logserv' and ( $syslogfacility-text contains 'mail' and $syslogpriority-text contains 'info' ) \
        then /var/log/maillog;TraditionalFormat
if $hostname contains 'logserv' and $syslogfacility-text contains 'security' \
        then /var/log/security;TraditionalFormat 
if $hostname contains 'logserv' and ( $syslogfacility-text contains 'ftp' and $syslogpriority-text contains 'info' ) \
        then /var/log/xferlog;TraditionalFormat
#Забираем логи от удаленных серверов в аншу директорию. 
if $hostname contains 'logcli' and (( $syslogfacility-text contains 'auth' and $syslogpriority-text contains 'info' ) or \
        ( $syslogfacility-text contains 'auth' and $syslogpriority-text contains 'err' ) or \
        ( $syslogfacility-text contains 'authpriv' and $syslogpriority-text contains 'info' )) \
                then /var/log/logcli/auth.log;TraditionalFormat
if $hostname contains 'logcli' and ( ($syslogpriority-text contains 'notice' ) or \
        ( $syslogfacility-text contains 'authpriv' and $syslogpriority-text contains 'none' ) or \
        ( $syslogfacility-text contains 'kern' and $syslogpriority-text contains 'debug' ) or \
        ( $syslogfacility-text contains 'lpr' and $syslogpriority-text contains 'info' ) or \
        ( $syslogfacility-text contains 'mail' and $syslogpriority-text contains 'crit' )) \
                then /var/log/logcli/messages;TraditionalFormat
if $hostname contains 'logcli' and ( $syslogfacility-text contains 'mail' and $syslogpriority-text contains 'info' ) \
        then /var/log/logcli/maillog;TraditionalFormat 
if $hostname contains 'logcli' and $syslogfacility-text contains 'security' \
        then /var/log/logcli/security;TraditionalFormat 
if $hostname contains 'logcli' and ( $syslogfacility-text contains 'ftp' and $syslogpriority-text contains 'info' ) \
        then /var/log/logcli/xferlog;TraditionalFormat

Можно до устоновить loganalyzer , но мне этого пока не нужно.

Ну а теперь после настройки конфигурационного фала, запустим  его rsyslog.Но прежде остановим родной syslog, как это сделать я описал в самом начале поста.

/usr/local/etc/rc.d/rsyslogd start

 Leave a Reply

(required)

(required)

37 Запросов к базе. 0,357 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.198.210.67