登录日志
此日志由用户登录存储。您可以检查加入新游戏或因促销而玩游戏的用户的当前状态。
類別¶
- 寫作類型
常見伺服器 | 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 hhss 例如:2012-01-19 16:24:00 對於 Scribe/FTP 類型是必需的,對於 Fluentd 類型是可選的 | 字串 | 否 |
dateTime | 記錄存儲時間 格式:yyyy-mm-dd hhss 例如: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 hhss 例如: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();
}
?>
如何使用¶
- 每小时在服务器上获取堆叠日志,通过实现 openQuery 提供实时玩家的状态。
- 它帮助您通过新发布或游戏营销立即检查用户数量。 ](http://developers.withhive.com/wp-content/uploads/2018/05/180514-analytics-login-01-EN.png){width="650px"}
- 日志不显示 server_id(识别服务器),因此它利用表 Login_log。
- server_id 根据游戏的不同而有所不同,但通常分为以下几类:1(韩国);2(日本);3(中国);4(全球)。