2014-04-07 2 views
4

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 예제의 블로그 게시물을 찾을 수 없다는 것에 놀랐다. 어떤 도움을 진심으로 감사드립니다!

  • 답변

    8

    json 필터를 사용할 필요가 없습니다. 입력시 코덱 형식을 지정할 수 있습니다.

    input { 
        file { 
         type => "json" 
         path => "/var/logs/myApp/logs.log" 
         codec => json 
        } 
    } 
    

    Logstash는 자동으로 로그를 json 형식으로 구문 분석하고 해당 필드를 추가합니다.