2017-10-20 11 views
0

logstash를 사용하고 로그에 Ruby 해시가 있습니다. 내가 필드에 "PARAMS"다양한logstash를 사용하여 동적 루비 해시를 구문 분석합니다.

id: 20171023080217469299836 time: 2017-10-23 08:02:17 +0500 login: 123 params: {:service_id=>21164, :user_id=>"771713"}       
    {                                    
     "@timestamp" => 2017-10-23T03:02:17.000Z,                         
     "@version" => "1",                               
      "host" => "elk",                             
       "id" => "20171023080217469299836",                         
      "login" => "123",                              
      "params" => "{:service_id=>21164, :user_id=>\"771713\"}",                                                      
    }                                    
    id: 20171022185107064615881 time: 2017-10-22 18:51:07 +0500 login: 321 params: {:unc=>"521130929", :id=>"107005094"}        
    {                                    
     "@timestamp" => 2017-10-22T13:51:07.000Z,  
     "@version" => "1",                               
      "host" => "elk",                             
       "id" => "20171022185107064615881",                         
      "login" => "321",                              
      "params" => "{:unc=>\"521130929\", :id=>\"107005094\"}",                                                       
    }                                    

매개 변수 이름을 구문 분석

id: 20171023080217469299836 time: 2017-10-23 08:02:17 +0500 login: 123 params: {:service_id=>21164, :user_id=>"771713"} 
id: 20171022185107064615881 time: 2017-10-22 18:51:07 +0500 login: 321 params: {:unc=>"521130929", :id=>"107005094"} 

그리고 : 같은 로그 보인다. 또한 추가 또는 삭제할 수 있습니다 (해시에 2 또는 4-5 매개 변수가 있음). 나는 (XML-필터 구문 분석과 같은) 다른 필드에이 구문 분석을

{ 
"parse.unc" : 521130929 
"parse.id" : 107005094 
} 

{ 
"parse.service_id" : 21164, 
"parse.user_id" : 771713 
} 

싶습니다 그러나이 작업을 수행하는 방법을 찾을 수 없습니다. Logstash 루비 파서가 있습니까?

+1

당신은 소스 데이터가 어떻게 생겼는지의 좋은 예를 보여주고, 수있는 당신이 그것을 같이 할 :

이렇게하면 다음과 같은 시각화를 줄 것이다? 분명히 당신은 단지 키가''해석 (parse)되기를 원하지 않는다. + key' ... – henrebotha

+0

정확히 해석 할 열쇠가 필요합니다. + 키 – Dees7

+0

'my_data.map {| key, value | [ "{{key}", value}} .to_h' 구문 분석 – henrebotha

답변

0

kv 필터와 grok 필터를 함께 사용할 수 있습니다. 당신에게 filter.conf의 logtash 파일에서

, 다음을 추가

grok { 
    match => { "message" => "id: %{INT:id} time: %{GREEDYDATA:time} login: %{INT:login} params: %{GREEDYDATA:params}" } 
} 
date { 
    match => ["time", "yyyy-MM-dd HH:mm:ss Z"] 
    } 
kv { 
    source => "params" 
    remove_char_key => ":" 
    remove_char_value => "\"" 
    field_split => "," 
    value_split => "=" 
    trim_key => "\{" 
    trim_value => "\}>\"" 
    prefix => "parse." 

} 

PS를 : 당신은 "{\를 사용하여 같은 특수 정규식 문자를 이스케이프해야합니다.

Kibana Visualization