📊

Kibana 대시보드 가이드

이터널 리턴 데이터 분석을 위한 대시보드 구축 및 관리 가이드

4
Kibana 시각화
4
자동화 메트릭
6
추천 대시보드

해결된 이슈

📋 추후 개선 사항

📋 대시보드 현황

✅ 신규 유저 온보딩 대시보드

상태: 구축 완료

시각화: 신규 가입자 추이, 국가별 분포, 튜토리얼 스킵 현황, 단계별 완료 유저 수, PC방 비율, 언어별 분포

인사이트: 튜토리얼 스킵률 ~47%, 첫 게임 진입률 51.6%, D1 리텐션 16.8%

✅ Python 스크립트로 자동화

  • 첫 게임 진입률 (53.0%)
  • 국가별 진입률 → metrics-country-entry-rate 인덱스
  • D1 리텐션 (16.8%)
  • 시간대별 가입 피크 분석

💡 추천 대시보드

🎮 1. 캐릭터 밸런스 대시보드

인덱스: battle-user-game-release-log

시각화:

  • 캐릭터별 픽률 (characterNum)
  • 캐릭터별 평균 순위 (gameRank)
  • 캐릭터별 킬/데스 비율
  • 무기 조합별 성과
  • 시간대별 메타 변화

활용: 패치 전후 밸런스 변화 추적, 핫픽스 필요 캐릭터 식별

🌐 2. 서버 성능 대시보드

인덱스: battle_latency_*, battle-user-game-release-log (avgLatency)

시각화:

  • 지역별 평균 레이턴시
  • 시간대별 레이턴시 추이
  • 레이턴시 분포 히스토그램
  • 고레이턴시 유저 비율 알림

활용: 서버 이슈 조기 감지, 지역별 인프라 개선 우선순위

💰 3. 경제 시스템 대시보드

인덱스: battle-user-game-release-log (creditSource, crGet*, crUse*)

시각화:

  • 크레딧 획득/소비 밸런스
  • 획득 소스별 비율 (몬스터, 드론, 가이드로봇 등)
  • 소비 카테고리별 비율
  • 게임 모드별 경제 차이

활용: 인게임 경제 밸런싱, 콘텐츠 가치 평가

📈 4. 매치메이킹 품질 대시보드

인덱스: battle-user-game-release-log (beforeNormalTeamMmr, preMade)

시각화:

  • MMR 분포 히스토그램
  • 매치 내 MMR 편차
  • 프리메이드 vs 솔로 비율
  • 매칭 대기시간 추이 (별도 로그 필요)

활용: 매칭 품질 모니터링, 랭크 시스템 개선

🏆 5. 게임 모드별 현황 대시보드

인덱스: battle-user-game-release-log (gameMode, gameModeSub)

시각화:

  • 게임 모드별 플레이 비율
  • 시간대별 모드 선호도 변화
  • 모드별 평균 게임 시간 (duration)
  • 모드별 이탈률 (giveUp)

활용: 콘텐츠 인기도 파악, 이벤트 모드 효과 측정

🚨 6. 이상 행위 탐지 대시보드

인덱스: battle-user-game-release-log (hackAttemptLog, afk)

시각화:

  • 핵 시도 유형별 빈도
  • AFK 비율 추이
  • 비정상 플레이 패턴 (극단적 스탯)
  • 의심 유저 리스트

활용: 치터 조기 탐지, 제재 우선순위 결정

🎯 개요

이터널 리턴의 다양한 게임 데이터를 Kibana로 시각화하여 의사결정에 활용합니다. 이 가이드는 대시보드 구축 방법과 주요 인사이트를 문서화합니다.

💡 현재까지 발견한 인사이트

  • 튜토리얼 스킵률 ~47% - 거의 절반의 신규 유저가 스킵
  • 첫 게임 진입률 51.6% - 가입자 절반만 게임 플레이
  • D1 리텐션 16.8% - 다음 날 복귀율 낮음
  • 피크 타임: 금요일 20-23시 - 주말 저녁이 최대 유입

🗄️ 데이터 인덱스 구조

1. new-user-release-log 신규 가입

유저가 계정을 생성할 때 기록되는 로그입니다.

필드 타입 설명
userNum number 유저 고유 번호
authProvider keyword 인증 제공자 (Steam, Kakao 등)
country keyword 국가 코드 (KR, US, JP 등)
language keyword 클라이언트 언어
pcCafe boolean PC방 여부
@timestamp date 가입 시각

2. tutorial-release-log 튜토리얼

튜토리얼 진행 상태가 기록되는 로그입니다.

필드 타입 설명
userNum number 유저 고유 번호
code number 튜토리얼 단계 (10001~10006)
skip boolean 스킵 여부
clearDtm date 클리어 시각
rewardDtm date 보상 수령 시각

📝 튜토리얼 코드 매핑

  • 10001 - 기본 조작
  • 10002 - 아이템 획득
  • 10003 - 전투 기초
  • 10004 - 스킬 사용
  • 10005 - 제작 시스템
  • 10006 - 최종 테스트

📈 시각화 구성

대시보드는 4개의 시각화로 구성됩니다.

📊 1. 신규 가입자 추이

타입: Date Histogram (Line Chart)

인덱스: new-user-release-log

설정: X축 - @timestamp (3시간 간격), Y축 - Count

용도: 시간대별 가입 패턴 파악, 이벤트/마케팅 효과 측정

🌍 2. 국가별 신규 유저 Top 5

타입: Pie Chart

인덱스: new-user-release-log

설정: Split Slices by country.keyword, Top 5 by Count

용도: 주요 유입 국가 파악, 지역별 마케팅 전략 수립

⏭️ 3. 튜토리얼 스킵 현황

타입: Bar Chart (Horizontal)

인덱스: tutorial-release-log

설정: Split by code, Sub-split by skip (true/false)

용도: 어느 단계에서 스킵이 많은지 파악

✅ 4. 튜토리얼 단계별 완료 유저 수

타입: Vertical Bar Chart

인덱스: tutorial-release-log

설정: Split by code, Metric - Unique Count of userNum

핵심: 단순 Count가 아닌 Unique Count로 중복 제거

⚠️ 주의: Count vs Unique Count

한 유저가 여러 번 튜토리얼을 시도하면 Count는 부풀려집니다. 실제 완료 유저 수를 보려면 반드시 Unique Count of userNum을 사용하세요.

🛠️ 대시보드 생성 단계

1

Index Pattern 생성

Stack Management → Index Patterns → Create index pattern

new-user-release-logtutorial-release-log 각각 생성

2

Discover에서 데이터 확인

각 인덱스의 필드 구조와 샘플 데이터 확인

시간 범위가 적절한지 체크 (Last 7 days 권장)

3

시각화 생성

Visualize → Create visualization

4개 시각화를 각각 생성하고 저장

4

대시보드 조립

Dashboard → Create dashboard

저장된 시각화들을 추가하고 레이아웃 배치

5

시간 필터 설정

기본 시간 범위를 Last 7 days로 설정

대시보드 저장 시 "Store time with dashboard" 체크

🔍 유용한 필터/쿼리

특정 국가만 보기

country.keyword: "KR"

스킵한 유저만 보기

skip: true

특정 튜토리얼 단계만

code: 10001

PC방 유저만

pcCafe: true

💡 팁: 필터 저장

자주 사용하는 필터 조합은 대시보드에 저장해두면 편리합니다. 국가별/플랫폼별 뷰를 쉽게 전환할 수 있어요.

📐 메트릭 계산 방법론

각 메트릭이 어떤 인덱스의 어떤 필드를 사용하여 계산되는지 정확히 설명합니다.

⚠️ DAU 정의의 차이

battle-user-game-release-log, asset-release-log, login-release-log 등은 각각 DAU 정의와 수치가 다릅니다:

  • login-release-log: 로그인만 하고 게임 안 한 유저 포함
  • asset-release-log: 자산 변동이 있는 유저만 (가챠, 상점 등)
  • battle-user-game-release-log: 실제 게임 플레이 완료 유저 (가장 엄격한 정의)

1. 첫 게임 진입률 (First Game Entry Rate)

📊 정의

신규 가입자 중 실제로 게임을 1회 이상 플레이한 유저의 비율

🗄️ 사용 인덱스

new-user-release-log 신규 가입자 목록 (분모)
battle-user-game-release-log 게임 플레이 유저 목록 (분자)

🔑 조인 키

userNum 필드로 두 인덱스를 조인

📝 계산식

# A = new-user-release-log의 userNum 집합 (기간 내 신규 가입자)
# B = battle-user-game-release-log의 userNum 집합 (기간 내 게임 플레이 유저)

진입률 = |A ∩ B| / |A| × 100%

# 예시: 신규 2,794명 중 1,481명이 게임 플레이
# 진입률 = 1,481 / 2,794 × 100% = 53.0%

💡 왜 battle-user-game-release-log인가?

이 인덱스는 실제 게임 완료 시점에 기록됩니다. 로그인만 하고 나간 유저, 로비에서 이탈한 유저는 포함되지 않아 "진짜 게임을 해본 유저"를 정확히 측정합니다.

2. 국가별 진입률

📊 정의

국가별로 첫 게임 진입률을 분리하여 계산

🗄️ 사용 인덱스 & 필드

new-user-release-log.country 국가 코드 (KR, US, JP, BR 등)
new-user-release-log.userNum 국가별 신규 유저 그룹화
battle-user-game-release-log.userNum 게임 플레이 여부 확인

📝 계산식

# 국가 X에 대해:
# A_x = new-user-release-log에서 country='X'인 userNum 집합
# B = battle-user-game-release-log의 userNum 집합

국가별_진입률(X) = |A_x ∩ B| / |A_x| × 100%

# 예시: 한국 신규 1,200명 중 720명이 게임 플레이
# KR 진입률 = 720 / 1,200 × 100% = 60.0%

3. D1 리텐션 (Day 1 Retention)

📊 정의

가입 다음 날에 게임을 플레이한 유저 비율

🗄️ 사용 인덱스 & 필드

new-user-release-log.@timestamp 가입 시각 (기준일 D 결정)
new-user-release-log.userNum 유저 식별
battle-user-game-release-log.@timestamp 게임 플레이 시각 (D+1일 체크)
battle-user-game-release-log.userNum 플레이 유저 식별

📝 계산식

# 유저 U의 가입일 = D
# D1 복귀 조건: battle-user-game-release-log에 userNum=U이고 
#               @timestamp가 D+1일 (00:00 ~ 23:59)인 레코드 존재

# 분모: 최소 1일 이상 지난 신규 가입자
# 분자: 그 중 D+1일에 게임 플레이한 유저

D1 리텐션 = (D+1일 플레이 유저) / (1일 이상 경과 신규 유저) × 100%

# 예시: 1,105명의 1일 경과 유저 중 186명이 D+1일에 플레이
# D1 리텐션 = 186 / 1,105 × 100% = 16.8%

⚠️ 주의사항

D1 계산 시 최소 1일 이상 경과한 유저만 분모에 포함. 오늘 가입한 유저는 아직 D+1이 안 됐으므로 제외.

4. D7 리텐션 (Day 7 Retention)

📊 정의

가입 7일 후에 게임을 플레이한 유저 비율

📝 계산식

# D1과 동일한 방식, 단 D+7일 체크

D7 리텐션 = (D+7일 플레이 유저) / (7일 이상 경과 신규 유저) × 100%

⚠️ 주의사항

D7 계산을 위해선 최소 7일 이상 경과한 유저 데이터가 필요. 최근 7일 가입자는 D7 분모에 포함 불가.

📌 요약: 인덱스별 역할

인덱스 역할 주요 필드
new-user-release-log 신규 유저 정의 (분모) userNum, @timestamp, country
battle-user-game-release-log 게임 플레이 정의 (분자) userNum, @timestamp
tutorial-release-log 튜토리얼 진행/스킵 userNum, code, skip

🔬 고급 분석 결과

Python 스크립트로 new-user-release-logbattle-user-game-release-log를 조인 분석한 결과입니다. (최근 7일 기준)

🎮 첫 게임 진입률

신규 가입자2,197명
게임 플레이 유저1,134명
첫 게임 진입률51.6%
1시간 내 첫 게임68.4%
24시간 내 첫 게임98.9%

💡 게임 플레이 유저의 약 70%는 가입 후 1시간 이내에 첫 게임을 시작합니다.

📈 D1/D7 리텐션

D1 리텐션16.8% (186/1,105명)
D7 리텐션측정 대기 중

💡 가입 다음 날에도 플레이하는 유저는 약 17%입니다.

⏰ 시간대별 가입 피크

1위금요일 20:00 (76명)
2위목요일 15:00 (75명)
3위금요일 21:00 (73명)
4위금요일 23:00 (73명)
5위목요일 21:00 (72명)

💡 금요일 저녁~밤 시간대가 신규 유저 유입 피크 타임입니다.

🐍 분석 스크립트

이 분석은 Python 스크립트로 수행되었습니다. Kibana Transform 권한이 있다면 자동화할 수 있습니다.

# calculate_onboarding_metrics.py
# Kibana bsearch API로 두 인덱스를 조인 분석
python3 calculate_onboarding_metrics.py

🚀 구현 현황 & 확장 아이디어

✅ 구현 완료

🔜 추후 확장

결론

이 대시보드로 신규 유저 유입과 온보딩 품질을 실시간으로 모니터링할 수 있습니다. 특히 튜토리얼 스킵률 47%라는 인사이트는 온보딩 경험 개선의 중요한 시작점이 됩니다.

데이터 기반 의사결정의 첫 걸음! 🎮📊