我需要将 Nginx 访问和错误日志重定向到远程系统日志服务器。从http://nginx.org/en/docs/syslog.html我发现我可以这样做:
error_log syslog:server=192.168.1.1;
但是我需要重定向到特定的 TCP(不是 UDP!)端口,我尝试过:
error_log syslog:server=192.168.1.1:3000;
但它没有通过。如何指定 Nginx 端口应该是 TCP 而不是 UDP?
非常感谢!
答案1
无法以这种方式通过 TCP 发送,这是在网络上发送日志的一种相当常见的方式,因为您希望消息传递可靠(查看 RELP 模块以获取该需求的证据)。
但是,只能通过 UDP 发送日志的情况相当普遍,许多网络设备(例如交换机或路由器)只能通过 UDP 发送,因此如果您无法在所需端口上的 syslog 服务器上添加侦听器,则发送到 syslog 网关可能是一种解决方案。这将接收您的 UDP 日志,并通过 TCP 将它们发送到您的中央服务器。
我自己会使用 rsyslog 收集 nginx 服务器上的日志,然后将其转发到中央服务器,而不是依赖 nginx 完成所有工作。您可以选择要发送到的协议和端口。
答案2
您可以将其发送到 udp,然后在 192.168.1.1 上运行 socat
socat UDP4-RECVFROM:192.168.1.1:3000,fork,reuseaddr TCP4-SENDTO:192.168.1.1:3000