2014-11-24 5 views
0

우분투 서버에 ELK를 설치했습니다. 14.04. 그리고 이제는 모든 jboss 서버 로그를 log4j를 사용하여 보내고 싶었습니다.구성 ELK + log4j

logstash 구성 : 입력 conf의 파일을

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

필터의 conf 파일 :

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 로그는 모든 정보/활동을 보여줍니다.

편집 :이 내 제이 보스-의 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> 
+0

Logstash가 실제로 어떤 것을 수신했는지 확인 했습니까 (TCP 트래픽 스니퍼로 확인할 수 있습니까)? 움직이는 부분의 수를 줄이기 위해'elasticsearch' 출력을 간단한'stdout' 출력으로 대체하면 어떨까요? –

+0

나는 당신이 말한 것을했습니다. 그래서 TCP 트래픽에 대해 나는 포트 5000에서 'sniffit'을 사용했고 아무것도 표시하지 않았다. (sniffit을 사용하면 괜찮습니까?) 출력을 변경했는데 아무 것도 일어나지 않습니다. – Guinoutortue

+0

그래, Log4j 구성에 문제가 있음을 나타냅니다. Logger 구성에서 LOGSTASH appender를 어떻게 참조하고 있습니까? –

답변

2

나는 그것이 이전 게시물 알고 있지만, 누군가는 유용하게 사용할 수있는 - log4j에 SocketAppender 레이아웃을 사용할 수 없습니다를 docs for SocketAppender

참조

SocketAppenders는 레이아웃을 사용하지 않습니다. 직렬화 된 LoggingEvent 객체를 서버 측에 제공합니다.

로그 샷 구성에는 추가 필터가 필요하지 않습니다. Logstash log4j 플러그인 최소 구성으로 충분합니다.

input { 
    log4j { 
     data_timeout => 5 
     host => "0.0.0.0" 
     mode => "server" 
     port => 4560 
     debug => true 
     type => "log4j" 
    } 
    ... 
} 
0

이 경우에는 Elastic으로 직접 보낼 수 있습니다. 먼저 LogStash를 거치지 않아도됩니다. 필터를 사용하여 관심이없는 메시지를 쉽게 필터링 할 수 있습니다.

사용하려는 경우 여기에이 appender를 작성했습니다 (Log4J2 Elastic REST Appender). 그것은 시간 및/또는 이벤트 수를 기반으로 Elastic으로 보내기 전에 로그 이벤트를 버퍼링하는 기능을 가지고 있습니다 (_bulk API를 사용하여 한 번에 모든 것을 전송합니다). 메이븐 센트럴에 게시되어 꽤나 간단합니다.