Как сгладить свойства json, чтобы _source использовал ELK? - PullRequest
0 голосов
/ 28 марта 2019

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

1 Ответ

0 голосов
/ 28 марта 2019

удалите часть target => "e", ваша цель - корень документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...