snetsystems/cloudhub

Nginx 프록시 환경에서 CloudHub의 Kapacitor 로그 수신 문제

Closed this issue · 1 comments

이슈 내용

Image

  • CloudHub의 Tickscript Editor 화면에서 Kapacitor 로그를 받아오는 부분에서 문제가 발생
  • Nginx가 CloudHub 서비스 앞단에서 프록시 역할을 하고 있을 때 발생

문제 원인

  1. Nginx의 proxy_buffering 설정 문제

    • Nginx의 기본 proxy_buffering 옵션 값은 on이다 .
    • 이로 인해 Nginx는 백엔드 서버로부터 받은 응답을 메모리나 디스크에 버퍼링한 후 클라이언트에게 전달한다.
    • 이 옵션이 활성화되면, 실시간 로그 스트리밍과 같은 응답이 지연될 수 있다.
  2. 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 되기 전의 요청된 경로와 파라미터를 그대로 전달할 수 있다.

시간 단위 수정

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