บันทึกการเข้าสู่ระบบ
บันทึกนี้ถูกเก็บโดยการเข้าสู่ระบบของผู้ใช้ คุณสามารถตรวจสอบสถานะปัจจุบันของผู้ใช้ที่เข้าร่วมเกมใหม่หรือเล่นเกมเนื่องจากการส่งเสริมการขาย
หมวดหมู่¶
- ประเภทของ Scribe
เซิร์ฟเวอร์ทั่วไป | service_metrics-login_log |
---|---|
เซิร์ฟเวอร์ทดสอบ | test-login_log |
- ประเภท FTP
กฎการตั้งชื่อ | login_[วันที่]_[เซิร์ฟเวอร์]_[ID เพื่อหลีกเลี่ยงการซ้ำซ้อน].json | e.g., login_20180705_111500_GLOBAL-4.json |
---|---|---|
- ประเภท Fluentd (ตามการกำหนด Log)
เซิร์ฟเวอร์ (การกระจายโหลดไปยังสองเซิร์ฟเวอร์) | 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 (ตามการกำหนด Log)
เซิร์ฟเวอร์ | https://analytics-log.withhive.com | |
ค่าของฟิลด์ category | [ชื่อสั้นของเกม]_login_log | เช่น, {"category":"samplegame_login_log","aaa":1} |
วิธีการส่งข้อมูลโดยละเอียด |
ข้อกำหนดการบันทึก¶
Note
ฟิลด์ที่ใช้รูปแบบ snake_case เช่น server_id
จะถูกแปลงเป็นรูปแบบ camelCase เช่น serverId
เมื่อถูกจัดเก็บในที่จัดเก็บสุดท้าย (BigQuery) และล็อกที่ส่งในรูปแบบที่ไม่ได้ระบุ เช่น 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 เช่น, "derbyday_login_log" | string | Y |
timezone | UTC offset ของพารามิเตอร์เวลาในบันทึก กำหนดค่าของ timezone เป็น ช่องว่างหรือ GMT+09:00 เนื่องจากค่าของวันที่จะเป็น KST เสมอเมื่อส่งการกำหนดบันทึกเป็นประเภท scribe หรือ ftp เช่น, “GMT+09:00” * กำหนดค่าของ timezone อย่างยืดหยุ่นตามค่าของ dateTime เมื่อส่งการกำหนดบันทึกเป็นประเภท fluentd หรือ http เช่น, “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 | AppID ที่ Hive SDK ใช้ เช่น, 'com.com2us.derbyday.kakao.freefull.google.global.android.common' | string(200) | Y |
did | Device ID ที่ Hive SDK ใช้ | 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 | ภาษาในเกมที่ตั้งค่า. สองตัวอักษรเล็ก. อ้างอิง: นโยบายตัวระบุ เช่น, ko | varchar | ไม่จำเป็น แต่แนะนำ. |
is_emulator | หากเชื่อมต่อกับ Emulator สำหรับ PC เช่น BlueStacks ให้คืนค่า 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
ประเภทของ Scribe¶
<?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 (ทั่วโลก)