Разделить поле из документа на несколько полей - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть записи в эластичном индексе, переменная «message» в индексе содержит все сообщения журнала. Я хотел разделить эти данные на несколько полей, таких как timstamp, ip и т. Д. Примечание: бревна закачиваются прямо в эластик из нашего приложения с помощью POST.

Я создал grok, чтобы разделить эту информацию, но я не уверен, как это преобразовать на лету.

  {
    "_index" : "logs_exception",
    "_type" : "_doc",
    "_id" : "9RI-BGoBwdzZ5ffB3_Sj",
    "_score" : 2.4795628,
    "_source" : {
      "CorrelationId" : "bd3fc7d6-ca39-44e1-9a59-xxasdasd1",
      "Message" : "2019-04-10 10:36:27,780 [8] ERROR LoggingService.TestConsole.Program [(null)] - System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain."
    }

можем ли мы создать эластичный конвейер для подачи из одного индекса и применить grok и отодвинуть его к другому индексу? или какой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Лучший способ сделать это - настроить Ingest node на предварительную обработку документов перед их индексацией в es.

В вашем случае вам необходим Grok Processor , чтобы сопоставить поле сообщения и разделить его на поля. Ниже приведен пример определения конвейера с Grok Processor для загрузки вашего документа в эластичная

{
      "description" : "...",
      "processors": [
        {
          "grok": {
            "field": "message",
            "patterns": ["%{DATESTAMP:timestamp}%{SPACE}%{SPACE}\[(?<misc1>.*)\]%{SPACE}%{WORD:loglevel}%{SPACE}%{JAVACLASS:originator}%{SPACE}\[(?<misc2>.*)\]%{SPACE}%{GREEDYDATA:data}"]
          }
        }
      ]
}

С приведенным выше определением конвейера ваши данные будут проиндексированы, как показано ниже.

{
    "_index" : "logs_exception",
    "_type" : "_doc",
    "_id" : "9RI-BGoBwdzZ5ffB3_Sj",
    "_score" : 2.4795628,
    "_source" : {
      "CorrelationId" : "bd3fc7d6-ca39-44e1-9a59-xxasdasd1",
      "timestamp" : "19-04-10 10:36:27,780",
      "misc1" : 8,
      "loglevel": ERROR,
      "originator": "LoggingService.TestConsole.Program",
      "misc2": (null),
      "data" : "- System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain.",
      "Message" : "2019-04-10 10:36:27,780 [8] ERROR LoggingService.TestConsole.Program [(null)] - System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain."
    }
0 голосов
/ 11 апреля 2019

Вы можете использовать фильтр JSON:

filter {
    json => {
        source=>message
        target=>event
    }
}
...