2016-06-21 4 views
1

Я следующий JSON в качестве входных данных для моего Logstash трубопровода:Уплотненного JSON синтаксический в Logstash

{ 
    "action": "UPLOAD", 
    "who": "123", 
    "when": "2016 Jun 14 12:00:12", 
    "data": { 
    "doc_id": "2345", 
    "doc_name": "xyz.pdf" 
    }, 
    "header": { 
    "proj_id": "P123", 
    "logtype": "userlogs" 
    }, 
    "comments": "Check comments" 
} 

Я хотел бы, чтобы выполнить следующие операции:

1) Разбирает этот JSON - такие, что есть новое поле «пользователь» со значением как конкатенация статической строки «Пользователь» с полем «кто» в JSON. Например, «Пользователь-123»

2) Хранить только релевантные поля в ES - Например, действие, которое, когда header.proj_id, header.logtype в ElasticSearch. И оставим остатки полей, не сохранив их.

Я попытался использовать следующую конфигурацию, но в настоящее время он сохраняет все поля моего JSON в Elastic Search.

input { 
    rabbitmq { 
     type => "businesslogs" 
     host => "localhost" 
     exchange => "auditexchange" 
     exchange_type => "fanout" 
     queue => "auditqueue" 
     auto_delete => false 
     durable => true 
     ack => true 
     codec => json 
    } 
} 

output { 
    if [type] == "businesslogs" { 
     elasticsearch { 
      hosts => ["localhost:9200"] 
      index => "businesslogs" 
      document_type => "%{action}" 
     } 
    } 
} 

ответ

1

Вам просто нужно добавить mutate фильтр, чтобы добавить/удалить некоторые поля в/из Вашего мероприятия:

filter { 
    mutate { 
     add_field => { 
      "user" => "User-%{who}" 
     } 
     remove_field => ["data", "comments"] 
    } 
} 
+0

Спасибо ... Он работал для меня. Также есть возможность, что я могу указать поле, которое будет использоваться как временная переменная, а не для хранения в ES. Например, могу ли я использовать поле «действие» только для указания «document_type» ES и не использовать его в качестве поля для индексации. – SuperCoder

+0

Да, вы можете либо добавить поле, либо удалить его, либо просто создать поле '[@metadata] [tmp_field]', и оно не будет сохранено в ES. – Val

Смежные вопросы