我们具有以下配置:
熟练(td-agent)可以解析和转发日志文件中的日志
nginx将这些日志负载平衡到3个节点
graylog Web应用程序以显示日志,它在这3个节点上运行
我们发现有些消息没有进入灰色日志。通过调查,我们发现nginx是问题所在。如果我们直接发送到graylog,或仅使用一个上游节点,则它就像一种魅力。 这些消息具有3-5 K个字符的JSON格式。
通过更多的调查和尝试,我注意到将 least_conn; 置于上游配置中是可行的,这意味着在发送的10条消息中,有3至6条确实会到达Graylog,没有它,他们永远都不会实现。
我尝试将ip_hash放入,但是出现一个错误,即无法将其放置在这里,这很奇怪。
因此,如果我们排除nginx或将其设置为使用一个节点,则效果很好。在3个节点中的任何一个上。当我们包含第二个节点时,问题又回来了。
我还尝试将更大的值添加到nginx.conf中,该值是4倍(4k-> 16k等)。
有什么想法下一步可以尝试吗?
这是一个上游配置文件,每个端口有20个这样的配置文件
upstream graylog_hosts_14099 {
least_conn;
server 10.138.65.213:14099;
server 10.138.65.64:14099;
server 10.138.65.81:14099;
}
这是nginx.conf
user nginx;
worker_processes auto;
worker_rlimit_nofile 49152;
pid /var/run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
accept_mutex on;
accept_mutex_delay 500ms;
worker_connections 49152;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log error;
sendfile on;
server_tokens on;
types_hash_max_size 2048;
types_hash_bucket_size 1024;
server_names_hash_bucket_size 128;
server_names_hash_max_size 1024;
keepalive_timeout 65s;
keepalive_requests 100;
client_body_timeout 60s;
send_timeout 60s;
lingering_timeout 5s;
tcp_nodelay on;
client_body_temp_path /var/nginx/client_body_temp;
client_max_body_size 10m;
client_body_buffer_size 512k;
proxy_temp_path /var/nginx/proxy_temp;
proxy_connect_timeout 90s;
proxy_send_timeout 90s;
proxy_read_timeout 90s;
proxy_buffers 32 16k;
proxy_buffer_size 32k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Proxy "";
proxy_headers_hash_bucket_size 256;
proxy_headers_hash_max_size 4096;
proxy_intercept_errors on;
proxy_request_buffering off;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
stream {
include /etc/nginx/conf.stream.d/*.conf;
include /etc/nginx/streams-enabled/*;
}
这是启用了流的conf文件,每个端口也是
server {
listen *:14080 udp;
proxy_timeout 1;
proxy_connect_timeout 1;
proxy_pass graylog_hosts_14080;
}