Конфигурация ELK+log4j

Я установил ELK на сервер Ubuntu 14.04. И теперь я хотел отправить на это все свои журналы серверов jboss (используя log4j).

конфигурация logstash: входной файл конфигурации:

input {
    log4j {
        type => "log4j"
        port => 5000
    }
}

файл конфигурации фильтра:

filter {
    if [type] == "log4j" {
        grok {
            match => {"message" => MY_GROK_PARSE}
        }
    }
}

и выходной файл:

output {
    elasticsearch {
        embedded => true
    }
}

И чтобы закончить добавление log4j:

<appender name="LOGSTASH" class="org.apache.log4j.net.SocketAppender"> 
    <param name="Port" value="5000"/>
    <param name="RemoteHost" value="XXX.XXX.XXX.XXX"/> <!-- There is a real adress here ;-) -->
    <param name="ReconnectionDelay" value="50000"/> 
    <param name="LocationInfo" value="true"/> 
    <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n" />
    </layout>
</appender> 

Но ничего не происходит с этой конфигурацией. Так что я не знаю, что я неправильно понимаю. Другие мои приложения (консоль и локальный файл) работают нормально. В журнале elasticsearch отображается любая информация/активность.

Изменить: Подробнее о моем файле jboss-log4j.xml:

<appender name="Async" class="org.apache.log4j.AsyncAppender">
    <appender-ref ref="FILE" />
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="LOGSTASH" />
</appender>

<root>
    <priority value="INFO" />
    <appender-ref ref="Async" />
</root>

person Guinoutortue    schedule 24.11.2014    source источник
comment
Вы подтвердили, что Logstash действительно что-то получает (вы можете проверить с помощью анализатора TCP-трафика)? Что, если вы замените вывод elasticsearch простым выводом stdout, чтобы уменьшить количество движущихся частей?   -  person Magnus Bäck    schedule 24.11.2014
comment
Я сделал то, что ты сказал. Итак, для TCP-трафика я использовал 'sniffit' на порту 5000, и это ничего не показывает... (Можно ли использовать sniffit?) Я меняю вывод, и тоже ничего не происходит.   -  person Guinoutortue    schedule 24.11.2014
comment
Хорошо, это указывает на то, что что-то не так с конфигурацией Log4j. Как вы ссылаетесь на приложение LOGSTASH в конфигурации вашего регистратора?   -  person Magnus Bäck    schedule 24.11.2014
comment
Да, я добавляю часть log4j xml в свой пост, чтобы показать вам. Я уже отключил брандмауэр, чтобы быть уверенным.   -  person Guinoutortue    schedule 24.11.2014


Ответы (2)


Я знаю, что это старый пост, но кому-то он может показаться полезным — log4j SocketAppender не может использовать макет, см. документы для SocketAppender

SocketAppenders не используют макет. Они отправляют сериализованный объект LoggingEvent на сторону сервера.

Вам также не нужен дополнительный фильтр в конфигурации logstash. Достаточно минимальной конфигурации плагина Logstash log4j

input {
   log4j {
      data_timeout => 5
      host => "0.0.0.0"
      mode => "server"
      port => 4560
      debug => true
      type => "log4j"
   }
   ... 
}
person dimethyl    schedule 09.09.2015

В этом случае вы можете отправить его напрямую в Elastic. Нет причин сначала проходить LogStash. Вы можете легко использовать фильтр, чтобы отфильтровать сообщения, которые вам не интересны.

Я написал это приложение здесь, Log4J2 Elastic REST Appender, если вы хотите его использовать. У него есть возможность буферизовать события журнала в зависимости от времени и/или количества событий перед их отправкой в ​​Elastic (используя _bulk API, чтобы он отправлял все за один раз). Он был опубликован в Maven Central, так что это довольно просто.

person Marcelo Grossi    schedule 20.10.2017