Intereting Posts
читать файл и выполнять каждую строку как команду, используя Какое имя следует использовать для myhostname в main.cf в Postfix? Команда dd выходит из строя с ошибкой «Вход / выход» при записи USB-накопителя как создать таблицу с полями в командной строке Centos Virtuozzo OpenVZ Centos 7 контейнерная сеть не запускается после обновления Сетевой интерфейс Debian больше не работает после обновления / обновления Как открыть терминал при запуске скрипта оболочки? Где мои коды отмены ANSI идут, когда я подключаюсь к другому процессу? Могу ли я сохранить их? Получение доступа к переменной внутри предложения sudo в скрипте с EOF Параметры команды с дефис или нет Аудио не работает Debian Jessie много времени, проведенного в intel_idle Как запустить демон Dropbox в фоновом режиме? Выход из режима следования с меньшим и журнальным подсчет числа вхождений в файле списка данных

Ошибка централизованного лог-сервера в Linux

введите описание изображения здесь Я настроил централизованный сервер для всех серверов Linux. Я могу пересылать все системные журналы и журналы аудита базы данных Oracle на централизованный сервер. но моя проблема заключается в том, что все журналы системы и базы данных записываются в один файл. Мое требование – записывать журналы базы данных в разные файловые и системные журналы в разные файлы в централизованном месте. Ниже вы найдете скрипты.

  • 192.168.1.150: централизованный сервер

  • 192.168.1.44: удаленный сервер

конфигурация удаленного сервера (192.168.1.44)

$ cat /etc/rsyslog.conf # Provides UDP syslog reception $ModLoad imudp.so $UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp.so $InputTCPServerRun 514 *.info;mail.none;authpriv.none;cron.none /var/log/messages #Save oracle rdbms audit trail to oracle_audit.log local0.info /u01/app/oracle/admin/prod/adump/oracle_audit.log *.* @192.168.1.150:514 

Централизованная конфигурация сервера (192.168.1.150):

 $ cat /etc/rsyslog.conf # Provides UDP syslog reception $ModLoad imudp.so $UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp.so $InputTCPServerRun 514 $template RemoteHost,"/backup/CentralizeLogLocation/Linuxlogs/%HOSTNAME%/%HOSTNAME%-%$YEAR%%$MONTH%%$DAY%.log" 

if ($ hostname! = '') then? RemoteHost

& ~

Файлы создаются в этом формате для каждого хоста в централизованном сервере thsc-vmmanager-20160614.log

Похоже, все в порядке – я получил то, что хочу, но оба журнала аудита базы данных Oracle и системные журналы записывают в один файл журнала. Я также прикрепляю скриншот.

Теперь необходимо разделить оба файла. Пожалуйста, расскажите мне, как я могу это достичь.

введите описание изображения здесь

Вы можете добавить средство syslog с %syslogfacility-text% в шаблон remoteHost следующим образом:

 $template RemoteHost,"/backup/CentralizeLogLocation/Linuxlogs/%HOSTNAME%/%HOSTNAME%-%syslogfacility-text%-%$YEAR%%$MONTH%%$DAY%.log" 

На вашем централизованном сервере вы создали шаблон, но вы его не использовали. Попробуйте добавить в конце

 if $fromhost-ip startswith 192.168.1.44 then -?RemoteHost & ~ 

или

 if $syslogfacility-text isequal 'local0' then -?RemoteHost & ~ 

или вы можете объединить их для регистрации вашего удаленного объекта local0, то есть журналов oracle, в один файл, а остальное на другое, например:

 if $fromhost-ip == '192.168.1.44' and $syslogfacility-text == 'local0' then /var/log/oracle.log & ~ *.* /var/log/messages 

Строка & ~ удаляет сообщения оракула после того, как они были сохранены в файл предыдущим if . См. Rsyslog.com за большой помощью и примерами.

Имена файлов в начальных строках, if могут быть зафиксированы как /var/log/oracle.log , или шаблон, который вы ранее определили, например -?OracleData . Поэтому вам нужно добавить, например,

 $template OracleData,"/backup/CentralizeLogLocation/Oracle/%HOSTNAME%/%HOSTNAME%-%$YEAR%%$MONTH%%$DAY%.log" if $syslogfacility-text isequal 'local0' then -?OracleData & ~ if $fromhost-ip startswith '192.168.1' then -?RemoteHost & ~ *.* /var/log/messages 

Поскольку ваши сообщения журнала оракула содержат слово «Oracle», вы можете альтернативно разделить эти сообщения с

 if $msg contains 'Oracle' then -?OracleData & ~ 

Обратите внимание, что порядок этих строк имеет значение. Шаблоны должны быть определены до их использования. Правила применяются к каждому сообщению по очереди. Если вы не поместите строки & ~ сразу после строк if , сообщение может оказаться в нескольких файлах журнала.