我希望 Nginx 等服务器的日志数据通过网络直接发送到 Logstash。Logstash 内置了 TCP 和 UDP 套接字处理程序,非常适合接收数据,但发送数据却是个问题。我知道有发送程序之类的,但对于日志数据不那么重要的项目(例如内部开发服务器),不必在磁盘上管理日志就好了。
有没有一种巧妙的方法可以创建一个套接字,但该套接字在文件系统上有一个路径,Nginx 会像写入其他日志文件一样写入该路径?假设这是可能的,我该如何配置缓冲和重新连接?我不希望套接字死机,日志的背压开始占用执行日志记录的服务器。
答案1
我不建议将其作为长期解决方案,但它可以很好地调试 logstash 或您的发货人是否按预期工作。
在logstash端:
input {
tcp {
port => 9000
}
}
在您的客户端:
cat logfile.log | nc logstash-server 9000
答案2
我还没有尝试过,但远端带有 netcat 的命名管道可能可以解决问题。如果 netcat 死机,您应该在进程监督框架(例如 daemontools、runit 或 systemd)下运行它,以便它自动重生。