Квадратные скобки в Logsta sh Фильтры не ведут себя как элементы / записи массива, как в других языках программирования, например, Java.
[Applicant][0][Applicant_Income]
не подходит синтаксис для установки значения поля Applicant_Income
первого элемента (индекс на основе нуля) в массиве Applicant. Вместо этого вы создаете подэлементы 0, 1, 2 под элементом Applicant, как показано на рисунке 1.
Чтобы создать массив объектов, вы должны использовать плагин фильтра ruby (https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html). Поскольку вы можете выполнять произвольный код ruby с этим фильтром, он дает вам больше контроля / свободы:
filter {
csv {
separator => ","
skip_header => true
columns => [LoanID,Applicant_Income1,Occupation1,Time_At_Work1,Date_Of_Join1,Gender,LoanAmount,Marital_Status,Dependents,Education,Self_Employed,Applicant_Income2,Occupation2,Time_At_Work2,Date_Of_Join2,Applicant_Income3,Occupation3,Time_At_Work3,Date_Of_Join3]
}
mutate {
convert => {
"Applicant_Income1" => "float"
"Time_At_Work1" => "float"
"LoanAmount" => "float"
"Applicant_Income2" => "float"
"Time_At_Work2" => "float"
"Applicant_Income3" => "float"
"Time_At_Work3" => "float"
}
}
ruby{
code => '
event.set("Applicant",
[
{
"Applicant_Income" => event.get("Applicant_Income1"),
"Occupation" => event.get("Occupation1"),
"Time_At_Work" => event.get("Time_At_Work1"),
"Date_Of_Join" => event.get("Date_Of_Join1")
},
{
# next object...
}
]
'
}
date {
match => [ "Date_Of_Join1", "yyyy-MM-dd'T'HH:mm:ss.SSZZ" ]
}
date {
match => [ "Date_Of_Join2", "yyyy-MM-dd'T'HH:mm:ss.SSZZ" ]
}
date {
match => [ "Date_Of_Join3", "yyyy-MM-dd'T'HH:mm:ss.SSZZ" ]
}
mutate{
remove_field => [
"Applicant_Income1",
"Occupation1",
"Time_At_Work1",
"Date_Of_Join1",
"Applicant_Income2",
"Occupation2",
"Time_At_Work2",
"Date_Of_Join2",
"Applicant_Income3",
"Occupation3",
"Time_At_Work3",
"Date_Of_Join3"
]
}
}
С помощью event.set
вы добавляете поле в документ. Первый аргумент - это имя поля, второй - его значение. В этом случае вы добавляете поле «Кандидаты» в документ с массивом объектов в качестве его значения.
event.get
используется для получения значения определенного поля в документе. Вы получаете значение, передавая имя поля методу.
Пожалуйста, обратитесь к этому руководству https://www.elastic.co/guide/en/logstash/current/event-api.html, чтобы получить более подробную информацию об API события.
Я надеюсь, что я мог бы помочь вам.