콘텐츠로 이동

Play log

  • 타이니팡2 for kakao, 아쿠팡 for kakao 같은 게임에서 플레이 횟수 및 점수를 분석하고자 함
  • 수집 후 디비에 저장되는 정보는 [날짜],[앱],[유저],[모드],latest([레벨]),count,greatest([점수])

카테고리

  • Scribe/FTP 방식
상용 서버 172.19.1.10 service_metrics-play_log
개발 서버 222.112.182.65 service_metrics_test-play_log
* Web 방식
상용 서버 http://gsp.com2us.net/game/service_metrics/api/log.php
개발 서버 http://gsp.com2us.net/game/service_metrics/api/log.php

로그 스펙

Note

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

필드명 설명 타입 필수여부
date 로그 발생 시각 형식: 년-월-일 시:분:초 예) 2012-01-19 16:24:00 string Y
channel C2S: HIVE KAK: 카카오 LIN: 라인 WEI: 웨이보 * STE: 스팀 string(3) Y
user_id 클라이언트에서 보내온 허브 uid (타 채널의 경우는 해당 채널에서 사용하는 user_id) bigint Y
app_id HIVE에서 사용하는 AppID 예)'com.com2us.derbyday.kakao.freefull.google.global.android.common' string(200) Y
level 게임 내에서 유저나 캐릭터의 레벨 int Y
mode 아쿠팡과 같이 여러개의 서브 게임으로 분류되어 있는 경우 게임 모드 id 값 (1부터 시작, 0은 안됨), 없으면 1 int Y
score 점수 int Y
server_ip 서버의 IP string(32) Y
company 로그의 대상이 되는 게임 제작 회사 예) "C2S": 컴투스, "GVI": 컴투스홀딩스 string(3) Y

scribe 방식

<!--?php $GLOBALS['THRIFT_ROOT'] = '/dev/scribe-php'; // 해당경로는 절대적인 것이 아님. 환경에 맞게 수정하기 바람. include_once $GLOBALS['THRIFT_ROOT'].'/scribe.php'; include_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php'; include_once $GLOBALS['THRIFT_ROOT'].'/transport/TFramedTransport.php'; include_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php'; … public function writePlayLog($app_id, $channel, $user_id) // 함수또한 예제임. 각자에 맞게 수정요함.(단 category는 반드시 위의 서버 정보의 카테고리명 으로 고정) { $msg['category'] = 'service_metrics-play_log'; $msg['message'] = array(); $msg['message']['date'] = date('Y-m-d H:i:s', time()); $msg['message']['app_id'] = $app_id; $msg['message']['channel'] = $channel; $msg['message']['user_id'] = $user_id; $msg['message']['level'] = $level; $msg['message']['mode'] = $mode; $msg['message']['score'] = $score; $msg['message']['client_ip'] = $client_ip; $msg['message']['server_ip'] = $server_ip; $msg['message'] = json_encode($msg['message']); $entry = new LogEntry($msg); $messages = array($entry); //var_dump($messages); $socket = new TSocket('localhost', 1463, TRUE); // log를 전송할 목적지 host(포트고정) $transport = new TFramedTransport($socket); $protocol = new TBinaryProtocol($transport, FALSE, FALSE); $scribe_client = new scribeClient($protocol, $protocol); $transport->open();<br ?--> $scribe_client->Log($messages);
$transport->close();
}
?>

로그 예제

{
    "date": "2013-01-25 18:01:07",
    "channel": "KAK",
    "user_id": 88190614797050961,
    "app_id": "com.com2us.tinypang.kakao.freefull.google.global.android.common",
    "level": 14,
    "mode": 1,
    "score": 142888,
    "server_ip": "112.175.xxx.xxx",
    "client_ip": "117.111.6.47"
}
{
    "date": "2013-01-25 18:01:07",
    "channel": "KAK",
    "user_id": 88577601051580384,
    "app_id": "com.com2us.tinypang.kakao.freefull.google.global.android.common",
    "level": 12,
    "mode": 1,
    "score": 100170,
    "server_ip": "112.175.xxx.xxx",
    "client_ip": "183.34.73.205"
}