ログインログ
このログはユーザーログインによって保存されます。新しいゲームに参加するユーザーやプロモーションのためにゲームをプレイするユーザーの現在のステータスを確認できます。
カテゴリー¶
- スクリプトタイプ
共通サーバー | service_metrics-login_log |
---|---|
テストサーバー | test-login_log |
- FTPタイプ
命名規則 | login_[日付][サーバー][重複回避用ID].json | 例: login_20180705_111500_GLOBAL-4.json |
---|---|---|
- Fluentdタイプ(ログ定義に基づく)
サーバー (2つのサーバーへの負荷分散) | 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タイプではオプション | string | N |
dateTime | ログを保存する時間 フォーマット: yyyy-mm-dd hhss 例: 2012-01-19 16:24:00 | string | Y |
category | [ゲームのブランド名]_[ログ名] ゲームのブランド名はapp_idの3番目の項目です 例: "derbyday_login_log" | string | Y |
timezone | ログ内の時間パラメータのUTCオフセット ログ定義をscribeまたはftpタイプとして送信する際、dateの値は常にKSTであるため、timezoneの値を**空白またはGMT+09:00**として固定します。 例: “GMT+09:00” * ログ定義をfluentdまたはhttpタイプとして送信する際、dateTimeの値に応じてtimezoneの値を柔軟に設定します。 例: “GMT+10:30” | string | Y |
channel | ログインチャネル C2S: HIVE KAK: Kakao Talk LIN: LINE WEI: Weibo GVL: Gamevile Live STE: Steam | string(3) | Y |
user_id | 設定されたチャネルフィールドで使用されるユーザー識別子 C2S: vid KAK: App Centerによって発行されたユーザー識別子 LIN: App Centerによって発行されたユーザー識別子 WEI: Weibo | bigint | Y |
app_id | Hive SDKが使用するAppID 例: 'com.com2us.derbyday.kakao.freefull.google.global.android.common' | string(200) | Y |
did | Hive SDKが使用するデバイスID | bigint | Y |
level | ゲーム内のユーザーレベル (多くのキャラクターを持つ最高レベル) | int | Y |
client_ip | クライアントIP。この値はGeoIPから国の値を抽出します | string(32) | Y |
server_ip | サーバーIP | string(32) | N |
device_name | ユーザーデバイスモデル 例: iPhone, iPad, SM-G935, LGM-G600S | string(32) | Y |
company | ログの対象となるゲーム出版会社: 例: "C2S": Com2uS, "GVI": Com2uS Holdings | string(3) | Y |
server_id | サーバーコード 'JSON入力コード'を入力するにはサーバーコードテーブルを参照 | string | Y |
server_uid | ゲームサーバーで使用されるユーザー識別子 | bigint | Y |
last_login_date | 昨日の最終ログイン時間 ユーザーが今日サインアップした場合、このフィールドをログイン時間として設定します フォーマット: yyyy-mm-dd hhss 例: 2017-02-28 14:33 | string | 必須ではありませんが、推奨されます。 |
country | client_ipが指定されていない場合、国コードを直接入力します。 参照: 識別子ポリシー 例: KR | string(2) | N |
os_version | OSバージョン情報。 例: 9.2.1 | string(10) | 必須ではありませんが、推奨されます。 |
game_language | ゲーム内で設定されている言語。2文字の小文字。 参照: 識別子ポリシー 例: ko | varchar | 必須ではありませんが、推奨されます。 |
is_emulator | BlueStacksなどのPC用エミュレーターに接続している場合は1を返します; そうでない場合は0を返します PC版には2を返します | int | 必須ではありませんが、推奨されます。 |
guid | ログごとに生成されるユニークキー uuidのようなランダムフォーマットが推奨されます | varchar(64) | N |
ログサンプル¶
{
"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(サーバーを識別するID)が表示されないため、Login_logテーブルを利用します。
- server_idはゲームによって異なりますが、通常は次のように分けられます: 1(韓国);2(日本);3(中国);4(グローバル)。