Log4J2에 의해 생성 된 일부 로그 파일이 있습니다. log4j2.xml 구성 파일의 JSONLayout을 사용하여 .json 파일로 로그를 출력합니다. 내 JSONLayout는 다음과 같이 정의된다 :Logstash에서 JSON 구문 분석
로그가 내 컴퓨터의 로그 파일에 입력받을 때, 그들은 추가됩니다<JSONLayout complete="false"></JSONLayout>
, 한 또 다른-후, 그리고 logs.log에서 다음과 같이 :
{
"logger":"com.mycompany.myLogger",
"timestamp":"1396792374326",
"level":"ERROR",
"thread":"pool-2-thread-2",
"message":"System: unable to perform action",
"throwable":"java.lang.NullPointerException\\n\tat com.myCompany.MyClass $.java:432)\\n\tat java.lang.Thread.run(Thread.java:744)\\n"
},
이 JSON을 구조화하여 ElasticSearch에서 쿼리 할 수 있습니다. 그 과정에서 모든 레코드에 사용자 정의 필드를 추가하려고합니다. 이를 위해 다음을 사용하고 있습니다.
input {
file {
type => "json"
path => "/var/logs/myApp/logs.log"
}
}
filter {
json {
add_tag => [ "HardcodedTagName"]
source => "message"
}
}
output {
elasticsearch {
protocol => "http"
codec => "json"
host => "[myServerAddress]"
port => "9200"
}
}
이상하게도 내 커스텀 태그는 추가되지 않을 것입니다. 동시에 JSON을 ElasticSearch에서 쿼리 할 수있는 필드로 나누고 싶습니다. 내가 질의하고 싶은 것들은 분명히 가능합니다. 그들은 :
- 수준
- 메시지
아직, 나는이 정보를 얻이 수없는 것
{
"_index": "logstash-2014.04.07",
"_type": "json",
"_id": "tG-s6-5pSnq5HZwLhM6Dxg",
"_score": null,
"_source": {
"message": " \"message\":\"System: unable to perform action\"\r",
"@version": "1",
"@timestamp": "2014-04-07T18:01:38.739Z",
"type": "json",
"host": "ip-MyipAddress",
"path": "/var/logs/myApp/logs.log"
},
"sort": [
1396893698739,
1396893698739
]
}
무엇 가장 나를 놀라게하는 로그 레벨도이되지 않는 것입니다 : 내가 키바에서 JSON 기록을 볼 때, 난 그냥 이런 식으로 뭔가를 참조하십시오. 스레드 정보도 마찬가지입니다. 나는 필터를 사용하는 Log4J 예제의 블로그 게시물을 찾을 수 없다는 것에 놀랐다. 어떤 도움을 진심으로 감사드립니다!