Перед отправкой в ​​ElasticSearch отфильтруйте конкретное сообщение с помощью logstash.

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

2015-08-14 12:21:03 [31946] PASS  10.249.10.70  http://google.com
2015-08-14 12:25:00 [2492]  domainlist \"/etc/ufdbguard/blacklists\
2015-08-14 12:21:03 [31946] PASS 10.249.10.41 http://yahoo.com

Я хотел пропустить вторую строку, когда logstash / log forwardwarder обрабатывает этот журнал, можно ли указать ему пропустить любое сообщение журнала с ключевым словом ' domainlist '? Или разрешить регистрировать только сообщения с ключевым словом " PASS "?

2 ответа

Решение

Да, вы можете достичь этого с помощью drop фильтр.

В зависимости от того, как вы обрабатываете строку журнала и какие имена полей у вас есть, вы можете принять решение об удалении события, если оно соответствует некоторым критериям. Например, ниже вы можете увидеть условное grok фильтр, который проверяет, myfield содержит что-то отличное от значения PASS в этом случае это отбросит событие.

filter {
  grok {
      ...your parsing regexp here...
  }

  if [myfield] != "PASS" {
    drop { }
  }
}

Хотя ответ Вэла верен, вы можете сделать это еще одним способом, применив условную фильтрацию:

output {
  if "PASS" in [message] {
    elasticsearch {
      ...
    }
  }
}
Другие вопросы по тегам