2016-12-23 5 views
0

파일에서 json 콘텐츠를 추출해야하는 로그 파일이 하나 있는데 logstash json 필터를 사용하여 구문 분석해야합니다. 내가 한 grok 패턴을 썼지 만 제대로 작동하지 않습니다. 아래는 내 로그 파일입니다.grok/정규식을 사용하여 로그 파일에서 json 값을 분할하는 방법

2016-12-18 12:13:52.313 -08:00 [Information] 636176600323139749 1b2c4c40-3da6-46ff-b93f-0eb07a57f2a3 18 - API: GET https://aaa.com/o/v/S?$filter=uid eq '9'&$expand=org($filter=org eq '0') 
{ 
    "Id": "1b", 
    "App": "D", 
    "User": "", 
    "Machine": "DC", 
    "RequestIpAddress": "xx.xxx.xxx", 
    "RequestHeaders": { 
    "Cache-Control": "no-transform", 
    "Connection": "close", 
    "Accept": "application/json" 
}, 
    "RequestTimestamp": "2016-12-18T12:13:52.2609587-08:00", 
    "ResponseContentType": "application/json", 
    "ResponseContentBody": { 
    "@od","value":[ 
    { 
     "uid":"","sId":"10,org":[ 
     { 
      "startDate":"2015-02-27T08:00:00Z","Code":"0","emailId":"[email protected]" 
     } 
     ] 
    } 
    ] 
}, 
    "ResponseStatusCode": 200, 
    "ResponseHeaders": { 
    "Content-Type": "application/json;" 
}, 
    "ResponseTimestamp": "2016-12-18T12:13:52.3119655-08:00" 
} 

내 grok 수 패턴

grok {    
     match => [ "message","%{TIMESTAMP_ISO8601:exclude}%{GREEDYDATA:exclude1}(?<exclude2>[\s])(?<json_value>[\W\w]+)"]      
    } 
+0

패턴을 캡처하고 싶지 않다면 "exclude", "exclude1"등의 필요없이 이름을 그대로 둘 수 있습니다. –

답변

0

가정이 모두 하나의 메시지 (이것은 여러 줄하지, 또는 전에 지금 결합 된)과 URI와 JSON이 grok 수 사이의 공간이있다 패턴이 작동합니다 :

%{TIMESTAMP_ISO8601} %{NOTSPACE:timezone} \[%{WORD:severity}] %{WORD:field1} %{UUID:field2} %{NUMBER:field3} - API: %{WORD:verb} (?<field4>[^\{]*) %{GREEDYDATA:json} 
그것은 % {URI}를 사용하는 것이 좋았을 것이다, 그러나 당신이 가지고있는 문자열이 유효한 URI하지

(가 이스케이프 SPAC을 포함 es).

+0

정확하게 출력하지 못합니다. 아래는 귀하의 제안을 사용하여 얻은 결과물입니다. – Mangoski

+0

'{ "TIMESTAMP_ISO8601": [[ "2016-12-18 12 : 13 : 52.313"]], "YEAR": [[ "2016"]], "MONTHNUM": [[ "12"]], "MONTHDAY "[[]], [HOUR] : [["12 ", null]],"MINUTE ": [["13 ", null]],"SECOND ": [["52.313 "]],"ISO8601_TIMEZONE " : [[null]], "timezone": [[ "-08 : 00"]], "심각도": [[ "Information"]], "field1": [[ ""636176600323139749]], "field2" [[ "18"]], [BASE10NUM] : [[ "18"]], "동사": [[ "GET"]], [field2] ], "field4": [[ "https://aaa.com/o/v/S?$filter=uid eq '9'& $ expand = org ($ filter = org eq"]], "json": [[ " '0')"]]]}' – Mangoski