사용자수 추정
HTTP 트래픽 분석을 통해 실시간 활성 사용자수를 추정하는 화면입니다.

개요
사용자수 추정은 Kubernetes 클러스터에 유입되는 HTTP 트래픽을 분석하여 현재 서비스를 이용하고 있는 사용자수를 실시간으로 추정하는 기능입니다. 별도의 애널리틱스 도구나 클라이언트 SDK 삽입 없이도 서비스의 동시 접속자 규모, 일간/주간/월간 활성 사용자(DAU/WAU/MAU) 추이, 지역별 분포를 한눈에 파악할 수 있습니다.
좌측 사이드바에서 사용자수 추정 메뉴를 클릭하면 진입할 수 있습니다. Kubernetes 대시보드의 상태 카드에서도 현재 활성 사용자수를 확인할 수 있으며, 카드를 클릭하면 이 화면으로 이동합니다.
서버 사이드 추정 방식의 특징
주요 APM/모니터링 플랫폼은 사용자수를 파악하기 위해 **클라이언트 사이드 SDK(RUM)**를 애플리케이션에 삽입해야 합니다. 반면 Observability의 사용자수 추정 기능은 서버 사이드 eBPF 기반으로 동작하여 다음과 같은 차이가 있습니다.
| 항목 | RUM 방식 (타 제품) | eBPF 서버 사이드 (Observability의 사용자수 추정기능) |
|---|---|---|
| 추가 계측 | 모든 앱에 SDK 삽입 필수 | 불필요 (노드에 에이전트만 설치) |
| 적용 범위 | 브라우저 웹앱만 가능 | 모든 HTTP 서비스 (API, 모바일 백엔드 포함) |
| 광고 차단기 영향 | 25~60% 데이터 누락 가능 | 영향 없음 |
| GDPR 쿠키 동의 | 동의 거부 시 수집 불가 | 서버 측 처리로 영향 없음 |
| 정확도 | 매우 높음 (SDK 동작 시) | 높음 (세션 기반) ~ 보통 (IP+UA 기반) |
| 비용 | 사용자 수에 비례하여 증가 | 추가 비용 없음 |
추정 원리
사용자수 추정은 HyperLogLog(HLL) 확률적 자료구조를 사용합니다(14비트 정밀도). 각 노드 에이전트가 eBPF를 통해 HTTP 요청의 세션 ID 또는 IP+User-Agent 조합을 추 출하고, 이를 HLL 스케치로 압축하여 서버로 전송합니다. 서버는 모든 노드의 HLL 스케치를 병합하여 고유 사용자수를 추정합니다.
이 방식은 정확한 개수가 아닌 추정값이지만, 메모리 효율이 높아 대규모 트래픽 환경에서도 안정적으로 동작합니다. WebSocket을 통해 초기 로딩 1초 이내, 이후 10초마다 변경된 데이터만 자동 갱신됩니다.
두 가지 추정 방식
사용자수 추정은 두 가지 방식을 지원하며, 시스템이 자동으로 최적의 방식을 선택합니다.
| 방식 | 식별 기준 | 정확도 | 적용 조건 |
|---|---|---|---|
| 세션 ID 기반 | 세션 쿠키 (JSESSIONID, PHPSESSID 등) | 높음 | 세션 커버리지 80% 이상 |
| IP+UA 기반 | 클라이언트 IP + User-Agent 조합 | 보통 | 세션 커버리지 80% 미만 (폴백) |
- 세션 커버리지란 전체 요청 중 세션 쿠키가 포함된 요청의 비율입니다.
- 세션 커버리지가 80% 이상이면 세션 ID 기반 추정이 자동 선택됩니다.
- 세션 쿠키가 없는 환경(API 서버 등)에서는 IP+UA 기반 추정이 사용됩니다.
참고: IP+UA 기반 추정은 같은 네트워크(예: 회사 NAT)에서 접속하는 서로 다른 사용자가 하나로 합산되거나, 같은 사용자가 브라우저를 바꾸면 다른 사용자로 카운트될 수 있습니다.
중요: X-Forwarded-For 헤더 설정 필요 사용자수 추정과 지역 분포 기능은 클라이언트의 실제 IP를 기반으로 동작합니다. Ingress Controller, 로드밸런서, CDN 등 리버스 프록시를 사용하는 환경에서는 반드시
X-Forwarded-For헤더가 전달되도록 설정해야 합니다. 이 헤더가 없으면 모든 요청이 프록시의 내부 IP로 인식되어 사용자수가 심하게 과소 추정되고, 지역 분포도 정확하지 않게 됩니다. 설정 방법은 사용 중인 Ingress Controller의 문서를 참고하세요(예: Nginx Ingress의use-forwarded-headers,compute-full-forwarded-for옵션).
화면 구성
사용자수 추정 화면은 다음과 같은 영역으로 구성됩니다.
| 영역 | 설명 |
|---|---|
| 상단 헤더 | 실시간 연결 상태, 추정 방식 토글, 네임스페이스 필터, 활동 리포트 버튼 |
| 활성 사용자 카드 (ROW 1 좌측) | 5분/30분 기준 활성 사용자수와 추정 방식 표시 |
| 스파크라인 차트 (ROW 1 중앙/우측) | 최근 1시간의 5분/30분 활성 사용자 추이 |
| DAU/WAU/MAU 카드 (ROW 2) | 일간/주간/월간 활성 사용자수와 추이 바 차트 |
| 지역 분포 (ROW 3) | 세계 지도, 한국 지도, 국가별/지역별 분포 바 차트 |
주요 기능
실시간 연결 상태 확인
사용자수 추정 화면은 WebSocket을 통해 서버와 실시간으로 연결됩니다. 화면 상단에서 연결 상태를 확인할 수 있습니다.
| 상태 | 표시 | 설명 |
|---|---|---|
| 실시간 | 초록색 점이 깜빡이며 "Live" 표시 | 정상 연결 상태. 10초마다 데이터가 자동 갱신됩니다. |
| 연결중 | 로딩 아이콘과 함께 "Connecting..." 표시 | 서버에 처음 연결하는 중입니다. |
| 재연결중 | "Reconnecting (N)..." 표시 | 연결이 끊어져 자동으로 재연결을 시도하는 중입니다. 괄호 안의 숫자는 재연결 시도 횟수입니다. |
연결이 끊어진 경우 화면 상단에 경고 바가 표시됩니다.
추정 방식 토글
화면 상단 우측에 세 개의 토글 버튼이 있어 추정 방식을 직접 선택할 수 있습니다.
| 버튼 | 동작 |
|---|---|
| Auto | 세션 커버리지에 따라 자동으로 최적 방식을 선택합니다 (기본값). |
| IP+UA | 세션 커버리지와 관계없이 IP+User-Agent 기반 추정값을 표시합니다. |
| Session | 세션 커버리지와 관계없이 세션 ID 기반 추정값을 표시합니다. |
Auto 모드에서는 토글 옆에 현재 사용 중인 방식 이름과 세션 커버리지 퍼센트가 함께 표시됩니다.
참고: 선택한 추정 방식은 브라우저에 저장되어 다음 접속 시에도 유지됩니다.
네임스페이스 필터
상단 헤더의 드롭다운에서 네임스페이스를 선택하면, 해당 네임스페이스에 속하는 애플리케이션의 트래픽만으로 사용자수를 추정합니다.
- 네임스페이스를 선택하지 않으면 전체 프로젝트의 사용자수가 표시됩니다.
- 네임스페이스를 변경하면 잠시 로딩 오버레이가 표시되며, 서버에서 해당 네임스페이스의 데이터를 재계산합니다.
- 선택한 네임스페이스는 브라우저에 저장되어 다음 접속 시에도 유지됩니다.
Ingress 경유 트래픽의 네임스페이스 보정
외부 사용자 → Ingress Controller → 백엔드 서비스 경로의 트래픽은 eBPF가 Outbound(connect) 연결만 추적하기 때문에, 보정 없이는 Ingress Controller의 네임스페이스(예: kube-system)로 분류됩니다. 이를 해결하기 위해 에이전트는 2단계 목적지 네임스페이스 보정을 수행합니다.
| 단계 | 방법 | 설명 |
|---|---|---|
| 1단계: 같은 노드 | 로컬 컨테이너 레지스트리 조회 | 목적지 IP:Port로 같은 노드에서 수신 대기 중인 컨테이너를 찾아 네임스페이스를 확인합니다. |
| 2단계: 다른 노드 | Pod IP→네임스페이스 맵 조회 | 서버가 VictoriaMetrics 메트릭(kube_pod_info, kube_service_info)에서 구축한 Pod IP/Service ClusterIP → 네임스페이스 매핑을 1분 주기로 에이전트에 전달합니다. 에이전트는 이 맵에서 목적지 IP의 네임스페이스를 조회합니다. |
이 보정을 통해 대부분의 Ingress 경유 트래픽은 백엔드 서비스의 실제 네임스페이스로 올바르게 분류됩니다.
참고: 목적지 IP가 두 단계 모두에서 확인되지 않는 경우(예: 외부 서비스로 나가는 트래픽), 해당 트래픽은 소스 컨테이너의 네임스페이스로 분류됩니다.
전체 화면
상단 헤더의 전체 화면 아이콘을 클릭하면 사용자수 추정 화면을 브라우저 전체 화면으로 확대할 수 있습니다. 대형 모니터나 TV 대시보드로 띄워놓을 때 유용합니다. ESC 키를 누르거나 아이콘을 다시 클릭하면 원래 크기로 돌아갑니다.
활성 사용자 카드
화면 첫 번째 행 좌측에 위치한 카드로, 현재 활성 사용자수의 핵심 지표를 보여줍니다.
| 항목 | 설명 |
|---|---|
| 5분 활성 사용자 | 최근 5분 동안 요청을 보낸 고유 사용자수 (파란색 큰 숫자) |
| 30분 활성 사용자 | 최근 30분 동안 요청을 보낸 고유 사용자수 (초록색 큰 숫자) |
| 추정 방식 뱃지 | 현재 사용 중인 추정 방식 (세션 ID 또는 IP+UA) |
| 세션 커버리지 | 전체 요청 중 세션 쿠키가 포함된 비율 (%) |
| 보조 방식 수치 | 주 추정 방식의 반대 방식으로 추정한 5분/30분 수치 (작은 글씨) |
보조 방식 수치를 통해 두 방식 간의 차이를 비교할 수 있습니다. 두 수치가 크게 다르면 세션 관리 설정을 확인해 보시기 바랍니다.
스파크라인 차트
활성 사용자 카드 오른쪽에 두 개의 스파크라인 차트가 있습니다.
| 차트 | 색상 | 설명 |
|---|---|---|
| 5분 활성 사용자 | 파란색 | 최근 1시간 동안의 5분 단위 활성 사용자 추이 |
| 30분 활성 사용자 | 초록색 | 최근 1시간 동안의 30분 단위 활성 사용자 추이 |
데이터가 아직 충분하지 않은 경우 "데이터가 더 필요합니다" 메시지가 표시됩니다.
DAU / WAU / MAU 카드
두 번째 행에 일간(DAU), 주간(WAU), 월간(MAU) 활성 사용자 카드가 나란히 표시됩니다.
| 카드 | 기간 | 바 차트 | 비교 대상 |
|---|---|---|---|
| DAU (Daily Active Users) | 오늘 | 시간별(0~23시) 활성 사용자 바 차트 | 전일 대비 증감 (%) |
| WAU (Weekly Active Users) | 이번 주 | 요일별(일~토) 활성 사용자 바 차트 | 전주 대비 증감 (%) |
| MAU (Monthly Active Users) | 이번 달 | 일별(30일) 활성 사용자 바 차트 | 전월 대비 증감 (%) |
각 카드의 세부 요소:
- 큰 숫자: 해당 기간의 고유 활성 사용자수
- 증감 표시: 전 기간 대비 변화율 (초록색 ▲: 증가, 빨간색 ▼: 감소)
- 전 기간 수치: 비교 기간의 사용자수 (작은 글씨)
- 바 차트: 기간 내 세부 시간 단위의 사용자 추이. 피크값에 수치가 표시됩니다.
- 전일 비교선 (DAU만 해당): 점선으로 전일의 시간대별 추이가 오버레이됩니다.
바 차트의 개별 바에 마우스를 올리면 해당 시간대의 상세 사용자수와 시간 정보가 툴팁으로 표시됩니다. DAU 차트의 경우 전일 같은 시간대의 수치도 함께 표시됩니다.
지역 분포
세 번째 행에 사용자의 지리적 분포가 표시됩니다. 이 기능은 GeoIP 데이터를 기반으로 합니다.