基于日志服务数据加工与RDS MySQL做数据富化以及数据分析

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 准备基于sls日志服务对共享单车租赁信息进行加工分析。sls日志服务上记录2019年8月上海地区某共享单车的数据,已脱敏处理,供研究之用。因RDS数据库里保存的是每辆自行车的编号、品牌以及投放批次。因此需要使用日志服务数据加工将单车实时动态记录日志与保存在RDS上的静态数据做富化和数据分析处理。

本文要点(res_local()、res_rds_mysql()和e_table_map()专题):

  • 如何使用阿里云日志服务数据加工与RDS MySQL做数据富化
  • 如何配置数据加工使用RDS内网地址访问数据库
  • 如何使用富化后的数据做数据分析

背景

业务背景: 准备基于sls日志服务对共享单车租赁信息进行加工分析。sls日志服务上记录2019年8月上海地区某共享单车的数据,已脱敏处理,供研究之用。因RDS数据库里保存的是每辆自行车的编号、品牌以及投放批次。因此需要使用日志服务数据加工将单车实时动态记录日志与保存在RDS上的静态数据做富化和数据分析处理。
业务需求: 需要使用数据加工VPC反向代理,以便能够使用RDS内网访问数据库。因为RDS外网连接会降低实例的安全性,并且链接不稳定。因此需要使用内网访问的方式来保证传输速率和安全性

原始日志数据样例

undefined
以上logstore字段具体信息如下:
orderid表示订单号
bikeid表示自行车编号id
userid表示骑车用户的id
location_x表示骑车用户的地理位置经度
location_y表示骑车用户的地理位置维度
action表示该用户骑车行为,分为骑车开始时间和骑车结束时间
temp表示该用户骑车时温度大小
atemp表示该用户骑车时体感温度
humidity表示该用户骑车时的相对湿度
windspeed表示该用户骑车时风速大小

而具体共享单车信息在RDS MySQL中保存着,具体数据形式如下:
undefined
以上字段信息具体如下:
bikeid表示自行车编号id
brand表示该自行车品牌
batch表示投放市场批次。1表示2019年1月份投放市场批次,2表示2019年6月份投放市场批次

加工需求

  1. 需要根据logstore中的bikeid与RDS数据库中的bikeid做join富化。
  2. 然后根据处理后的日志做数据分析,分析共享单车最优调度问题。

数据加工使用RDS内网地址访问数据库做数据富化处理

加工流程

undefined

基本配置

注:只有全部符合以下条件才能正常使用数据加工使用RDS内网访问数据库功能。

  1. 该功能只允许准备链接的RDS实例和SLS的Project在同一区域region内,才能访问成功,否则会访问不通。
  2. 在使用RDS内网地址访问数据库功能时候,需要设定IP段白名单,请将100.104.0.0/16该IP段设置到白名单中(该IP段也包含登录数据DMS系统的IP段),具体设置步骤如下:

进入RDS实例详情页面,在右上角有设置白名单选项按钮,具体如下:
undefined
进入设置白名单设置页面:
undefined

加工配置

数据加工前端控制台,高级参数配置需要输入云数据库RDS的vpc_id,instance_id和实例链接端口instance_port信息,以下是参数配置:

config.vpc.vpc_id.{name}
config.vpc.instance_id.{name}
config.vpc.instance_port.{name}
# 例子:
config.vpc.vpc_id.test1: vpc-uf6mskb0b****n9yj
config.vpc.instance_id.test1: rm-uf6e61k****ahd7
config.vpc.instance_port.test1: 3306

使用该功能需要了解以下三个相关信息基本概念:

  1. vpc_id表示的是准备使用内网访问数据库的RDS实例所属于的网络类型ID,专有网络相关文档请参考什么是专有网络专有网络控制台
  2. instance_id表示准备使用内网访问数据库的RDS实例ID,相关RDS介绍请参考什么是云数据库RDS
  3. 实例链接端口instance_port表示的是准备使用内网访问数据库的RDS链接地址端口,详细请参考内网地址和外网地址介绍查看内外网地址端口

以上RDS的vpc_id、instance_id和instance_port具体可以在RDS控制台中找到,具体如下图所示:
undefined
端口信息:
undefined
具体高级参数配置示例图:
undefined

加工操作

经过上述步骤之后,此时我们可以真正的对数据做富化加工处理。以下是具体的加工语法:

# 使用RDS内网地址访问数据库,并且富化数据
e_table_map(res_rds_mysql(str_format("{}:{}",res_local("config.vpc.instance_id.test1"),res_local("config.vpc.instance_port.test1")), "your rds username", "your rds password", "you database",table="your table",primary_keys="bikeid"), "bikeid",["brand","batch"])

以上语法具体详见,res_locale_table_mapres_rds_mysql
第一次点击的预览界面,需要AccessKeyId,AccessKey相关信息请参考访问秘钥配置子账号授权
点击预览可以查看加工结果:

如上图所示,目前的数据基本上都是正常数据。接下来是对加工的数据进行加工配置,以下图中的右侧图示表示将加工的数据分发到一个的lshare_bike_target的logstore中。
undefined

数据加工诊断

undefined
点击上图中提示按钮,可进入数据加工任务详情页面,在这里可以看加工出错日志、加工消费记录等重要信息。具体如下图:
undefined

undefined
undefined
从上图中可以看到具体加工仪表大盘,还有加工出错信息等。以上图中报错信息是因为未在rds实例中添加白名单导致的。
保存数据加工之后,可能在自己目标的logstore中不能及时看到加工后的数据,是因为使用数据加工会有一个延时速率,具体信息参考数据加工仪表盘创建告警参考状态监控与告警

对富化后的数据进行数据分析

注意:在使用SQL分析的时候,需要将对应的字段建立好索引。在此案例中我们需要提前建立好orderid、bikeid、userid、location_x、location_y、action、temp、atemp、humidity、windspeed这些字段索引,具体如下图所示:
undefined
从以上数据中我们能发现什么,分析什么,统计什么,得出什么样的结论都是需要提前想好的。在这里,我们主要从以下几个方面做分析:
1、分析温度、体感温度、相对湿度、风速对共享单车租赁影响(外界环境气候因素)
2、自行车品牌对共享单车租赁影响(供应商品牌因素)
3、自行车投放市场批次对共享单车租赁影响(自行车质量因素)
4、统计每小时用车人数
5、统计一周内每星期的用车人数
6、上班或者上课因素(轨迹分析)
7、下班或者下课因素(轨迹分析)

外界环境因素

以上以分析温度对共享单车租赁影响为例:

* |SELECT COUNT(orderid) as count, temp, action WHERE action LIKE 'start_time' group by temp,action ORDER BY temp DESC

上述SQL语句表示的是当action是start_time的情况下,统计各个温度的骑车人数
undefined
通过上图可以得出在温度大概在10~18、20~29区间的时候骑车人数最多。所以当天气温度大概是这个范围的时候,可以适当增加单车数量。

供应商品牌因素

* |SELECT COUNT(orderid) as count, brand, action WHERE action LIKE 'start_time' group by brand,action ORDER BY brand DESC

上述SQL语句表示的是当action是start_time的情况下,统计品牌的总骑车人数
undefined
通过上图分析可以得知,Forever品牌自行车更受用户喜爱,可以在此后的单车供应的时候多考虑Forever品牌自行车。这样或许可以提高用户粘度。

自行车质量因素

* |SELECT COUNT(orderid) as count, batch, action WHERE action LIKE 'start_time' group by batch,action ORDER BY batch DESC

上述SQL语句表示的是当action是start_time的情况下,统计各个批次的总骑车人数
undefined
通过上图分析可以得知,6月份投放市场的单车更受欢迎,可能因为1月份投放的单车可能质量方面有所下滑导致用户不愿意使用老旧的单车,从上图中可以大概单车淘汰率基本上单车存活周期是八个月左右,需要更换单车批次。

统计每小时用车数量

*| select date_format (__time__, '%H') as Hour, COUNT(orderid) as count,action WHERE action LIKE 'start_time' group by Hour,action ORDER By Hour ASC

undefined
从上图可分析出上午6点到10点这个时间段是用车需求高峰,8点是最高峰,因此需要在制定好此事件段内的调度优先策略规划,才能更好的服务用户

统计一周各个星期的用车数量

*| select date_format (__time__, '%W') as Week, COUNT(orderid) as count,action WHERE action LIKE 'start_time' group by Week,action

undefined
周六用车数量达到最大20102,其次是周四18592,周五18386次。因此可以重点关注这三天的单车调度问题。

上班或者上课因素

*| select __time__,location_x,location_y,action,orderid,cast(date_format(__time__, '%H') as bigint) as Hour WHERE action LIKE 'start_time' and cast(date_format(__time__, '%H') as bigint)<10 and cast(date_format(__time__, '%H') as bigint)>5 group by action,__time__,location_x,location_y,orderid,Hour

上述SQL语句表示统计早上5点到10点之间,用户使用单车出行的起始位置
undefined
通过以上图可知,早上骑车出行初始位置一般在学校,住宅小区等地方,说明早上可能有些学生上课或者工作者上班会选择骑车出行方式,并且该时间点单车需求量较大,可以优先考虑在将旁边其他地区的单车调度到住宅、学校等地方。以保证单车供给平衡

下班或者下课因素

*| select __time__,location_x,location_y,action,orderid,cast(date_format(__time__, '%H') as bigint) as Hour WHERE action LIKE 'start_time' and cast(date_format(__time__, '%H') as bigint)<23 and cast(date_format(__time__, '%H') as bigint)>17 group by action,__time__,location_x,location_y,orderid,Hour

undefined
从上图仔细分析可以看出,在18点-20点这个范围内,大部分都是从工作场所(大厦、研究所等)、学校等地方出发,此时间段是下班高峰期,可以优先将其他地区单车调度到这些地区。以缓解高峰期带来的单车数量少,而用户使用单车需求激增,带来的体验不友好情况。
而在21点-22点左右,用户使用单车大多数在公园、初高中学校附近使用单车。但是总体数量比在18点到20点之间使用单车少的多。因此可以大概猜测下21点-22点这个时间段人们喜欢去一些休闲的地方散散步。

结论

经过以上实战分析,可以使用日志服务+数据加工+SQL分析做很多有实际意义的事情,比如使用日志服务数据加工做数据异常数量,将处理好的数据在进行SQL和可视化分析并制定相应的商业策略,和发现定位当前策略的不足。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2天前
|
关系型数据库 MySQL 数据库
MySQL 复制A的表结构和数据到表B
在MySQL中复制表A至表B可通过不同方法实现。一种是先用`CREATE TABLE B LIKE A;`复制结构,再用`INSERT INTO B SELECT * FROM A;`填充数据。另一种更简便的方法是直接使用`CREATE TABLE B AS SELECT * FROM A;`一次性完成结构和数据的复制。还有一种高级方法是通过`SHOW CREATE TABLE A;`获取表A的创建语句,手动调整后创建表B,如有需要再用`INSERT INTO ... SELECT`复制数据。注意权限问题、跨数据库复制时需指定数据库名,以及大表复制时可能影响性能。
|
6天前
|
消息中间件 数据采集 关系型数据库
大数据-业务数据采集-FlinkCDC 读取 MySQL 数据存入 Kafka
大数据-业务数据采集-FlinkCDC 读取 MySQL 数据存入 Kafka
22 1
|
6天前
|
数据采集 关系型数据库 MySQL
大数据-业务数据采集-FlinkCDC The MySQL server is not configured to use a ROW binlog_format
大数据-业务数据采集-FlinkCDC The MySQL server is not configured to use a ROW binlog_format
15 1
|
9天前
|
固态存储 关系型数据库 MySQL
"惊!20亿数据秒速入MySQL,揭秘数据库极速插入的黑科技,你不可不知的绝密技巧!"
【8月更文挑战第11天】面对20亿级数据量,高效插入MySQL成为挑战。本文探讨优化策略:合理设计数据库减少不必要的字段和索引;使用批量插入减少网络往返;优化硬件如SSD和内存及调整MySQL配置;并行处理加速插入;附Python示例代码实现分批导入。这些方法将有效提升大规模数据处理能力。
24 2
|
11天前
|
SQL 关系型数据库 MySQL
MySQL 常见日志清理策略
MySQL 数据库服务器使用多种类型的日志来记录操作和事件,这对于故障诊断、审计和性能分析非常重要。然而,这些日志文件会随着时间的推移而不断增长,可能会占用大量的磁盘空间。因此,定期清理这些日志是必要的,本篇文章我们一起来学习下如何清理 MySQL 中的日志文件。
31 3
|
1天前
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
10 0
|
7天前
|
SQL 关系型数据库 MySQL
MySQL——如何查看MySQL登录日志
MySQL——如何查看MySQL登录日志
19 0
|
7天前
|
关系型数据库 MySQL
MySQL——删除重复数据
MySQL——删除重复数据
13 0
|
5天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
19 0
|
5天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。

相关产品

  • 日志服务