Skip to main content

사용자수 추정

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 데이터를 기반으로 합니다.

세계 지도

왼쪽 상단에 세계 지도가 표시되며, 사용자가 접속하는 국가에 버블이 표시됩니다. 버블의 크기는 해당 국가의 사용자 비율에 비례합니다.

한국 지도

오른쪽 상단에 한국 시/도 단위 지도가 표시됩니다. 각 지역의 사용자 비율에 따라 색상 농도가 달라집니다.

국가별 분포 (바 차트)

왼쪽 하단에 국가별 사용자 분포가 수평 바 차트로 표시됩니다.

표시 항목설명
국기 + 국가명국가 식별
바 차트전체 대비 비율을 시각화
사용자수해당 국가의 추정 사용자수
비율(%)전체 대비 퍼센트

한국(KR) 항목을 클릭하면 시/도 단위 지역 분포가 펼쳐집니다.

지역별 분포 (바 차트)

오른쪽 하단에 한국 시/도 단위의 지역별 사용자 분포가 표시됩니다. 서울, 경기, 부산 등 17개 시/도별 사용자수와 비율을 확인할 수 있습니다.

주의: 한국 지역 분포는 GeoIP 기반이므로, 이동통신사의 CGNAT(Carrier-Grade NAT)로 인해 실제 위치와 다르게 표시될 수 있습니다.

사용자 활성도 보고서

상단 헤더의 사용자 활성도 보고서 버튼을 클릭하면 장기 사용자 활성도 분석 다이얼로그가 열립니다. PostgreSQL에 저장된 최대 2년치 시간별 사용자수 데이터를 기반으로 상세 분석을 제공합니다.

기간 선택

리포트 상단에서 분석 기간을 선택할 수 있습니다.

기간설명
1주최근 7일간의 데이터
1개월최근 30일간의 데이터 (기본값)
6개월최근 180일간의 데이터
1년최근 365일간의 데이터
사용자 지정시작일과 종료일을 직접 입력

KPI 카드

리포트 상단에 네 가지 핵심 지표(KPI)가 카드로 표시됩니다.

KPI설명
평균 DAU선택 기간 동안의 평균 일간 활성 사용자수. 전 기간 대비 증감률 표시.
평균 WAU선택 기간 동안의 평균 주간 활성 사용자수. 전 기간 대비 증감률 표시.
평균 MAU선택 기간 동안의 평균 월간 활성 사용자수. 전 기간 대비 증감률 표시.
점착도(Stickiness)DAU/MAU 비율(%). 사용자가 얼마나 자주 서비스를 방문하는지를 나타냅니다. 예를 들어 10%이면 월간 사용자 10명 중 1명이 매일 방문하는 것을 의미합니다. 이 비율이 높을수록 사용자 참여도가 높습니다.

추이 차트

KPI 카드 아래에 선택한 기간의 사용자수 추이 차트가 표시됩니다. 세 가지 해상도 탭을 직접 선택하여 전환할 수 있습니다.

표시 내용연계 지표
일간 (Daily)일별 활성 사용자수 추이DAU
주간 (Weekly)주별 활성 사용자수 추이WAU
월간 (Monthly)월별 활성 사용자수 추이MAU

데이터 밀도에 따라 바 차트(90개 포인트 이하) 또는 영역 차트(90개 초과)가 자동으로 선택됩니다.

상세 데이터 테이블

차트 아래에 날짜별 상세 데이터가 테이블로 표시됩니다. 각 날짜의 DAU, WAU, MAU, 점착도(DAU/MAU), 전 기간 대비 변화율을 확인할 수 있으며, 컬럼 헤더를 클릭하여 정렬할 수 있습니다.

네임스페이스 필터

리포트 내에서도 네임스페이스를 변경하여 특정 네임스페이스의 데이터만 분석할 수 있습니다.

내보내기

리포트 하단에서 데이터를 내보낼 수 있습니다.

형식설명
Excel서버에서 생성하는 스프레드시트 파일입니다. 추가 분석에 활용할 수 있습니다.
PDF차트가 포함된 보고서 문서입니다. 관리자에게 보고하거나 보관할 때 유용합니다.

부분 데이터 경고

화면 상단에 노란색 경고 아이콘이 표시될 경우, GeoIP 정보가 부족하여 "기타(unknown)" 국가로 분류된 사용자가 50%를 초과했음을 의미합니다. 이 경우 지역 분포의 정확도가 낮을 수 있습니다.

데이터 보관

데이터보관 기간용도
HLL 스케치 (인메모리)65분 롤링 버퍼실시간 대시보드, 5분/30분 활성 사용자
롤링 트렌드 (인메모리)최근 24시간 (1분 해상도, 1440포인트)스파크라인 차트
HLL 스냅샷 (hll_snapshots)62일DAU/WAU/MAU 계산용 시간별 HLL 직렬화 데이터
시간별 통계 (ue_hourly_stats)최대 2년사용자 활성도 보고서, DAU/WAU/MAU 장기 추이

데이터 없음 상태

사용자수 추정 화면 진입 시 다음 상태가 표시될 수 있습니다.

상태원인조치
"데이터를 기다리는 중"에이전트가 아직 데이터를 수집하지 못한 상태에이전트가 설치되어 있고 HTTP 트래픽이 유입되는지 확인
스켈레톤 로딩WebSocket 연결 중이지만 데이터 미수신잠시 기다리면 자동으로 표시됨

설정

사용자수 추정의 동작을 조정하려면 좌측 사이드바 하단의 설정 메뉴에서 사용자수 추정 섹션으로 이동합니다.

XFF IP 방향

X-Forwarded-For 헤더에서 클라이언트 IP를 추출하는 방향을 설정합니다.

옵션설명예시 (X-Forwarded-For: 1.2.3.4, 10.0.0.1, 10.0.0.2)
First IP (leftmost)헤더의 첫 번째(가장 왼쪽) IP를 사용합니다. 기본값.1.2.3.4를 클라이언트 IP로 사용
Last IP (rightmost)헤더의 마지막(가장 오른쪽) IP를 사용합니다.10.0.0.2를 클라이언트 IP로 사용

일반적으로 첫 번째 IP가 실제 클라이언트 IP이지만, CDN이나 로드밸런서 구성에 따라 마지막 IP가 실제 클라이언트 IP인 경우도 있습니다. 환경에 맞게 선택하세요.

커스텀 세션 쿠키 이름

기본 제공되는 세션 쿠키 외에 추가로 인식할 세션 쿠키 이름을 등록합니다.

기본 제공 쿠키 목록:

쿠키 이름프레임워크
__KSMSID__OPENMARU Cluster
JSESSIONIDJava (Servlet, Spring)
PHPSESSIDPHP
ASP.NET_SessionIdASP.NET
.AspNetCore.SessionASP.NET Core
connect.sidExpress.js (Node.js)
laravel_sessionLaravel (PHP)
_session_idRuby on Rails

자체 프레임워크나 커스텀 세션 관리를 사용하는 경우, 해당 세션 쿠키 이름을 입력하고 Enter 키를 누르면 추가됩니다. 추가한 쿠키는 칩 형태로 표시되며, X 버튼으로 삭제할 수 있습니다.

커스텀 봇 패턴

기본 제공되는 봇 패턴 외에 추가로 필터링할 봇 User-Agent 패턴을 등록합니다. 봇으로 식별된 트래픽은 사용자수 추정에서 제외됩니다.

기본 제공 봇 목록:

Googlebot, bingbot, Slurp, DuckDuckBot, Baiduspider, YandexBot, facebookexternalhit, Twitterbot, LinkedInBot, AhrefsBot, SemrushBot, MJ12bot, DotBot, PetalBot

기본 제공 일반 키워드:

bot, crawler, spider

User-Agent 문자열에 위 패턴이 포함되어 있으면 해당 요청은 봇으로 분류되어 사용자수 추정에서 제외됩니다. 자체 봇이나 내부 모니터링 에이전트의 User-Agent 패턴을 추가하면 더 정확한 추정이 가능합니다.

설정 반영

저장 버튼을 클릭하면 설정이 서버에 저장됩니다. 변경된 설정은 다음 경로를 통해 각 노드 에이전트에 전파됩니다.

UI (저장 클릭) → DB 저장 → API 응답에 포함 (1분 주기 폴링) → 각 노드 에이전트 적용

따라서 설정 변경 후 약 1분 이내에 모든 노드 에이전트에 반영됩니다.

참고: 설정 변경은 변경 시점 이후의 새로운 트래픽부터 적용됩니다. 이미 수집된 데이터에는 영향을 주지 않습니다.

자주 묻는 질문

사용자수가 실제보다 많게 나옵니다

  • IP+UA 기반 추정을 사용 중인 경우: 같은 사용자가 여러 브라우저나 기기를 사용하면 각각 별도의 사용자로 카운트됩니다. 세션 쿠키를 활성화하면 더 정확한 추정이 가능합니다.
  • 봇 트래픽이 포함된 경우: 설정에서 커스텀 봇 패턴을 추가하여 봇 트래픽을 제외하세요.

사용자수가 실제보다 적게 나옵니다

  • IP+UA 기반 추정에서 NAT 환경인 경우: 같은 공인 IP를 공유하는 사용자들이 하나로 합산됩니다. 특히 기업 네트워크(수백~수천 명이 하나의 공인 IP 공유)나 이동통신사 CGNAT(수만 명이 하나의 IP 공유) 환경에서 크게 과소 추정될 수 있습니다. 세션 쿠키 기반 추정을 사용하면 이 문제를 해결할 수 있습니다.
  • 세션 커버리지가 낮은 경우: API 전용 요청이 많으면 세션 쿠키가 전송되지 않을 수 있습니다. 설정에서 해당 서비스의 세션 쿠키 이름을 추가하세요.
  • VPN 사용자가 많은 경우: VPN 서버의 IP로 집계되어 여러 사용자가 하나로 합산됩니다.

세션 커버리지가 0%입니다

서비스가 세션 쿠키를 사용하지 않거나, 기본 제공 쿠키 목록에 없는 이름을 사용하고 있을 수 있습니다. 설정에서 해당 쿠키 이름을 커스텀 세션 쿠키 이름에 추가하세요.

지역 분포가 부정확합니다

  • GeoIP 데이터베이스의 정확도에 의존하므로 오차가 있을 수 있습니다.
  • 한국의 경우 이동통신사의 CGNAT(Carrier-Grade NAT)로 인해 실제 위치와 다른 지역으로 표시될 수 있습니다.
  • VPN 사용자는 VPN 서버의 위치로 표시됩니다.

DAU/WAU/MAU 데이터가 표시되지 않습니다

DAU/WAU/MAU는 시간 경과에 따라 누적되는 데이터입니다. 시스템 설치 직후에는 충분한 데이터가 쌓이지 않았을 수 있습니다.

  • DAU: 최소 1시간 이상 운영 후 표시
  • WAU: 최소 1일 이상 운영 후 표시
  • MAU: 최소 1주일 이상 운영 후 표시