성능 모니터링
성능 모니터링은 호스트, Gately 프로세스, 각 사이트의 성능 데이터를 한 페이지에 모으고, 지표가 임계값을 계속 넘으면 알림 센터로 경보를 보낸 뒤 조건이 해제되면 복구 알림을 보냅니다. 관리 화면의 사이드바 "시스템" → "성능 모니터링"에 있습니다.
"한밤중에 CPU가 가득 찼다", "어떤 사이트의 연결 수가 급증했다", "백엔드가 느려졌는데 아무도 몰랐다" 같은 상황을 위한 기능이며, 데이터는 메모리에만 보관합니다. 24시간이 넘는 기록, 여러 인스턴스 집계, 복잡한 쿼리가 필요하면 Prometheus와 Grafana를 사용하세요.
성능 패널
페이지 오른쪽 위에서 60초, 1시간, 24시간을 전환할 수 있습니다.
호스트와 Gately 프로세스
| 차트 | 내용 |
|---|---|
| 호스트 CPU | 머신 전체 코어의 평균 사용률 |
| 호스트 메모리 / 디스크 | 물리 메모리 중 사용 중인 비율(회수 가능한 캐시 제외), 설정 디렉터리가 있는 파티션의 사용 비율 |
| 시스템 부하 | 1분 부하 |
| Gately 프로세스 CPU | Gately 프로세스가 머신 전체에서 차지하는 비율, 호스트 CPU와 같은 기준 |
| Gately 프로세스 메모리 | 상주 메모리(MB) |
| 파일 디스크립터 / 고루틴 | 프로세스가 연 파일 디스크립터 수와 Go 고루틴 수 |
백그라운드에서 5초마다 수집합니다. 60초 범위는 수집마다 한 점, 1시간 범위는 1분마다 한 점(그 1분의 평균), 24시간 범위는 5분마다 한 점입니다. CPU 차트의 점선은 각 점 구간의 최고값이라 짧은 급증이 평균에 묻히지 않습니다. 차트에 마우스를 올리면 그 시점의 값을 볼 수 있습니다.
일부 플랫폼에서는 읽을 수 없는 지표가 있으며(예: macOS에는 CPU 사용률이 없음), 해당 차트에 "데이터 없음"이 표시됩니다.
사이트
웹 서비스 모듈이 켜져 있으면 실행 중인 모든 사이트(기본 사이트 포함)를 보여 줍니다.
| 열 | 설명 |
|---|---|
| 처리 중 | 사이트가 지금 처리 중인 요청 수, WebSocket 같은 장기 연결 포함 |
| 초당 요청 | 최근 약 60초의 평균 초당 요청 수 |
| 5xx 비율 | 최근 약 60초 동안 완료된 응답 중 5xx의 백분율 |
| 지연 P95 | 최근 약 60초 첫 바이트 지연의 95번째 백분위 추정값 |
| 백엔드 | 정상 백엔드 수 / 전체 백엔드 수와 전달 중인 연결 수 |
사이트를 클릭하면 사이트 통계가 열려 24시간 요청, 오류, 지연 추이를 볼 수 있습니다.
첫 바이트 지연
지연은 "첫 바이트 지연", 즉 요청 도착부터 응답 헤더 전송까지의 시간으로 백엔드나 사이트 자체의 응답 속도를 나타냅니다. 다음은 포함하지 않습니다.
- 응답 본문 전송 시간(큰 파일 다운로드로 지연이 올라가지 않음)
- WebSocket 등 프로토콜 업그레이드 요청
- 접근 제어로 끊기거나 관리자가 끊은 요청
각 요청은 소요 시간에 따라 50개의 세분된 구간(1밀리초~60초, 이웃 구간 차이 약 10%~25%)에 들어가며, 구간마다 횟수와 총 시간을 누적합니다. 백분위는 해당 구간의 평균 시간을 사용하므로 오차가 구간 폭을 넘지 않고, 개별 요청 데이터는 저장하지 않습니다. Prometheus로 내보내는 gately_site_request_duration_seconds 히스토그램은 이 가운데 자주 쓰는 경계 13개를 사용합니다.
경보 규칙
"경보 규칙 추가"를 클릭합니다. 새로 만들 때 템플릿(호스트 CPU 과다, 디스크 공간 부족, 사이트 5xx 과다, 사이트 응답 지연 등)으로 채운 뒤 필요에 맞게 고칠 수 있습니다.
| 항목 | 설명 |
|---|---|
| 이름 | 필수, 최대 64자, 알림 제목에 표시 |
| 지표 | 아래 표 참고 |
| 임계값 | 비교 연산자 >, >=, <, <=와 값, 단위는 지표에 따라 다름 |
| 지속 시간 | 1~1440분. 조건이 이 시간 동안 계속 충족되어야 경보를 보내며, 중간에 한 번이라도 벗어나면 다시 계산 |
| 적용 사이트 | 사이트와 백엔드 노드 지표에서 선택 가능, 비워 두면 모든 사이트 |
| 최소 요청 수 | 5xx 비율과 지연 지표에서 사용, 기본값 20. 최근 약 60초 요청이 이보다 적으면 판정하지 않아, 트래픽이 적을 때 한두 건의 오류나 느린 요청으로 경보가 울리지 않음 |
| 경보 수준 | 경고 또는 오류, 알림 이벤트의 수준이 됨 |
| 메모, 사용 | 선택 |
| 지표 | 단위 | 판정 대상 |
|---|---|---|
| 호스트 CPU 사용률 | % | 이 호스트 |
| 호스트 메모리 사용률 | % | 이 호스트 |
| 호스트 디스크 사용률(설정 디렉터리 파티션) | % | 이 호스트 |
| Gately 프로세스 CPU 사용률 | % | Gately 프로세스 |
| Gately 프로세스 상주 메모리 | MB | Gately 프로세스 |
| 사이트 처리 중 요청 수 | 개 | 각 사이트 |
| 사이트 초당 요청 수 | 회/초 | 각 사이트 |
| 사이트 5xx 응답 비율 | % | 각 사이트 |
| 사이트 첫 바이트 지연 P95 | 밀리초 | 각 사이트 |
| 백엔드 노드 현재 연결 수 | 개 | 각 백엔드 노드 |
사이트와 백엔드 노드 지표는 대상마다 따로 판정하고 따로 경보합니다. 예를 들어 "5xx 비율 > 5%" 규칙 하나로 두 사이트에 각각 경보를 보낼 수 있습니다. "사이트 초당 요청 수 < 1"로 트래픽이 갑자기 끊긴 것을 감지할 수 있습니다.
판정과 알림
- 활성화된 모든 규칙을 5초마다 평가합니다.
- 조건이 충족되기 시작하면 "대기 중"이 되고, 지속 시간을 채우면 "경보 중"으로 바뀌며
perf.alert이벤트를 발행합니다. - 경보 중인 조건이 해제되면
perf.recovered이벤트를 발행합니다. 사이트의 5xx 비율과 지연은 최근 약 60초 요청이 부족하면 판정할 수 없으며, 이것도 해제로 보고 복구 알림에 그 사실을 적습니다. - 사이트가 삭제되거나 비활성화되면 그 경보는 복구 알림 없이 사라집니다.
페이지 위쪽에 대기 중·경보 중인 대상과 현재 값, 지속 시간이 표시됩니다.
규칙의 이름, 수준, 메모를 바꿔도 진행 중인 계산은 유지됩니다. 지표, 임계값, 지속 시간, 적용 사이트, 최소 요청 수를 바꾸거나 규칙을 끄면 그 규칙의 계산과 경보 상태가 지워집니다. 이미 발생한 경보에는 규칙이 삭제, 비활성화 또는 변경되었음을 알리는 복구 알림이 전송됩니다. 계산과 경보 상태는 메모리에만 있으며 재시작하면 처음부터 다시 시작합니다.
경보는 알림 센터를 통해 전송됩니다. 알림 센터에서 "성능 모니터링: 경보 발생"과 "성능 모니터링: 경보 복구"를 구독하는 규칙을 추가하세요("성능 경보" 템플릿 사용 가능). 그렇지 않으면 경보는 이 페이지의 로그에만 기록되고 페이지에도 안내가 표시됩니다. 알림 센터의 무음 설정도 성능 경보에 적용되지만, 대상마다 이벤트 출처가 달라 서로를 억제하지 않습니다. 지속 시간이 이미 떨림 방지 역할을 하므로 보통 무음은 필요 없습니다.
리소스와 제한
- 기록은 메모리에만 보관합니다. 호스트와 프로세스는 1분마다 한 점을 24시간 보관하고, 사이트 지연은 1분마다 P50과 P95를 보관하며 트래픽이 있는 사이트당 약 23KB입니다.
- 경보 규칙은 최대 200개, 규칙 하나에 지정할 수 있는 사이트는 최대 200개입니다.
- 웹 서비스 모듈이 켜져 있으면 요청마다 시간 읽기 한 번과 카운터 갱신 몇 번 정도의 비용이 추가됩니다.
모니터링 지표
성능 모니터링이 켜져 있으면 /api/metrics가 최근 수집한 호스트·프로세스 지표와 규칙별 경보 수도 내보냅니다. 모니터링 지표를 참고하세요.
API
| 엔드포인트 | 설명 |
|---|---|
GET /api/perf/overview?range=60s|1h|24h | 호스트와 프로세스 기록 |
GET /api/perf/sites | 사이트별 최근 약 60초 지표 |
GET /api/perf/alerts | 대기 중·경보 중인 대상 |
GET /api/perf/metrics | 경보에 쓸 수 있는 지표 |
/api/perf/rules | 경보 규칙 생성·조회·수정·삭제, 사용 전환, 정렬, 그룹 |
읽기에는 perf:read, 규칙 변경에는 perf:write 권한이 필요합니다. API 토큰을 참고하세요.