2016-12-01 1 views
3

여러 소스에서 syslog를받는 주 syslog 서버가 있는데 그 로그를 Graylog 클러스터에 보내려고합니다. 클러스터가 (일부 저사양의 VM에서) 지속될 수있게하기 위해 메시지를 Graylog에로드 밸런싱 할 수 있어야합니다. 때로는 엔드 포인트에서 엄청난 양의 덩어리가 나오는 경우도 있습니다 (일부는 10 초마다 5k 로그를 전송합니다).nginx를 통한 UDP 포워딩

syslog 메시지의로드 밸런서로 nginx를 사용하려고하는데 작동하지 않는 것처럼 보입니다. nginx가 Graylog 서버의 응답을 찾고 있기 때문에 것 같습니다. UDP를 사용하면 응답을 얻지 못할 것입니다. 적어도 이것이 내가 생각하는 것입니다. 내 nginx.conf에서이 규칙의 예로서

2016/12/01 11:27:59 [error] 2816#2816: *210325 no live upstreams while connecting 
    to upstream, udp client: 10.0.1.1, server: 0.0.0.0:11016, 
    upstream: "juniper_close_stream_backend", bytes from/to client:932/0, 
    bytes from/to upstream:0/0 

, 그것은 다음과 같습니다 :이 경우

stream { 
    server { 
     listen 11016 udp; 
     proxy_pass juniper_close_stream_backend; 
    } 
    upstream juniper_close_stream_backend { 
     server 10.0.1.2:11016; 
     server 10.0.1.3:11016; 
     server 10.0.1.4:11016; 
    } 
} 

내 시스템 로그 박스를

내가지고있어 오류가 이것이다 내 하류 Graylog 박스는 10.0.1입니다. [2-4]. 이 오류 메시지가 모두 표시됩니다.

무슨 일이 일어나고 있는지 실마리가 있습니까? Graylog 상자에서 tcpdump를 실행하면로드 밸런서에서 오는 트래픽을 볼 수 있습니다. 이는 작동 중임을 의미합니다. 하지만 nginx 응답을 기대하고 내게 오류를주는 것 같아요.

+0

나는 이것을 알아 냈을 수도 있습니다. "proxy_responses 0;"을 설정했습니다. 스트림의 '서버'부분에서 오류가 사라집니다. 이것은 기본적으로 nginx에게 응답을 기대하지 말라고 지시합니다. health_check를 실행하고 싶습니다만,이 옵션은 상업용 버전에서만 사용할 수있는 것처럼 보입니다. – jasonmclose

답변

6

그래서 이것이 해결책 인 것 같습니다. 이 그것을 UDP에서 필요가 없습니다 응답을 기대하지 nginx를 알려줍니다

stream { 
    server { 
     listen 11016 udp; 
     proxy_pass juniper_close_stream_backend; 
     proxy_responses: 0; 
    } 
} 

:

위에서 내 예를 사용하는 경우, 당신은 같은이보고 싶어요. DNS를 논의 할 때 왜 examples이 표시되지 않는지 모르겠다. 전적으로 UDP로 구동 될 수 있습니다.