#elasticsearch
Вопрос:
Я анализирую ввод mongodb в logstash, файл конфигурации выглядит следующим образом:
input {
mongodb {
uri => "<mongouri>"
placeholder_db_dir => "<path>"
collection => "modules"
batch_size => 5000
}
}
filter {
mutate {
rename => { "_id" => "mongo_id" }
remove_field => ["host", "@version"]
}
json {
source => "message"
target => "log"
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["localhost:9200"]
action => "index"
index => "mongo_log_modules"
}
}
Выводит 2/3 документов из коллекции в elasticsearch.
{
"mongo_title" => "user",
"log_entry" => "{"_id"=>BSON::ObjectId('60db49309fbbf53f5dd96619'), "title"=>"user", "modules"=>[{"module"=>"user-dashboard", "description"=>"User Dashborad"}, {"module"=>"user-assessment", "description"=>"User assessment"}, {"module"=>"user-projects", "description"=>"User projects"}]}",
"mongo_id" => "60db49309fbbf53f5dd96619",
"logdate" => "2021-06-29T16:24:16 00:00",
"application" => "mongo-modules",
"@timestamp" => 2021-10-02T05:08:38.091Z
}
{
"mongo_title" => "candidate",
"log_entry" => "{"_id"=>BSON::ObjectId('60db49519fbbf53f5dd96644'), "title"=>"candidate", "modules"=>[{"module"=>"candidate-dashboard", "description"=>"User Dashborad"}, {"module"=>"candidate-assessment", "description"=>"User assessment"}]}",
"mongo_id" => "60db49519fbbf53f5dd96644",
"logdate" => "2021-06-29T16:24:49 00:00",
"application" => "mongo-modules",
"@timestamp" => 2021-10-02T05:08:38.155Z
}
Похоже, что вывод stdout выбрасывает непарассируемый код в
«вход в систему»
После добавления полей «переименовать» «модули» не будут добавлять поля.
Я пробовал фильтр мутирования grok, но после _id %{ДАННЫЕ}, %{СТРОКА в КАВЫЧКАХ} и %{СЛОВО} не работают для меня.
Я также попытался обновить вложенное сопоставление в индексе, но, похоже, это тоже не сработало
Есть ли что-нибудь еще, что я могу попытаться получить ПОЛНОСТЬЮ вложенный код в elasticsearch?
Ответ №1:
Решение состоит в том, чтобы фильтровать с помощью мутации
mutate { gsub => [ "log_entry", "=>", ": " ] }
mutate { gsub => [ "log_entry", "BSON::ObjectId('([0-9a-z] )')", '"1"' ]}
json { source => "log_entry" remove_field => [ "log_entry" ] }
Выходы в stdout
"_id" => "60db49309fbbf53f5dd96619",
"title" => "user",
"modules" => [
[0] {
"module" => "user-dashboard",
"description" => "User Dashborad"
},
[1] {
"module" => "user-assessment",
"description" => "User assessment"
},
[2] {
"module" => "user-projects",
"description" => "User projects"
}
],