Nginx 프록시 환경에서 CloudHub의 Kapacitor 로그 수신 문제
Closed this issue · 1 comments
jaegeunha commented
이슈 내용
- CloudHub의 Tickscript Editor 화면에서 Kapacitor 로그를 받아오는 부분에서 문제가 발생
- Nginx가 CloudHub 서비스 앞단에서 프록시 역할을 하고 있을 때 발생
문제 원인
-
Nginx의 proxy_buffering 설정 문제
- Nginx의 기본
proxy_buffering
옵션 값은on
이다 . - 이로 인해 Nginx는 백엔드 서버로부터 받은 응답을 메모리나 디스크에 버퍼링한 후 클라이언트에게 전달한다.
- 이 옵션이 활성화되면, 실시간 로그 스트리밍과 같은 응답이 지연될 수 있다.
- Nginx의 기본
-
proxy_read_timeout 설정 문제
proxy_read_timeout
이 기본값 60초로 설정되어 있어, 60초 이후 로그 스트리밍이 끊기는 문제가 발생한다.- 이 설정 값을 늘릴 필요가 있다.
옵션 설명
-
proxy_buffering
- Nginx가 백엔드 서버로부터 받은 응답을 클라이언트에게 전달하기 전에 임시로 버퍼에 저장할지를 결정하는 옵션
-
proxy_read_timeout
- 프록시 서버로부터 응답을 읽는 동안 허용되는 타임아웃 시간
- 지정된 시간 내에 프록시 서버가 아무것도 전송하지 않으면 연결이 끊긴다.
- 기본 값은 60초
해결 방법
- Nginx 설정에서 proxy_buffering 옵션을
off
로 설정하고 proxy_read_timeout 기간을 늘린다.
Nginx 설정 예시
...
location ~ ^/cloudhub/v1/sources/\d+/kapacitors/\d+/proxy {
if ($arg_path ~ "^/kapacitor/v1preview/logs") {
rewrite ^/cloudhub/v1/sources/\d+/kapacitors/\d+/proxy /kapacitor_log_stream_proxy last;
}
proxy_pass https://apps;
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 X-Forwarded-Proto $scheme;
}
location ~ ^/kapacitor_log_stream_proxy {
proxy_buffering off;
proxy_read_timeout 28800s;
proxy_pass https://apps$request_uri;
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 X-Forwarded-Proto $scheme;
}
$request_uri
- Nginx에서 제공하는 내장 변수
- $request_uri를 사용하는 경우, 원래 요청된 경로와 파라미터를 백엔드 서버로 전달
- 즉 rewrite 되기 전의 요청된 경로와 파라미터를 그대로 전달할 수 있다.
kim-jinhyeong commented
시간 단위 수정
s -> d
참고 : nginx에서 지원하는 시간 단위
s | seconds (default)
m | minutes
h | hours
d | days
w | weeks
M | months, 30 days
y | years, 365 days
참고:
https://nginx.org/en/docs/syntax.html
시간 변경
28800s(8h) -> 7d