Предположим, у меня есть два этих сообщения журнала, отправленных в logstash /asticsearch:
{
"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