У меня возникли проблемы с отправкой данных журнала в экземпляр logstash из простого приложения Java. Для моего варианта использования я стараюсь избегать использования log4j logback и вместо этого запускать json-события на отдельных строках через raw tcp-сокет. Причина этого заключается в том, что я ищу, чтобы отправить данные через aws лямбда-функцию в logstash, что означает, что сохранение журналов на диске может не сработать.Отправка данных в logstash через tcp
Мой конфигурационный файл logstash выглядит следующим образом:
input {
tcp {
port => 5400
codec => json
}
}
filter{
json{
source => "message"
}
}
output {
elasticsearch {
host => "localhost"
protocol => "http"
index => "someIndex"
}
}
Мой Java код прямо сейчас только открывает сокет TCP к серверу logstash и отправки события непосредственно.
Socket socket = new Socket("logstash-hostname", 5400);
DataOutputStream os = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
os.writeBytes("{\"message\": {\"someField\":\"someValue\"} }");
os.flush();
socket.close();
Приложение подключается к logstash хозяина должным образом (если logstash не вверх исключение создается при подключении), но никаких событий не появляется в нашем ES кластере. Любые идеи о том, как это сделать, очень ценятся!
Я не вижу соответствующих журналов в logstash.err, logstash.log или logstash.stdout, указывая на то, что может быть неправильным.
Если определить входные данные как JSON, вам не нужно запускать JSon фильтр. Чтобы узнать, что делает logstash, добавьте строфу «stdout {codec => rubydebug}» и посмотрите, что попадает в ваши журналы stdout. –
с такой же проблемой .. кажется, что tcp прослушивает netcat .. но logstash не получает или обрабатывает вход?!? – ifelsemonkey