2016-12-31 2 views
0

У меня есть образец журнала. "a = 1 & b = 1 & c = 1"Задать вопрос о KV в logstash

Я отделил параметры, используя KV.

filter { 
    grok { 
    match => { "message" => "%{DATA:rawparam}} 
    } 

    KV { 
    source => "rawparam" 
    target => "param" 
    field_split = > "&?#" 
    allow_duplicate_values => false 
    } 
} 

Результаты следующие. Однако я хочу установить определенные поля param в корневую папку.

{ 
    "type" : "log", 
    "rawparam" : "a=1&b=1&c=1", 
    "param" : { 
    "a" = "1", 
    "b" = "2", 
    "c" = "3" 
    } 
} 

Ниже представлены результаты, которые я хочу. Возможно ли это в Logstash?

{ 
    "type" : "log", 
    "rawparam" : "a=1&b=1&c=1", 
    "param" : { 
    "a" = "1", 
    "b" = "2"  
    }, 
    "c" = "3" 
} 

ответ

0

Указав «цели», вы говорите logstash, где поставить все поля Kv, так что они в конечный итоге под «Params».

Вы можете либо удалить параметр 'target' (и logstash поместит все поля на корневом уровне), используйте mutate-> rename (чтобы переместить [params] [b] на [b]), или используйте ruby (для перебора большего набора полей для переименования).