2014-04-08 2 views
3

this one에 대한 후속 질문인지 또는 별도의 질문인지 확실하지 않습니다. 클릭하지 않는 LogStash에 대한 설명이 있습니다. 이를 위해 관련 질문에 사과드립니다. 아직도, 나는 여기서 내 마음을 떠날거야.LogStash를 사용하는 JSON 변형 (Log4J)

로그를 파일에 쓰는 앱이 있습니다. 각 로그 항목은 JSON 객체입니다. 내 .json 파일의 예는 다음과 같습니다

{ 
    "logger":"com.myApp.ClassName", 
    "timestamp":"1456976539634", 
    "level":"ERROR", 
    "thread":"pool-3-thread-19", 
    "message":"Danger. There was an error", 
    "throwable":"java.Exception" 
}, 
{ 
    "logger":"com.myApp.ClassName", 
    "timestamp":"1456976539649", 
    "level":"ERROR", 
    "thread":"pool-3-thread-16", 
    "message":"I cannot go on", 
    "throwable":"java.Exception" 
} 

이 형식은 Log4J2의 JsonLayout에서 만들어지는 것입니다. LogStash에 로그 항목을 가져 오기 위해 최선을 다하고 있습니다. 내가 /logs/out.log 열 때

input { 
    file { 
    type => "log4j" 
    path => "/logs/mylogs.log" 
    } 
} 
output { 
    file { 
    path => "/logs/out.log" 
    } 
} 

, 나는 엉망 참조 :이 작업을 수행하기 위해, 나는 다음과 같은 LogStash 구성 파일을 만들었습니다. JSON이 있습니다. 그러나 Log4J가 생성하는 "수준"속성 또는 "스레드"속성은 표시되지 않습니다. 레코드의 예는 다음에서 볼 수 있습니다.

{"message":"Danger. There was an error","@version":"1","@timestamp":"2014-04-08T17:20:10.035Z","type":"log4j","host":"ip-myAddress","path":"/logs/mylogs.log"} 

때때로 구문 분석 오류가 발생합니다. 나는 여전히 부동산이되기 위해 내 부동산이 필요합니다. 나는 그들이 메시지 부분이나 출력에 몰두하는 것을 원하지 않는다. 나는 이것이 코덱과 관련이 있다는 점에 직감이 있습니다. 아직 확실하지 않습니다. Logstash 입력 구성에서 코덱을 변경해야하는지 잘 모르겠습니다. 또는 출력 구성에서 입력을 변경해야하는 경우. 나는이 시점에서 절망적이되어서 진심으로 모든 도움에 감사 할 것입니다.

+0

죄송 합니다만, log4j 원본 파일과 logstash에서 동일한 내용을 갖는 목적은 무엇입니까? – vzamanillo

답변

1

로그 형식을 변경할 수 있습니까?

내가 로그의 끝에서

{ "logger":"com.myApp.ClassName", "timestamp":"1456976539634", "level":"ERROR", "thread":"pool-3-thread-19", "message":"Danger. There was an error", "throwable":"java.Exception" } 
{ "logger":"com.myApp.ClassName", "timestamp":"1456976539649", "level":"ERROR", "thread":"pool-3-thread-16", "message":"I cannot go on", "throwable":"java.Exception" } 

한 JSON 로그에 한 줄 당과 없이 당신의 로그 형식 ","을 변경 한 후, 나는 JSON 메시지를 구문 분석 아래의 구성을 사용할 수 있습니다 대응 필드.

input { 
    file { 
     type => "log4j" 
     path => "/logs/mylogs.log" 
     codec => json 
    } 
} 
+0

답변 해 주셔서 감사합니다. 불행히도, 코덱을 입력에 추가하지 못했습니다. 속성은 출력에 나타나지 않습니다. 출력은 사실 JSON입니다. 수준, 스레드 등 JSON 개체에 나타나지 않습니다. ( – user70192

+0

답변을 업데이트하고 시도해보십시오. 로그 형식을 변경 한 후 저에게 효과적입니다. –

0
input { 
    file { 
     codec => json_lines { charset => "UTF-8" } 
     ... 
    } 
} 

트릭을

0

@ Lim Lim이 옳았어요. Logstash 설정은 괜찮습니다. 한 줄에 각 로그 이벤트를 포함하도록 입력 JSON의 형식을 올바르게 지정해야합니다. Log4J2의 JsonLayout을 사용하면 매우 간단합니다. eventEol=truecompact=true으로 설정하면됩니다. (reference)

관련 문제