forum.bitel.ru
http://forum.bitel.ru/

Логирование в удаленный syslog
http://forum.bitel.ru/viewtopic.php?f=22&t=8840
Страница 1 из 1

Автор:  Иван [ 16 янв 2014, 23:52 ]
Заголовок сообщения:  Логирование в удаленный syslog

Попробовал
в log4j_server.properties
Код:
log4j.rootLogger=ALL, null                                                                                                                                                 
log4j.appender.null=org.apache.log4j.varia.NullAppender                                                                                                                   
                                                                                                                                                                           
log4j.logger.server=INFO, A3-                                                                                                                                             
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender                                                                                                                 
log4j.appender.SYSLOG.threshold=WARN                                                                                                                                       
log4j.appender.SYSLOG.syslogHost=192.168.1.4                                                                                                                             
log4j.appender.SYSLOG.facility=LOCAL3                                                                                                                                     
log4j.appender.A3.layout=org.apache.log4j.PatternLayout                                                                                                                   
log4j.appender.A3.layout.ConversionPattern=%-7p%-20d{dd.MM.yyyy HH:mm:ss} %m%n                                                                                             
                                                                                                                                                                           
log4j.logger.script=INFO, A4                                                                                                                                               
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender                                                                                                                 
log4j.appender.SYSLOG.threshold=WARN                                                                                                                                       
log4j.appender.SYSLOG.syslogHost=192.168.1.4                                                                                                                             
log4j.appender.SYSLOG.facility=LOCAL4                                                                                                                                     
log4j.appender.A4.layout=org.apache.log4j.PatternLayout                                                                                                                   
log4j.appender.A4.layout.ConversionPattern=%-7p%-20d{dd.MM.yyyy HH:mm:ss} %m%n   


Но почему то не идут логи.
Вопрос тривиальный думаю, но не смог найти в доках.
Поможете?

Автор:  Artur [ 17 янв 2014, 09:19 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

проделайте следующее:
1) Зайдите на машину, на которой будете собирать логи, и проверьте в файле /etc/services наличие строки syslog 514
При желании можете изменить значение порта, на котором syslogd будет слушать сообщения
2) Необходимо изменить строку запуска демона syslogd. В моем случае это прописано в конфиге утилиты inetutils-syslogd (/etc/default/inetutils-syslogd), где прописано: SYSLOGD_OPTS="--no-forward -r"
Опция -r как раз отвечает за запуск удаленного прослушивания сообщений.
3) Перезапустите демон syslogd и проверьте, поднял ли он udp-соединение
netstat -an | grep udp
В выводе будет указаны все поднятые соединения по протоколу udp, в том числе должно быть указано 0.0.0.0:514 0.0.0.0:*.
Если подобной строки нет, то проверьте опции запуска демона syslogd
4) в конфиге syslog'а необходимо настроить в какой файл слать получаемые по сети сообщения
это нужно прописать в файле /etc/syslog.conf в сексии обозначенной как "Log by facility". как раз по этим самым facilities можно разграничивать в какие файлы писать лолги. есть стандартные facility, такие как: auth, kern, user, mail, news и др. Пользовательские facilities имеют имена local0 - local6.
таким образом в конфиге нужно прописать
local0 /var/log/myfile.log

Именно эту facility (local0) мы и пропишем в конфиге log4j.

5) правим конфиг log4j:

<appender name="syslog" class="org.apache.log4j.net.SyslogAppender">
<param name="Facility" value="LOCAL0"/>
<param name="SyslogHost" value="192.168.111.92:<порт>"/>
<param name="Threshold" value="WARN"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
</layout>
</appender>

<порт> нужно указывать в случае, если вы изменили на первом шаге стандартное значение порта.
ЕСли у вас log4j настраивается по подобию Preferences, то просто используйте названия параметров из xml.

Вроде все. Перезапускаем сервер и смотрим результаты. Если что то непонятно - пишите.

Автор:  Иван [ 17 янв 2014, 10:51 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Спасибо большое.
По 1. пункту, я пропущу, потому что syslog сервер есть, и он точно работает, собирая со всей сети события.

А по второму, да, немного не понятно.
Я вписал syslog в log4j.xml
Вот так выглядит моя конфигурация полностью:

https://gist.github.com/korjavin/8468583

Но, после перезапуска сервера. он по прежнему пишет в log/server.log

Автор:  Artur [ 17 янв 2014, 10:55 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Вам нужно в аппендер с именем ASYNC добавить ссылку на ваш аппендер вот так:
Код:
<appender-ref ref="syslog" />

Автор:  Иван [ 17 янв 2014, 11:05 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Я добавил:

Код:
    <appender name="ASYNC" class="ru.bitel.common.logging.Log4jAsyncAppender">
        <appender-ref ref="syslog" />
        <appender-ref ref="APPLICATION" />
        <appender-ref ref="SCRIPT" />
        <appender-ref ref="ERROR" />
    </appender>


Что то еще осталось. Не идут логи.
Притом что я потестировал через logger, идут, т.е это точно не сетевые какие то проблемы.
И файл server.log по прежнему заполняется.

Автор:  Иван [ 17 янв 2014, 11:06 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Только что на удаленный сислог пришло сообщение

01-17/10:05:31 ERROR [pool-1-thread-2] Calculator - Contract 2077 sid=21 calcMode=null

Т.е. ERROR отправился.
Причем он от другого демона - scheduler.
Видимо какой то мелочи мне не хватает.

Автор:  Artur [ 17 янв 2014, 11:49 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Параметр Threshold выставите значение INFO

Автор:  Иван [ 17 янв 2014, 11:56 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Огромное спасибо. Да, это решение.

Автор:  Злой ребёнок [ 21 янв 2014, 11:49 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Решили попробовать писать логи радиуса на удаленный syslog-сервер. Но вот ведь незадача - логи на удаленный сервер отправляются, но пишутся в один файл. Как разбить пофайлово - чтобы radius.log в radius.log писало, а connection.log в connection.log?

Сейчас в log4j-radius.xml прописано

Код:
        <appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL0"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>
               
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>
        </appender>



В конфиге rsyslog.conf

Код:
local0.*                                                /var/log/servers/radius.log


Правильно ли я понимаю, что надо в log4j-radius.xml для каждого лога (radius.log, processor.log) прописать свой Facility (LOCAL1, LOCAL2 & etc) и rsyslog.conf прописать эти local1.*, local2.* с указанием пути до файла? Если да, то можно примерчик аппендера? :roll:

Автор:  Artur [ 21 янв 2014, 12:06 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Поняли мысль верно. А пример аппендера выше с той лишь разницей, что нужно указывать эти самые local0-local6 в параметре <param name="Facility" value="LOCAL0"/>

Автор:  Злой ребёнок [ 21 янв 2014, 13:40 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Спасибо, работает. :)
Оказывается, что ещё надо не забыть filter class в аппендере прописать, чтобы все в один файл не валилось.

Код:
appender name="PROCESSOR" class="org.apache.log4j.net.SyslogAppender">                                               
                <param name="Facility" value="LOCAL2"/>                                                                       
                <param name="SyslogHost" value="192.168.1.1:514"/>                                                       
                <param name="Threshold" value="INFO"/>                                                                       
                                                                                                                             
                <layout class="org.apache.log4j.PatternLayout">                                                               
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />                   
            </layout>                                                                                                         
                     <filter class="ru.bitel.common.logging.Log4JMDCFilter">                                               
                        <param name="key" value="nestedContext" />                                                           
                        <param name="value" value="processor" />                                                             
                </filter>                                                                                                                                                                                                             
        </appender>

Автор:  Иван [ 21 янв 2014, 13:42 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Покажите целиком пожалуйста

Автор:  Злой ребёнок [ 21 янв 2014, 14:18 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Целиком, так целиком.

rsyslog.conf

Код:
local1.*                                                /var/log/servers/radius.log                                           
local2.*                                                /var/log/servers/processor.log                                       
local3.*                                                /var/log/servers/connection.log                                       
local4.*                                                /var/log/servers/script.log                                           
local5.*                                                /var/log/servers/mq.log                                               
local6.*                                                /var/log/servers/error.log                                           
local7.*                                                /var/log/servers/collector.log                                       


log4j-radius.xml
Код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>


        <appender name="RADIUS" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL1"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>
               
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>
                        <filter class="ru.bitel.common.logging.Log4JMDCFilter">
                        <param name="key" value="nestedContext" />
                        <param name="value" value="radius" />
                </filter>

        </appender>


        <appender name="PROCESSOR" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL2"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>
               
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>
                        <filter class="ru.bitel.common.logging.Log4JMDCFilter">
                        <param name="key" value="nestedContext" />
                        <param name="value" value="processor" />
                </filter>

        </appender>
       
        <appender name="CONNECTIONS" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL3"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>
               
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>
                        <filter class="ru.bitel.common.logging.Log4JMDCFilter">
                        <param name="key" value="nestedContext" />
                        <param name="value" value="connections" />
                </filter>

        </appender>


        <appender name="SCRIPT" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL4"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>
               
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>
                        <filter class="ru.bitel.common.logging.Log4JMDCFilter">
                        <param name="key" value="nestedContext" />
                        <param name="value" value="script" />
                </filter>

        </appender>

        <appender name="MQ" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL5"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>         
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>
                        <filter class="ru.bitel.common.logging.Log4JMDCFilter">
                        <param name="key" value="nestedContext" />
                        <param name="value" value="mq" />
                </filter>

        </appender>

        <appender name="ERROR" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL6"/>
                <param name="Threshold" value="ERROR" />
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%X{nestedContext} %d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
                </layout>

        </appender>

        <appender name="COLLECTOR" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL7"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>         
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>
                        <filter class="ru.bitel.common.logging.Log4JMDCFilter">
                        <param name="key" value="nestedContext" />
                        <param name="value" value="collector" />
                </filter>

        </appender>
<!--
        <appender name="LISTENER" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL8"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>         
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>
                        <filter class="ru.bitel.common.logging.Log4JMDCFilter">
                        <param name="key" value="nestedContext" />
                        <param name="value" value="flowListener" />
                </filter>

        </appender>
-->

        <appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender">
                <param name="Facility" value="LOCAL0"/>
                <param name="SyslogHost" value="192.168.1.1:514"/>
                <param name="Threshold" value="INFO"/>
               
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n" />
            </layout>

        </appender>

        <appender name="ASYNC" class="ru.bitel.common.logging.Log4jAsyncAppender">
                <appender-ref ref="SYSLOG" />
                <appender-ref ref="RADIUS" />
                <appender-ref ref="PROCESSOR" />
                <appender-ref ref="SCRIPT" />
                <appender-ref ref="COLLECTOR" />
                <appender-ref ref="LISTENER" />
                <appender-ref ref="MQ" />
                <appender-ref ref="ERROR" />
        </appender>

        <category name="connections" additivity="false">
                <appender-ref ref="CONNECTIONS" />
                <appender-ref ref="ERROR" />
        </category>
        <category name="processor" additivity="false">
                <appender-ref ref="PROCESSOR" />
                <appender-ref ref="ERROR" />
        </category>
        <category name="script" additivity="false">
                <appender-ref ref="SCRIPT" />
                <appender-ref ref="ERROR" />
        </category>
        <category name="radius" additivity="false">
                <appender-ref ref="RADIUS" />
                <appender-ref ref="ERROR" />
        </category>
       
        <root>
                <priority value="INFO, SYSLOG" />
                <appender-ref ref="ASYNC" />
        </root>

</log4j:configuration>

Автор:  Злой ребёнок [ 21 янв 2014, 14:25 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Единственное, у меня radius.out остался на машине с радиусом.

upd: разобрались, почему.

radius.sh
Код:
if [ "$1" = "start" ]; then                                                                                     
        nohup  ${JAVA_HOME}/bin/java -Djava.net.preferIPv4Stack=true -Dapp.name=BGRadiusVPN -Xmx9000m -Dlog4j.configuration=log4j-radius.xml -Dlog.dir.path=log/ -cp $CLASSPATH bitel.billing.server.radius.Radius $1 $2 $3 $4 $5 $6 > ./log/radius.out 2>&1 &

Автор:  stark [ 23 янв 2014, 15:26 ]
Заголовок сообщения:  Re: Логирование в удаленный syslog

Выложили бы лучше в wiki

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/