#json #indexing #elastic-stack #flatten
#json #индексирование #elastic-stack #сгладить
Вопрос:
Предположим, у меня есть эти 2 сообщения журнала, отправленные в logstash / elasticsearch:
{
"events": [
{
"Message": "Get all motors",
"Level": "Information"
},
{
"Message": "Get all motors",
"Level": "Information"
}
]
}
Ожидаемый результат поиска:
"hits" : {
"total" : 2,
"max_score" : 1.0,
"hits" : [
{
"_source" : {
"@timestamp" : "2019-03-28T10:05:05.649Z",
"@version" : "1",
"Message" : "Get all motors",
"Level" : "Information"
}
},
{
"_source" : {
"@timestamp" : "2019-03-28T10:05:05.649Z",
"@version" : "1",
"Message" : "Get all motors",
"Level" : "Information"
}
}
]
}
Я использовал приведенную ниже конфигурацию logstash:
# Http input listening port 8080
input {
http {
#default host 0.0.0.0:8080
codec => json
}
}
# Separate the logs
filter {
split {
field => "events"
target => "e"
}
mutate {
remove_field => ["events", "headers"]
}
}
# Send the logs to Elasticsearch
output {
elasticsearch {
hosts => "localhost:9200"
index=>"mylog-%{ YYYY.MM.dd}"
document_type => "log"
}
}
Фактический результат поиска:
"hits" : {
"total" : 2,
"max_score" : 1.0,
"hits" : [
{
"_source" : {
"@timestamp" : "2019-03-28T10:05:05.649Z",
"@version" : "1",
"e" : {
"Message" : "Get all motors",
"Level" : "Information"
}
}
},
{
"_source" : {
"@timestamp" : "2019-03-28T10:05:05.649Z",
"@version" : "1",
"e" : {
"Message" : "Get all motors",
"Level" : "Information"
}
}
}
]
}
Разница заключается в:
- В фактическом результате информация моего журнала вложена в
e
свойство - Я хочу, чтобы все реквизиты журнала были сглажены (прямые дочерние элементы
_source
)
Документ Elasticsearch предлагает удалить target
из filter
:
filter {
split {
field => "events"
}
}
Но если я это сделаю, мой результат будет пустым:
"hits" : {
"total" : 2,
"max_score" : 1.0,
"hits" : [
{
"_source" : {
"@timestamp" : "2019-03-28T10:05:05.649Z",
"@version" : "1"
}
},
{
"_source" : {
"@timestamp" : "2019-03-28T10:05:05.649Z",
"@version" : "1"
}
}
]
}
Как я могу достичь ожидаемого результата?
Моя среда:
- Windows 10 x64 Pro
- ELK 6.7
- JDK 8u201
Ответ №1:
удалите target => "e"
часть, ваша цель — корень документа.
Комментарии:
1. Я пробовал это. Если я удалю его, информация журнала вообще не будет записана
2. Извините, я выразился недостаточно ясно, не удаляйте строку, но сделайте ее целевой для корня документа, а не «e»