游戏日志分析5:数据库与日志关联分析

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在日志分析场景中,我们经常会遇到数据分散在各地场景,例如: 1. 用户操作、行为相关的数据在日志中 2. 用户属性、注册信息,资金、道具等状态存在DB中 3. 根据1和2我们需要对用户进行分层统计,将最后的计算结果写入DB中供报表系统查询 因此为了做分析,我们要在日志服务Logstore.

系列文章:

在日志分析场景中,我们经常会遇到数据分散在各地场景,例如:

  1. 用户操作、行为相关的数据在日志中
  2. 用户属性、注册信息,资金、道具等状态存在DB中
  3. 根据1和2我们需要对用户进行分层统计,将最后的计算结果写入DB中供报表系统查询

因此为了做分析,我们要在日志服务Logstore和其他数据源中进行关联查询。以下我们就来看一个例子

用户日志数据

下图是一条经典的游戏日志样例,包括操作、目标、血、魔法值、网络、支付手段、点击位置、状态码、用户id。日志数据量一般规模会随着用户数目+活动频率相关,对一个大型游戏而言,一天会有几百G-几TB规模。

image.png | left

用户元信息

日志表示是增量的事件,一些静态的用户信息,例如用户的性别、注册时间、地区等等是固定不变的,或者在客户端很难获取,不能够打印到日志里。我们把这些信息称为用户元信息。元数据一般和用户数目相关,一般在几百MB-十几GB之间。

在分析日志的时候,需要结合事件日志和用户元信息才能拿到结果,例如性别对支付行为的影响。性别只保存在用户元信息中,在日志中则没有。我们需要通过用户id把日志和用户信息关联起来分析。

下图是用户元信息样例,包括了用户的id、昵称、性别、年龄、注册时间、账户余额、省份。

image.png | left

日志服务和MySQL关联分析

  • 日志服务LogStore,提供日志的收集、存储、查询分析。
  • 日志服务ExternalStore,映射到RDS表。开发者把用户信息放到rds表中。

日志服务查询分析引擎,提供跨LogStore和ExternalStore的查询分析功能,使用SQL的join语法把日志和用户元信息关联起来。用户可以用来分析跟用户属性相关的指标。

image.png | left

除在查询过程中引用ExternalStore之外,日志服务还支持将计算结果直接写入ExternalStore中(例如MySQL),方便结果的进一步处理。

如何使用?

1. 采集日志到日志服务

  1. 移动端采集

    1. Android
    2. iOS
  2. 服务器日志采集ilogtail

收集的日志样例:

image.png | left

2. 创建MySQL表,保存用户属性

创建一张chiji_user表,保存用户的id、昵称、性别、年龄、注册时间、账户余额、注册省份。

CREATE TABLE `chiji_user` (
  `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,
  `province` text,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

3. 创建ExternalStore

创建ExternalStore需要使用日志服务cli,首先安装cli:

pip install -U aliyun-log-cli

创建ExternalStore,指定所属的project,以及ExternalStore的配置文件/root/config.json

aliyunlog log create_external_store --project_name="log-rds-demo" --config="file:///root/config.json" 

/root/config.json的内容是:

{
    "externalStoreName": "chiji_user",
    "storeType": "rds-vpc",
    "parameter": {
        "vpc-id": "vpc-m5eq4irc1pucpk85frr5j",
        "instance-id": "rm-m5ep2z57814qsn97b",
        "host": "rm-m5ep2z57814qsn97b.mysql.rds.aliyuncs.com",
        "port": "3306",
        "username": "testroot",
        "password": "123456789",
        "db": "chiji",
        "table": "chiji_user",
        "region": "cn-qingdao"
    }
}

在配置文件中,指定外部存储的名称,以及外部存储的参数。rds vpc需要指定的参数有:vpc-id ,rds实例id,内网域名、端口、用户名、密码、数据库和表名、rds所属region。

添加白名单

在rds中,添加白名单地址100.104.0.0/16
如果是mysql,请添加该地址到安全组

4. 关联分析

4.1 分析活跃用户的性别分布

使用join语法,通过指定日志中的userid和rds中的uid相等来关联日志和用户属性。

* | select  case gender  when 1 then '男性'  else  '女性'  end as gender , count(1) as pv 
  from log l join chiji_user u on l.userid = u.uid  group by gender   order by pv desc

image.png | left

4.2 分析不同省份的越活度

* | select  province , count(1) as pv   from log l join chiji_user u on l.userid = u.uid  group by province   order by pv desc

image.png | left

4.3 分析不同性别的消费情况

* | select  case gender  when 1 then '男性'  else  '女性'  end as gender , sum(money)  as  money  from log l join chiji_user u on l.userid = u.uid  group by gender   order by money  desc

5. 保存查询分析结果

  • 首先创建结果表,该表存储每分钟的PV值:
CREATE TABLE `report` (
  `minute` bigint(20) DEFAULT NULL,
  `pv` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 同样的,参考上文创建ExternalStore的步骤,给report表撞见ExternalStore。

编写SQL把结果保存到report:

* |  insert into report select __time__- __time__ % 300 as min, count(1) as pv group by min

SQL返回的结果是最终输出到rds中的行数。最终report表的结果:

image.png | left

总结

日志服务强大的查询分析能力,帮助游戏开发者去分析用户的习惯。同时,日志服务提供的ExternalStore功能,帮助用户扩展日志的信息。通过关联日志和用户属性,获取更多有价值的信息。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
604 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
10天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
17天前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
35 7
|
21天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
54 3
|
20天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
2月前
|
存储 人工智能 关系型数据库
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
「拥抱Data+AI」系列第2篇:阿里云DMS+AnalyticDB助力游戏日志数据分析与预测
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
|
1月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
114 3
|
1月前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
2月前
|
存储 SQL 监控

相关产品

  • 日志服务