콘텐츠로 이동

재화 총통화 요약 로그

재화 총통화 요약 로그는 게임 유저들이 보유하고 있는 총 재화량의 흐름을 파악하기 위한 로그이며, 총 통화량 조회를 위한 쿼리는 게임 개발사가 실행하고, 쿼리에 대한 결과를 로그로 수집하는 방식의 로그로 게임별로 생성되는 로그 수가 다릅니다.

  • 캐릭터 기반 게임이 아닌 경우
    • 마켓 * 레벨 * 액티브 유저 선정 기간(since 필드 값) * 재화 구분 수
  • 캐릭터 기반 게임의 경우
    • (마켓 * 레벨 * 액티브 유저 선정 기간 * 캐릭터 기반 재화 구분 수 * 캐릭터 종류)
    • (마켓 * 레벨 * 액티브 유저 선정 기간 * 캐릭터 기반 재화 구분 수 * 계정 수)

HIVE 애널리틱스에서 재화 총통화 요약 로그를 통해 다음의 사항을 파악할 수 있습니다.

  • 유저들이 재화를 계속 쌓아 두기만 하는지, 소모하는지를 파악
  • 레벨별로 재화량 흐름 파악
  • 로그를 생성하는 시점으로 1일, 7일, 30일 동안 액티브한 유저별 재화량 흐름 파악

돌아온 액션퍼즐 패밀리 예시

  • asset * since 별로 각각 전송
  • group by market, level이 있으니 최종 결과는 market * level * asset * since

  • 쿼리결과를 아래의 로그 포맷으로 전송

SELECT 
    CONVERT(CHAR(10), getdate(),120),
    'KAK',
    'actionpuzzlefamily',
    [market],
    level,
    1 AS asset_id, 
    SUM(cash) AS cash, 
    COUNT(*), 
    30
FROM  #TEMP1
WHERE
    [marketcheck] = 1 AND 
    lastlogin >= (GETDATE()-30)
GROUP BY [market],[level]

카테고리

상용 서버 service_metrics-asset_snapshot_summary_log
개발 서버 service_metrics_test-asset_snapshot_summary_log

FTP 전송 시

파일명 규칙 asset_snapshot_summary_[날짜]_[서버]_[중복방지용id].json 예. asset_snapshot_summary_20180705_111500_GLOBAL-4.json

로그 스펙

Note

스네이크 케이스(예: server_id) 형태의 필드는 최종 저장소(BigQuery)에 저장될 때 카멜 케이스(예: serverId) 형태로 변환되며, serverid 같은 스펙에 명시되지 않은 형태로 전송된 로그는 해당 컬럼에 저장되지 않습니다.

character_type_id 서버 내에서 사용하는 캐릭터 타입 구분 값 캐릭터가 없는 게임에서는 캐릭터 타입 구분 값을 0으로 설정intY

필드명 설명 타입 필수여부
date 로그 발생 시각, 형식: 년-월-일 시:분:초
예) 2012-01-19 16:24:00
string Y
timezone 로그에 입력하는 시간 파라미터 값의 UTC offset 값
  • 기존 scribe/ftp 방식으로 전송할 때 date 값의 기준이 항상 KST이므로 공백 혹은 GMT+09:00로 값을 고정
  • 예. "GMT+09:00"
  • 로그 정의를 fluentd/http 방식으로 전송할 때 dateTime 값에 따라 timezone 값을 동적으로 설정
  • 예. "GMT+10:30"
string Y
channel 로그인 채널
C2S: Hive
KAK: 카카오
LIN: 라인
WEI: 웨이보
STE: 스팀
string(3) Y
game 게임브렌드 네임 사용.(ex: derbydays),app_id의 세 번째항목 예. com.com2us.littlelegends.kakao.freefull.apple.global.ios.universal => littlelegends string(50) Y
market 마켓 정보
"TS": SKT T store
"OL": KT Olleh Market
"OZ": LGU+ Oz Store
"AP": Apple App store
"GO": Google Play
"SA": Samsung Apps
"LE": Com2uS Lebi
"MM": ChinaMobile Mobile Market
"SN": Sina Weibo Point
"36": Qihu 360 Point
"MO": Momo Momo Point
"DN": DeNA Mobage Point
"NA": Naver App Store
"AM": Amazon
"ON": ONE store
"FU": Funtap
"HU": Huawei
"OP": OPPO
"VI": VIVO
"XI": 샤오미
"TC": 텐센트
"HS": Hive Store(Crossplay)
"ST": Steam
string(2) Y
level 게임 내 유저 레벨 (캐릭터가 다수면 최고 레벨) int Y
since 로그 생성 시점(date 필드 값)과 유저의 마지막 로그인 시점의 시간 차이로, 액티브한 유저 선정의 기준.
0: 전체 유저
1: 로그 생성 시점의 1일전부터 로그 생성 시점까지 액티브한 유저를 선정한다는 의미
7: 로그 생성 시점의 7일전부터 로그 생성 시점까지 액티브한 유저를 선정한다는 의미
30: 로그 생성 시점의 30일전부터 로그 생성 시점까지 액티브한 유저를 선정한다는 의미
11: 가입일이 로그 생성 시점의 1일전부터인 유저를 선정한다는 의미
17: 가입일이 로그 생성 시점의 7일전부터인 유저를 선정한다는 의미
int Y
asset_id 현금성 재화/소셜포인트의 경우(1~100), 비현금성 재화의 경우 (101~)
한번 정의 후 변경되면 안됨. 반드시 테스트 필수!
(cf. 현금 구매가능한 재화라 하더라도 구매 보다는 게임 내 획득이 주력인 재화인 경우는 101번 이상으로 세팅)
재화 구분. cash_var_log / noncash_var_log와 동일하게 설정
int Y
asset_name asset_id에 대한 간단한 설명 (예. bell, star, goldball, gold) string(50) Y
amount asset_id에 해당하는 재화 보유량 합계 bigint Y
count asset_id에 해당하는 재화 보유량 건수 int Y
m_amount 대상 재화 최대 보유량 bigint Y
server_ip 로그를 발생하는 서버의 IP(게임 서버 ip ...) string(32) Y
company 로그의 대상이 되는 게임 제작 회사:
예. "C2S": 컴투스, "GVI": 컴투스홀딩스
string(3) Y
server_id 서버 구분 코드
서버코드표 참조하여 '서버 코드(JSON 입력 코드)'를 입력
string Y
character_level 서버 내에서 사용하는 캐릭터 레벨 값.
캐릭터가 없는 게임에서는 캐릭터 레벨 값을 0으로 설정
int Y
guid 매 로그마다 발생하는 고유 키 값
uuid와 같은 랜덤 문자열 형태를 권장
varchar(64) N

로그 예제

{
   "date": "2017-09-05 17:23:01",
   "game": "test",
   "market": "GO",
   "level": 34,
   "since": 17,
   "asset_id": 801,
   "asset_name": "ub9c8uc77cub9acuc9c0",
   "amount": 705,
   "count": 2,
   "m_amount": 405,
   "server_ip": "10.0.0.1",
   "server_id": "GLOBAL",
   "timezone": "UTC+9",
   "character_type_id": 0,
   "character_level": 0,
   "channel": "C2S",
   "company": "GVI",
   "guid": "ca4bd34c867f4617a819ae139d8d6670"
}

활용 예시

  • 유저들이 가지고 있는 총 보유재화량의 흐름을 파악하기 위함 - 계속 쌓아두고 있는지, 소모되고 있는지 파악
  • 레벨별, 액티브 유저 기준(since - 1일,7일,30일)으로도 구분하여 파악