0

Мне было интересно узнать, можно ли отправлять только специальные сообщения журнала в elasticsearch через logstash? EG, скажем, у меня есть эти сообщения в файле протокол:Отфильтровать конкретное сообщение с помощью logstash перед отправкой на ElasticSearch

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/журнале процесса форвардера этого журнала, можно поручить это пропустить любое сообщение журнала с ключевым словом 'domainlist'? Или разрешить только сообщения журнала с ключевым словом 'PASS'?

ответ

2

Да, вы можете достичь этого, используя drop filter.

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

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

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

Спасибо за вашу помощь :). –

1

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

output { 
    if "PASS" in [message] { 
    elasticsearch { 
     ... 
    } 
    } 
}