操作场景
对日志进行统计分析时,有时需要将日志与外部数据关联起来才能进行完整的业务统计,例如以下使用场景:
日志中仅保存了用户 ID,统计分析时需根据用户 ID 在用户信息数据库中查询用户的等级、地域和类型等信息,例如按用户性别分别统计用户访问次数。
日志中仅保存了业务系统 ID,根据 ID 很难快速对应到具体的业务名称,需要根据 ID 与名称的映射关系将业务系统 ID 翻译为业务名称。
在仪表盘中除了查看日志数据,还需要查看其它存储在数据库中的数据。
前提条件
注意事项
关联 MySQL 时,请注意网络/数据安全及 MySQL 数据库性能:
网络安全:建议使用内网地址访问 MySQL,数据源类型为云数据库 MySQL 和云数据库 TDSQL-C MySQL 时,CLS 将自动采用内网方式访问。
数据安全:建议创建专门的数据库账号供 CLS 访问 MySQL,尽可能的缩小账号对应的资源及操作权限,CLS 仅需查询权限,无需编辑及删除权限,配置方式请参见 云数据库 MySQL 修改账号权限。请妥善保管账号信息,不要泄露。
性能:如果 MySQL 内数据量较大,建议不要直接将生产环境主数据库关联至 CLS,避免通过 CLS 对数据库发起过于复杂的 SQL 查询,影响生产环境稳定性,建议使用 只读实例。
关联对象存储 CSV 文件时,建议使用与日志主题相同地域的存储桶,跨地域访问存储桶内的文件将会在 COS 侧产生外网下行流量及相应费用。对象存储访问权限建议使用“私有读写”,避免数据被第三方访问。
操作步骤
1. 登录 日志服务控制台。
2. 在左侧导航栏中,单击日志主题,进入日志主题列表页面。
3. 单击需要关联外部数据的日志主题 ID/名称,进入日志主题管理页面。
4. 选择关联外部数据页签,单击添加外部数据,在弹出对话框中配置相关参数。
使用云数据库 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
。* | 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 侧无费用。