我已经设置了一个ELK堆栈,该堆栈从两个nginx负载平衡器馈送了syslog数据。系统日志为UDP,负载均衡器将UDP流转发到具有循环配置的两个logstash主机。负载平衡效果很好,但是如果它们出现故障,我需要停止向其中一个节点发送数据。
nginx和UDP是否可能?因为我尝试设置参数:
fail_timeout=5s;
但是nginx仍然将数据发送到脱机节点,这可能是因为UDP连接是无连接的。
我可以代替使用UDP接收syslog流并将其转发到具有TCP的ELK堆栈吗?
这是nginx.conf的配置:
user root;
worker_processes auto;
pid /run/nginx.pid;
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
worker_rlimit_nofile 1000000;
events {
worker_connections 20000;
# multi_accept on;
}
stream {
log_format basic '$time_iso8601 $remote_addr '
'$protocol $status $bytes_sent $bytes_received '
'$session_time $upstream_addr '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
# Enable access_log statements for debugging
access_log /var/log/nginx/stream.log basic;
upstream syslog_udp {
server 84.19.155.71:514 fail_timeout=5s;
server 84.19.155.72:514 fail_timeout=5s;
}
server {
listen 514 udp;
proxy_pass syslog_udp;
proxy_responses 0;
#proxy_timeout 2s;
proxy_bind $remote_addr transparent;
#proxy_next_upstream_timeout 2s;
}
}