Использование Elasticsearch и filebeats как мне выполнить конвейер только для определенных файлов?

#elasticsearch #kubernetes #elastic-stack #filebeat #elasticsearch-painless

#elasticsearch #kubernetes #эластичный стек #filebeat #elasticsearch-безболезненно

Вопрос:

Я хочу запускать свой конвейер только для файлов, путь к журналу которых содержит определенное ключевое слово, как мне сделать это в конвейере?

Конвейер (удалил мой шаблон и шаблоны, поскольку это не имеет значения):

 {
  "description" : "...",
  "processors": [
    {
      "grok": {
        "if": "ctx['log']['file']['path'].value.contains('keyword')",
        "field": "message",
      }
    }
  ]
}
 

В Kibana я вижу, что у меня есть log.file.путь доступен как метаданные, и я просто хочу запустить конвейер, если он содержит ключевое слово, но я получаю ошибку времени выполнения из-за моего оператора if.

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ: я думаю, проблема заключается в том, как я пытаюсь получить доступ к log.file.поле пути, поскольку я не знаю, как правильно ссылаться на него отсюда.

Ответ №1:

Вероятно, вы можете использовать Drop processor https://www.elastic.co/guide/en/elasticsearch/reference/current/drop-processor.html

 "drop": {
   "if": "ctx.log.file.path.contains('keyword');"
}
 

Вы можете найти более сложные примеры здесь:
https://www.elastic.co/guide/en/elasticsearch/reference/master/ingest-conditional-complex.html

Комментарии:

1. Я думал, что процессор удаления предотвращает индексацию документа, если он пропущен? Я бы хотел, чтобы он был проиндексирован, а не проходил через мой конвейер.

2. хорошо, просто не обрабатывается процессором grok? Если да, можете ли вы попробовать тот же синтаксис «if» для сброса в IF вашего процессора grok?