日志服务 关联外部数据

对日志进行统计分析时,有时需要将日志与外部数据关联起来才能进行完整的业务统计,例如以下使用场景。

相关产品
日志服务 产品页,含版本规格、价格与购买入口。

一、操作场景

·日志中仅保存了用户 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 侧产生外网下行流量及相应费用。对象存储访问权限建议使用“私有读写”,避免数据被第三方访问。

四、操作步骤

1. 登录 日志服务控制台。

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。

同时查询日志数据及外部数据需使用 JOIN、UNION 等语法,例如:

* | 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 侧无费用。

赞 (0)
上一篇 4天前
下一篇 4天前