콘텐츠로 이동

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();  
}
?>