Invitation log
게임 유저들이 주로 어떤 미디어를 통해 친구를 초대하는지, 얼마나 많은 초대 건수를 발송하는지 파악하기 위한 로그입니다.
카테고리¶
- Scribe/FTP 방식
상용 서버 172.19.1.10 | service_metrics-invitation_log |
---|---|
개발 서버 222.112.182.65 | service_metrics_test-invitation_log |
로그 스펙¶
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 | 해당 채널에서 유저를 구분하는 유니크한 값 (초대하는 유저) C2S : Hub Uid KAK : 88176098600759904 앱센터 ID * LIN : 게임 서버에서 사용하는 유저 구분 값 (초대하는 유저) | bigint | Y |
guest_id | 해당 채널에서 유저를 구분하는 유니크한 값 (초대받는 유저) C2S : Hub Uid KAK : -88387910967685013 와 같이 실제 앱센터 ID와 다르지만 혹시 쓸모가 있을 수 있으므로 수집 * LIN : -1 (초대받는 유저) - 게임을 안 하는 유저이므로 게임 서버에 인식값이 없다 | bigint | Y |
app_id | HIVE에서 사용하는 AppID 예)'com.com2us.derbyday.kakao.freefull.google.global.android.common' | string(200) | Y |
level | 게임 내에서 유저 또는 캐릭터의 레벨 | int | Y |
country | 라인(LINE) 게임에서만 사용하는 값으로, 국가를 의미 형식: ISO 3166-1 예) KR 라인 게임은 client_ip를 가져올수 없으므로, 게임 서버에서 client_ip를 기준, GeoIP lookup 함수를 이용해 국가코드를 가져옴 | string(2) | C2S, KAK - N LIN - Y |
client_ip | 클라이언트의 IP 이 값으로 GeoIP를 이용하여 country값을 추출 | string(32) | C2S, KAK - N LIN - Y |
server_ip | 서버의 IP | string(32) | Y |
company | 로그의 대상이 되는 게임 제작 회사 예) "C2S": 컴투스, "GVI": 컴투스홀딩스 | string(3) | Y |
로그 예제¶
- KAKAO, HIVE
{
"date": "2013-03-19 18:01:07",
"channel": "KAK",
"user_id": 88190614797050961,
"guest_id": -88190614797051021,
"app_id": "com.com2us.testgame.kakao.freefull.google.global.android.common",
"level": 10,
"client_ip": "117.111.6.47",
"server_ip": "112.175.xxx.xxx"
}
-
- LINE only
{
"date": "2013-03-19 18:01:07",
"channel": "LIN",
"user_id": 3212,
"guest_id": -111,
"app_id": "com.com2us.testgame.kakao.freefull.google.global.android.common",
"level": 10,
"country": "KR",
"server_ip": "112.175.xxx.xxx"
}
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 writeInvitationLog(...) // 예제 함수이므로 환경에 맞게 수정 요함. 단 category는 반드시 위의 서버 정보의 카테고리명으로 고정.
{
$msg['category'] = 'service_metrics-invitation_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']['guest_id'] = $guest_id;
$msg['message']['level'] = $level;
$msg['message']['country'] = $country; // GeoIP lookup 함수를 이용해 country 코드를 반환. LINE 게임에만 적용
$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();
$scribe_client->Log($messages);
$transport->close();
}
?>