关联外部数据

最近更新时间:2025-01-08 14:47:12

我的收藏

操作场景

对日志进行统计分析时,有时需要将日志与外部数据关联起来才能进行完整的业务统计,例如以下使用场景:
日志中仅保存了用户 ID,统计分析时需根据用户 ID 在用户信息数据库中查询用户的等级、地域和类型等信息,例如按用户性别分别统计用户访问次数。
日志中仅保存了业务系统 ID,根据 ID 很难快速对应到具体的业务名称,需要根据 ID 与名称的映射关系将业务系统 ID 翻译为业务名称。
在仪表盘中除了查看日志数据,还需要查看其它存储在数据库中的数据。
日志服务支持将 MySQL 及对象存储中的 CSV 文件作为数据库表关联至日志主题,然后使用 SQL 语句将两部分数据进行关联分析。

前提条件

已开通日志服务并 创建日志主题,日志主题需为标准存储,低频存储不支持使用 SQL 进行统计分析。

注意事项

关联 MySQL 时,请注意网络/数据安全及 MySQL 数据库性能:
网络安全:建议使用内网地址访问 MySQL,数据源类型为云数据库 MySQL 云数据库 TDSQL-C MySQL 时,CLS 将自动采用内网方式访问。
数据安全:建议创建专门的数据库账号供 CLS 访问 MySQL,尽可能的缩小账号对应的资源及操作权限,CLS 仅需查询权限,无需编辑及删除权限,配置方式请参见 云数据库 MySQL 修改账号权限。请妥善保管账号信息,不要泄露。
性能:如果 MySQL 内数据量较大,建议不要直接将生产环境主数据库关联至 CLS,避免通过 CLS 对数据库发起过于复杂的 SQL 查询,影响生产环境稳定性,建议使用 只读实例
关联对象存储 CSV 文件时,建议使用与日志主题相同地域的存储桶,跨地域访问存储桶内的文件将会在 COS 侧产生外网下行流量及相应费用。对象存储访问权限建议使用“私有读写”,避免数据被第三方访问。

操作步骤

2. 在左侧导航栏中,单击日志主题,进入日志主题列表页面。
3. 单击需要关联外部数据的日志主题 ID/名称,进入日志主题管理页面。
4. 选择关联外部数据页签,单击添加外部数据,在弹出对话框中配置相关参数。
云数据库 MySQL / TDSQL-C MySQL
对象存储 COS(CSV 格式文件)
自建 MySQL
使用云数据库 MySQL / TDSQL-C MySQL 时,采用该配置方式:
参数名称
描述
名称
作为 CLS SQL 中的表名,支持小写字母、数字和_,且不能以_开头和结尾,长度为3 - 60字符,在所属地域内名称不能重复。
备注
可选,不超过255个字符
数据源类型
云数据库 MySQL 或 云数据库 TDSQL-C MySQL
地域
选择云数据库所在的地域
MySQL 实例
选择云数据库实例
账户名
访问 MySQL 使用的账户名
密码
访问 MySQL 使用的密码
数据库名
需要关联的 MySQL 数据库名称
表名
需要关联的 MySQL 数据库中的表名称
使用范围
仅当前日志主题可访问:仅当前日志主题可通过 SQL 访问该 MySQL 的数据
当前日志集内日志主题可访问:当前日志主题所属日志集内的日志主题都可以通过 SQL 访问该 MySQL 的数据
配置完成后,单击验证访问配置,验证上述配置是否正确。验证通过后单击确定完成添加。
添加对象存储 COS(CSV 格式文件)时配置如下参数:
参数名称
描述
名称
作为 CLS SQL中的表名,支持小写字母、数字和_,且不能以_开头和结尾,长度为3至60字符,在所属地域内名称不能重复。
备注
可选,不超过255个字符
数据源类型
对象存储 COS(CSV 格式文件)
存储桶地域
选择 COS 文件所属地域
COS 存储桶
选择 COS 文件所属存储桶
文件名称
填写 COS 文件名称
压缩模式
暂时仅支持不压缩
可单击预览数据,验证上述配置是否正确,同时从 CSV 文件中获取前5行数据(含表头)作为样例,进一步配置如下参数:
参数名称
描述
字段类型
支持 text、long 及 double,请根据实际数据类型选择
访问范围
仅当前日志主题可访问:仅当前日志主题可通过 SQL 访问该 MySQL 的数据
当前日志集内日志主题可访问:当前日志主题所属日志集内的日志主题都可以通过 SQL 访问该 MySQL 的数据
单击确定完成添加。
MySQL 直接部署在 CVM 中或其它平台上时,采用该配置方式:
参数名称
描述
名称
作为 CLS SQL 中的表名,支持小写字母、数字和_,且不能以_开头和结尾,长度为3 - 60字符,在所属地域内名称不能重复。
备注
可选,不超过255个字符
数据源类型
自建 MySQL
访问方式
内网地址或公网地址
地域
使用内网地址时需填写,选择 MySQL 所在的地域
所属网络
使用内网地址时需填写,选择 MySQL 所在的 VPC
网络服务类型
使用内网地址时需填写:
若您的 MySQL 需通过 CLB 访问,请选择 CLB
若您的 MySQL 所在服务器可直接访问,请选择 CVM
访问地址
例如 gz-cdb-xxxxx.sql.tencentcdb.com
MySQL 端口
数据库端口,例如3306
账户名
访问 MySQL 使用的账户名
密码
访问 MySQL 使用的密码
数据库名
需要关联的 MySQL 数据库名称
表名
需要关联的 MySQL 数据库中的表名称
使用范围
仅当前日志主题可访问:仅当前日志主题可通过 SQL 访问该 MySQL 的数据
当前日志集内日志主题可访问:当前日志主题所属日志集内的日志主题都可以通过 SQL 访问该 MySQL 的数据
单击验证访问配置,验证上述配置是否正确。验证通过后单击确定完成添加。

使用 SQL 关联查询外部数据及日志数据

从 SQL 角度来看,日志主题内的日志数据及外部数据均为数据库表,日志数据对应的表名为 log ,外部数据对应的表名为添加外部数据时设置的名称。因此可分别使用如下 SQL 单独查询日志数据及外部数据:
日志数据:* | select * from log,其中from log可以省略,即* | select *,同时查询日志数据及外部数据时,建议您不要省略,以提高 SQL 可读性。
外部数据:假设外部数据名称为userinfo,则对应 SQL 为* | select * from userinfo
同时查询日志数据及外部数据需使用 JOINUNION 等语法,例如:
* | select * from log left join userinfo on log.user_id=userinfo.id
注意:
查询外部数据时,| 前的检索条件及本次查询指定的时间范围对外部数据不生效,仅对当前日志主题的日志数据生效。

使用案例

某日志主题为请求日志,包含如下字段:
"status_code": "404"
"local_time": "2023-06-05 19:59:01"
"refer": "_",
"user_id": "15"
"ip": "66.131.53.125"
"url": "\\"GET /class/111.html HTTP/1.1\\""
统计分析该日志时,期望能够按照访问用户性别分别统计访问次数,但访问日志中并没有用户性别字段,无法直接统计,需要在用户信息数据库(MySQL)中根据用户 ID(user_id)查询。
用户信息数据库表如下:
id
Name
Gender
Age
Email
Phone
Address
1
John Doe
Male
32
johndoe@example.com
1234567890
123 Main St
2
Jane Smith
Female
28
janesmith@example.com
9876543210
456 Elm St
3
Michael Johnson
Male
45
michaeljohnson@example.com
5551234567
789 Oak St
4
Sarah Davis
Female
38
sarahdavis@example.com
7894561230
321 Pine St
5
David Wilson
Male
51
davidwilson@example.com
1237894560
654 Maple St
6
Emily Anderson
Female
29
emilyanderson@example.com
4567890123
987 Cherry St
7
Matthew Thompson
Male
37
matthewthompson@example.com
7890123456
321 Plum St
8
Olivia Martinez
Female
26
oliviamartinez@example.com
2345678901
654 Orange St
9
Alexander Taylor
Male
42
alexandertaylor@example.com
9012345678
987 Grape St
10
Emma Clark
Female
31
emmaclark@example.com
3456789012
123 Lemon St
将该数据库表关联至日志主题后,即可使用如下语句将日志中的user_id转换为用户性别Gender
* | select ip,url,user_id,Name,Gender from log left join userinfo on log.user_id=userinfo.id
查询结果如下图,其中 ip、url、user_id 来源于日志,Name、Gender 则来源于用户信息库表。

在此基础上,进一步编写 SQL,即可按照访问用户性别分别统计访问次数:
* | select count(*) as pv,Gender from (select ip,url,user_id,Name,Gender from log left join userinfo on log.user_id=userinfo.id) group by Gender
查询结果如下图,其中 Gender 列中的 null 表示部分日志没有查询到用户性别,可能是日志中无 user_id,也可能为 user_id 在用户信息库中无记录。


规格限制

关联外部数据库的规格与限制,请参见 规格与限制

费用说明

关联对象存储 CSV 文件时,如果对象存储桶与日志主题不在同一个地域,每次查询该数据都会在 COS 侧产生外网下行流量及相应费用,CLS 侧无费用。
关联 MySQL 时,如果使用外网连接,每次查询该数据都会在对应的资源侧(例如云数据库 MySQL 或 CVM)产生外网访问流量,可能产生相应费用(取决于您购买的实例配置),CLS 侧无费用。