Я хотел бы, чтобы мои данные журнала для серверов, таких как Nginx, направлялись непосредственно в Logstash по сети. Logstash имеет встроенные обработчики сокетов TCP и UDP, которые идеально подходят для получения данных, но их отправка является проблемой. Я знаю, что есть грузоотправитель, а что нет, но отсутствие необходимости управлять журналами на диске было бы неплохо для проектов, где эти данные журнала не так важны (например, внутренние серверы разработки).
Есть ли хитрый способ создать сокет, но с путем в файловой системе, для которого Nginx будет писать, как любой другой файл журнала? Если это возможно, как я могу настроить буферизацию и переподключение? Я бы не хотел, чтобы сокет умер, а обратное давление на журналы начало связывать сервер, ведущий журнал.
Я не пробовал, но именованный канал с netcat на дальнем конце, вероятно, поможет. В случае, если netcat умирает, вы должны запустить его под управлением процесса (например, daemontools, runit или systemd), чтобы он возродился автоматически.
Я бы не рекомендовал это как долгосрочное решение, но это может быть полезно для отладки, работает ли logstash или ваш грузоотправитель должным образом.
На стороне logstash:
input {
tcp {
port => 9000
}
}
На стороне вашего клиента:
cat logfile.log | nc logstash-server 9000