本文以遊戲公司資料分析情境為例,介紹Log ServiceLogStore與MySQL資料庫關聯分析功能。
前提條件
背景資訊
某遊戲公司,主要包括兩大類資料:使用者遊戲日誌資料和使用者中繼資料。Log Service可即時採集使用者遊戲日誌資料,包括操作、目標、血、魔法值、網路、支付手段、點擊位置、狀態代碼、使用者ID等資訊。然而使用者中繼資料,包括使用者的性別、註冊時間、地區等資訊,不能列印到日誌中,所以一般儲存到資料庫中。現在該公司希望將使用者遊戲日誌與使用者中繼資料進行聯合分析,獲得最佳的遊戲營運方案。
針對上述需求,Log Service查詢分析引擎,提供LogStore和外部資料源(ExternalStore,例如MySQL資料庫、OSS等)聯集查詢分析功能。您可以使用SQL的JOIN文法把使用者遊戲日誌和使用者中繼資料關聯起來,分析與使用者屬性相關的指標。除此之外,您還可以將計算結果直接寫入外部資料源中,便於結果的進一步處理。
操作步驟
在MySQL資料庫中,建立使用者屬性工作表。
建立一張名為join_meta的資料表,用於儲存使用者ID、暱稱、性別、年齡、註冊時間、賬戶餘額和註冊地區。
CREATE TABLE `join_meta` ( `uid` int(11) NOT NULL DEFAULT '0', `user_nick` text, `gender` tinyint(1) DEFAULT NULL, `age` int(11) DEFAULT NULL, `register_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `balance` float DEFAULT NULL, `region` text, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8添加白名單。
RDS MySQL資料庫
需添加白名單地址100.104.0.0/16、11.194.0.0/16和11.201.0.0/16。更多資訊,請參見設定IP白名單。
ECS上自建的MySQL資料庫
需設定安全性群組規則,允許100.104.0.0/16、11.194.0.0/16和11.201.0.0/16網段訪問。具體操作,請參見添加安全性群組規則。
ADB MySQL資料庫
需添加白名單地址100.104.0.0/16、11.194.0.0/16和11.201.0.0/16。更多資訊,請參見設定白名單。
建立ExternalStore。
登入安裝CLI所在的伺服器,在命令列執行
touch命令,建立設定檔/home/shell/config.json。在config.json中添加如下指令碼。根據實際情況您需要替換region、vpc-id、host、port、username、password、db和table的值。{ "externalStoreName":"sls_join_meta_store", "storeType":"rds-vpc", "parameter":{ "region":"cn-qingdao", "vpc-id":"vpc-m5eq4irc1pucp*******", "host":"rm-bp1******rm76.mysql.rds.aliyuncs.com", "port":"3306", "username":"user", "password":"****", "db":"scmc", "table":"join_meta" } }參數
參數說明
externalStoreNameExternalStore名稱,必須小寫。
storeType資料來源類型,固定為
rds-vpc。region地區。詳細說明如下:
如果是RDS MySQL資料庫,則配置region為RDS執行個體所在地區。
如果是ADB MySQL資料庫,則配置region為ADB執行個體所在地區。
如果是專用網路下ECS上自建的MySQL資料庫,則配置region為ECS執行個體所在地區。
重要RDS執行個體、ADB執行個體或ECS執行個體必須與Log ServiceProject處於同一地區。
vpc-idVPC ID。詳細說明如下:
如果是專用網路下的RDS PostgreSQL資料庫,則配置vpc-id為RDS執行個體所屬專用網路的ID。
如果是專用網路下的ADB PostgreSQL資料庫,則配置vpc-id為ADB執行個體所屬專用網路的ID。
如果是專用網路下阿里雲Hologres資料庫,則配置vpc-id為阿里雲Hologres所屬專用網路的ID。
host資料庫地址。詳細說明如下:
在專用網路下,外表建立後,如果資料庫的執行個體IP發生變化(比如資料庫執行個體發生遷移),則會影響資料庫外表的訪問(即使配置中採用了內網網域名稱,因為建立外表時,後端會自動基於網域名稱解析IP,並儲存到後端配置中,當前暫不支援自動重新整理網域名稱對應的IP)。這種情況下,需要對外表進行更新或者重建。
如果是專用網路下的RDS MySQL資料庫,則配置host為RDS執行個體的內網地址(內網網域名稱或內網IP地址)。
如果是專用網路下的ADB MySQL資料庫,則配置host為ADB執行個體的內網地址(內網網域名稱或內網IP地址)。
如果是專用網路下ECS上自建的MySQL資料庫,則配置host為ECS的私網IP地址。
如果資料庫通過公網可以訪問,則配置對應的公網網域名稱或公網IP地址。
port連接埠號碼。詳細說明如下:
如果是RDS MySQL資料庫,則配置port為RDS執行個體的連接埠號碼。
如果是ADB MySQL資料庫,則配置port為ADB執行個體的連接埠號碼。
如果是專用網路下ECS上自建的MySQL資料庫,則配置port為ECS上MySQL的服務連接埠。
username資料庫使用者名稱。
password資料庫密碼。
db資料庫名。
table資料庫表名,支援兩種格式:
table_name,例如test。
schema_name.table_name,例如public.test。
執行如下CLI命令,建立對應的外表。其中
<project-name>替換為外表所在project的name。aliyunlog log create_external_store --project_name=<project-name> --config="file:///home/shell/config.json"
使用JOIN文法進行聯集查詢分析。
在Project列表地區,單擊目標Project。
在頁簽中,單擊目標Logstore。
執行查詢分析語句。
指定日誌中的userid欄位和資料庫表中的uid欄位關聯LogStore和MySQL資料庫。
分析活躍使用者的性別分布。
* | select case gender when 1 then '男性' else '女性' end as gender, count(1) as pv from log l join sls_join_meta_store u on l.userid = u.uid group by gender order by pv desc
分析不同地區活躍度。
* | select region , count(1) as pv from log l join sls_join_meta_store u on l.userid = u.uid group by region order by pv desc
分析不同性別的消費情況。
* | select case gender when 1 then '男性' else '女性' end as gender, sum(money) as money from log l join sls_join_meta_store u on l.userid = u.uid group by gender order by money desc
儲存查詢分析結果到MySQL資料庫中。
在MySQL資料庫中,建立名為report的資料表,該表格儲存體每分鐘的PV值。
CREATE TABLE `report` ( `minute` bigint(20) DEFAULT NULL, `pv` bigint(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8參見步驟3為report表建立ExternalStore。
在Log ServiceLogStore的查詢分析頁面中,執行如下查詢語句將分析結果儲存到report表,其中sls_report_store對應的是sls的外表名稱。
* | insert into sls_report_store select __time__- __time__ % 300 as min, count(1) as pv group by min儲存成功後,您可以在MySQL資料庫中查看儲存結果。
