У меня возникают некоторые проблемы с отправкой данных журнала в мой экземпляр журнала logstash из простого приложения Java. В моем случае я стараюсь избегать использования log4j logback и вместо этого пакетировать события json в отдельных строках через необработанный сокет tcp. Причина этого в том, что я хочу отправить данные через лямбда-функцию aws в logstash, что означает, что сохранение журналов на диск может не сработать.
Мой файл конфигурации 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, указывающих на то, что может пойти не так.