У меня следующая топология:
клиенты rsyslog -> сервер logstash -> elasticsearch и другой logstash, alienvault и локальный файл
Проблема в том, что alienvault хочет только необработанное сообщение без каких-либо полей json. Как я мог отправить только в alienvault только значение поля «сообщение»?
До сих пор я делал что-то вроде этого: - в logstash, в фильтре я настроил clone {clones => ["alien"]}. - вся остальная фильтрация находится над этой строкой - после всех остальных фильтров у меня есть что-то вроде ... if [type] == "alien" -> mutate -> remove_field (все поля, кроме [type]; - в вывод logstash у меня if [type] == "alien" udp {host, port, etc}
Но AlienVault все равно получает что-то вроде этого:
31 августа 17:01:41 {"message": "31 августа 09:01:35 bkp1 sshd [10538]: соединение с порта", "type": "alien"}
и я хочу, чтобы AlienVault получил только «31 августа, 09:01:35 bkp1 sshd [10538]: соединение с порта»
Возможно ли это с помощью logstash?
Спасибо
Хорошо, через два дня я наконец понял (на случай, если это кому-то еще понадобится). Итак, это результат работы AlienVault:
tcp {host => "" port => "" message_format => "% {message}" codec => line {format => "% {message}"}}
P.S. Я думаю, вам нужно, чтобы это был tcp, потому что вам нужен этот "message_format", который недоступен на выходе udp.