Перед отправкой в 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 {
...
}
}
}