跳轉至

登录日志

此日志由用户登录存储。您可以检查加入新游戏或因促销而玩游戏的用户的当前状态。

類別

  • 寫作類型
常見伺服器 service_metrics-login_log
測試伺服器 test-login_log
  • FTP 類型
命名規則 login_[日期][伺服器][避免重複的ID].json 例如,login_20180705_111500_GLOBAL-4.json
  • Fluentd 類型(基於日誌定義)
伺服器 (將負載平衡到兩個伺服器) analytics-hivelog-03.withhive.com analytics-hivelog-04.withhive.com
標籤命名規則 ha2union.game.[遊戲的簡稱].login_log 例如,ha2union.game.samplegame.login_log
category 欄位的值 [遊戲的簡稱]_login_log 例如,{"category":"samplegame_login_log","aaa":1}
詳細傳輸方法
  • HTTP 類型(基於日誌定義)
伺服器 https://analytics-log.withhive.com
字段category的值 [遊戲的簡短名稱]_login_log 例如,{"category":"samplegame_login_log","aaa":1}
詳細傳輸方法

日誌規範

Note

蛇形命名的字段,如 server_id,在存储到最终存储(BigQuery)时会转换为驼峰命名,如 serverId,而以未指定形式发送的日志,例如 serverid,不会保存在其列中。

字段名稱 描述 類型 必需
date 記錄存儲時間
格式:yyyy-mm-dd hh🇲🇲ss
例如:2012-01-19 16:24:00
對於 Scribe/FTP 類型是必需的,對於 Fluentd 類型是可選的
字串
dateTime 記錄存儲時間
格式:yyyy-mm-dd hh🇲🇲ss
例如:2012-01-19 16:24:00
字串
category [遊戲品牌名稱]_[日誌名稱]
遊戲品牌名稱是 app_id 的第三項
例如:“derbyday_login_log”
字串
timezone 記錄中時間參數的 UTC 偏移量
將時區的值固定為 空白或 GMT+09:00,因為當以 scribe 或 ftp 類型發送日誌定義時,日期的值始終是 KST。
例如:“GMT+09:00”
* 在以 fluentd 或 http 類型發送日誌定義時,根據 dateTime 的值靈活設置時區的值。
例如:“GMT+10:30”
字串
channel 登錄渠道
C2S: HIVE
KAK: Kakao Talk
LIN: LINE
WEI: Weibo
GVL: Gamevile Live
STE: Steam
字串(3)
user_id 與配置的渠道字段一起使用的用戶標識符
C2S: vid
KAK: App Center 發出的用戶標識符
LIN: App Center 發出的用戶標識符
WEI: Weibo
bigint
app_id Hive SDK 使用的 AppID
例如:'com.com2us.derbyday.kakao.freefull.google.global.android.common'
字串(200)
did Hive SDK 使用的設備 ID bigint
level 遊戲中的用戶等級(擁有眾多角色的最高等級) int
client_ip 客戶端 IP。此值從 GeoIP 中提取國家值 字串(32)
server_ip 服務器 IP 字串(32)
device_name 用戶設備型號
例如:iPhone, iPad, SM-G935, LGM-G600S
字串(32)
company 遊戲發行公司,日誌的目標:
例如:“C2S”:Com2uS,“GVI”:Com2uS Holdings
字串(3)
server_id 服務器代碼
請參見 服務器代碼表 以輸入 'JSON 輸入代碼'
字串
server_uid 在遊戲服務器中使用的用戶標識符 bigint
last_login_date 昨天的最後登錄時間
如果用戶今天註冊,則將此字段設置為登錄時間
格式:yyyy-mm-dd hh🇲🇲ss
例如:2017-02-28 14:33
字串 不必需,但建議。
country 如果未提供 client_ip,則直接輸入國家代碼。
參考:標識符政策
例如:KR
字串(2)
os_version OS 版本信息。
例如:9.2.1
字串(10) 不必需,但建議。
game_language 遊戲中設置的語言。兩個小寫字母。
參考:標識符政策
例如:ko
varchar 不必需,但建議。
is_emulator 如果使用 BlueStacks 等 PC 模擬器連接,返回 1;否則,返回 0
對於 PC 版本,返回 2
int 不必需,但建議。
guid 每個日誌生成的唯一鍵
建議使用隨機格式,如 uuid
varchar(64)

日誌範例

{
    "date": "2012-11-26 13:32:45",
    "dateTime": "2012-11-26 13:32:45",
    "category": "derbyday_login_log",
    "channel": "KAK",
    "user_id": "**174577796603776",
    "app_id": "com.com2us.derbyday.kakao.freefull.google.global.android.common",
    "client_ip": "203.236.26.252",
    "server_ip": "112.175.60.138",
    "level": 28,
    "guid": "ca4bd34c867f4617a819ae139d8d6670"
}

收集的資料庫架構(簡化版)

CREATE TABLE `LOGIN_LOG_20131031` (
    `log_id` BIGINT(20) NOT NULL AUTO_INCREMENT,
    `login_date` DATE NOT NULL,
    `last_login_date` DATETIME NULL,
    `app_id` VARCHAR(200) NOT NULL,
    `channel` VARCHAR(3) NOT NULL,
    `user_id` BIGINT(20) NOT NULL,
    `device_name` VARCHAR(128) NOT NULL DEFAULT 'unknown',
    `level` INT(11) NOT NULL,
    `country` CHAR(2) NULL DEFAULT NULL,
    `count` INT(11) NOT NULL,
    `add_date` DATETIME NOT NULL,
    `mod_date` DATETIME NOT NULL,
    `db_date` DATETIME NOT NULL,
    PRIMARY KEY (`log_id`),
    UNIQUE INDEX `ix_unique` (`login_date`, `app_id`, `channel`, `user_id`, `device_name`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB

寫作類型

<?php
$GLOBALS['THRIFT_ROOT'] = '/dev/scribe-php'; // This route is changable. Modify it in accordance with the development environment.
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 writeLoginLog($app_id, $channel, $user_id) // Function is an example as well. Modify it in accordance with the development environment. (Category, however, should be fixed as ‘login_log’)
{
        $msg['category'] = 'login_log';
        $msg['message'] = array();
        $msg['message']['date'] = date('Y-m-d H:i:s', time());
        $msg['message']['last_login_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']['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); // the target host to send logs(fixed port)
        $transport = new TFramedTransport($socket);
        $protocol = new TBinaryProtocol($transport, FALSE, FALSE);
        $scribe_client = new scribeClient($protocol, $protocol);

        $transport->open();
        $scribe_client->Log($messages);
        $transport->close();  
}
?>

如何使用