Создайте собственный шаблон Grok для сообщения, поданного в elasticsearch - PullRequest
0 голосов
/ 17 июня 2020

У меня возник вопрос, связанный с процессором Grok. Например, это мое сообщение

{
"message":"agentId:agent003"
}

Я хочу это проверить, и мой вывод должен мне что-то вроде этого

{
"message":"agentId:agent003",
"agentId":"agent003"
}

Может ли кто-нибудь помочь мне в этом, как этого добиться? Если я могу сделать это для одного поля, я могу сделать это для остальных полей. Заранее спасибо.

Это конвейер, который я создал в elasticsearch

PUT _ingest/pipeline/dissectpipeline
{
  "description" : "split message content",
  "processors": [
    {
      "dissect": {
      "field": "message",
      "pattern" : "%{apm_application_message.agentId}:%{apm_application_message.agentId}"
   }
    }
  ]
}

Централизованное управление добавило модуль filebeat другая конфигурация

- pipeline:
    if: ctx.first_char == '{'
    name: '{< IngestPipeline "dissectpipeline" >}'

Нет ошибки с моим filebeat, он работает нормально, но я не могу найти ни одного поля вроде apm_application_message.agentId в index.

Как убедиться, что мой конвейер работает или нет. Также, если я делаю что-то не так, дайте мне знать.

1 Ответ

0 голосов
/ 17 июня 2020

Вместо grok я бы предложил использовать dissect фильтр , который более интуитивно понятен и проще в использовании.

dissect {
  mapping => {
    "message" => "%{?agentId}:%{&agentId}"
  }
}

Если вы используете Filebeat, также есть возможность использовать dissect процессор :

processors:
  - dissect:
      tokenizer: "%{?agentId}:%{&agentId}"
      field: "message"
      target_prefix: ""
...