add_field logstash после преобразования значения в Json

У меня есть файл журнала, содержащий журнал в этой форме

"{\"user_id\":\"79\",\"timestamp\":\"2016-12-28T11:10:26Z\"‌​,\"operation\":\"ver‌​3 - Requested for recommended,verified handle information\",\"data\":\"\",\"content_id\":\"\",\"channel_id‌​\":\"\"}"

для которого я написал конфигурацию logstash

input {
beats {
    port => "5043"
}
}
filter{
    grok {
       match => { "message" => "%{QS:mydata}"}
    }
    json {
       source => "message"
       target => "parsedJson"
    }
    mutate {
       add_field =>{
        "user_id" => "%{[parsedJson.user_id]}"
        "operation" => "%{[parsedJson][operation]}"
        "data"=> "%{[parsedJson][operation]}"
       }
     }
}
output {
    elasticsearch {
       hosts => [ "localhost:9200" ]
    }
}

в основном я пробовал много перестановок, чтобы получить значение, но в данных elasticsearch это похоже на изображение ниже. Я не могу получить данные из JSON и присвоить новое значение. пожалуйста помоги. введите здесь описание изображения


person Yatender Singh    schedule 02.01.2017    source источник


Ответы (1)


Что, если вы попытаетесь включить add_field в фильтр json и сделать mydata source в json. Также убедитесь, что вы не разделяете значение add_field точкой .:

json {
     source => "mydata"
     target => "parsedJson"
     add_field => {
      "user_id" => "%{[parsedJson][user_id]}}"
      "operation" => "%{[parsedJson][operation]}}"
      "data" => "%{[parsedJson][data]}}"
     }
     remove_field=>["mydata"] <-- you can ignore this if you really don't want to remove
}

Надеюсь, поможет!

person Kulasangar    schedule 02.01.2017
comment
операция %{[parsedJson][operation]}} user_id %{[parsedJson][user_id]}} эти значения не анализируются, которые я получаю из parsedJson - person Yatender Singh; 03.01.2017
comment
@YatenderSingh привет, я обновил ответ, что, если вы попытаетесь добавить поле в сам фильтр json? Посмотрите также эту ветку. - person Kulasangar; 03.01.2017
comment
нужно заметить, что когда я просто добавляю ссылку на parsedJson в любое новое поле, оно получает его значение рекомендуемая, проверенная информация об дескрипторе, данные:, content_id:, channel_id‌​:}, но когда я пытаюсь получить значение внутри parsedJson, оно не извлекается и не устанавливает его значение в виде строки. - person Yatender Singh; 03.01.2017
comment
Я попытался запустить и использовать API событий, используя рубиновый код.. но он также не может получить значение ключа объекта JSON. не знаю, что не так. - person Yatender Singh; 03.01.2017