Я следующий 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}"
}
}
}
Спасибо ... Он работал для меня. Также есть возможность, что я могу указать поле, которое будет использоваться как временная переменная, а не для хранения в ES. Например, могу ли я использовать поле «действие» только для указания «document_type» ES и не использовать его в качестве поля для индексации. – SuperCoder
Да, вы можете либо добавить поле, либо удалить его, либо просто создать поле '[@metadata] [tmp_field]', и оно не будет сохранено в ES. – Val