本文介绍如何通过日志服务控制台创建 Logtail 采集配置来采集 MySQL 查询结果。
前提条件
-
已在服务器上安装 Linux Logtail 0.16.0 及以上版本或 Windows Logtail 1.0.0.8 及以上版本。具体操作,请参见 安装 Logtail(Linux 系统) 或 安装 Logtail(Windows 系统) 。
重要请确保用于安装 Logtail 的服务器可连接目标 MySQL 数据库。
-
在 MySQL 数据库中,设置白名单为 Logtail 所在服务器的 IP 地址。
例如 RDS MySQL 数据库的白名单设置,请参见 设置 IP 白名单 。
原理
Logtail 根据 Logtail 采集配置定期执行指定的 SELECT 语句,将查询结果作为数据上传到日志服务。
Logtail 获取到查询结果时,会将结果中的 CheckPoint 字段保存到本地。当下次执行 SELECT 语句时,会将上一次保存的 CheckPoint 带入到 SELECT 语句中,以此实现增量数据采集。
开启 CheckPoint 时,需要在 SELECT 语句中对 CheckPoint 字段进行排序,否则会造成数据重复或其他问题。
功能
-
支持 MySQL 数据库的查询结果。
-
支持分页设置。
-
支持时区设置。
-
支持超时设置。
-
支持保存 CheckPoint 状态。
-
支持 SSL。
-
支持限制每次最大采集数量。
应用场景
-
根据数据中的自增 ID 或时间等标识采集增量数据。
-
根据筛选条件自定义同步。
操作步骤
-
登录 日志服务控制台 。
-
在 接入数据 区域,选择 MySQL 查询结果-插件 。
-
选择目标 Project 和 Logstore,单击 下一步 。
-
在 机器组配置 页面,配置机器组。
-
根据实际需求,选择使用场景和安装环境。
重要无论是否已有机器组,都必须根据实际需求正确选择使用场景和安装环境,这将影响后续的页面配置。
-
确认目标机器组已在 应用机器组 区域,单击 下一步 。
已有机器组
从 源机器组 列表选择目标机器组。
没有可用机器组
单击 创建机器组 ,在 创建机器组 面板设置相关参数。机器组标识分为 IP 地址 和 用户自定义标识 ,更多信息请参见 创建用户自定义标识机器组(推荐) 或 创建 IP 地址机器组 。
重要创建机器组后立刻应用,可能因为连接未生效,导致心跳为 FAIL ,您可单击 重试 。如果还未解决,请参见 Logtail 机器组无心跳 进行排查。
-
-
在 数据源设置 页签中,设置 配置名称 和 插件配置 ,然后单击 下一步 。
您可以通过表单配置方式或 JSON 配置方式完成数据源设置。更多信息,请参见 Logtail 配置详情 。
-
创建索引 和 预览数据 ,然后单击 下一步 。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击 自动生成索引 ,日志服务将自动生成字段索引。更多信息,请参见 创建索引 。
重要如果需要查询日志中的所有字段,建议使用全文索引。如果只需查询部分字段、建议使用字段索引,减少索引流量。如果需要对字段进行分析(SELECT 语句),必须创建字段索引。
-
单击
查询日志
,系统将跳转至
Logstore
查询分析页面。
您需要等待 1 分钟左右,待索引生效后,才能在 原始日志 页签中,查看已采集到的日志。更多信息,请参见 查询和分析日志 。
Logtail 配置详情
您可以通过表单配置方式或 JSON 配置方式完成数据源设置。
表单配置方式
在 数据源设置 步骤中,完成如下配置。
参数 |
说明 |
配置名称 |
Logtail 配置名称。 |
MySQL 地址 |
MySQL
数据库地址。例如
|
数据库用户名 |
登录 MySQL 数据库的用户名称。 |
数据库密码 |
登录 MySQL 数据库的用户密码。
如果安全需求较高,建议将用户名称和密码配置为
重要
如果您在控制台上修改了此参数,同步至本地后会覆盖本地的配置。 |
数据库名称 |
MySQL 数据库名称。 |
连接数据库时间 |
连接 MySQL 数据库的超时时间,单位:ms。 |
查询超时时间 |
读取 MySQL 查询结果的超时时间,单位:ms。 |
SELECT 语句 |
SELECT 语句。 选中 是否使用 CheckPoint 时, SELECT 语句 中的 where 条件中必须包含 CheckPoint 列( CheckPoint 列名称 中设置的值)。支持使用半角问号(?)表示替换符,与 CheckPoint 列配合使用。
重要
例如设置
CheckPoint
列名称
为
|
是否使用 limit 分页 |
选中该选项后,将使用 Limit 分页。 建议使用 Limit 进行分页。选中 是否使用 limit 分页 后,进行 SQL 查询时,系统将自动在 SELECT 语句中追加 LIMIT 语句。 |
分页大小 |
分页大小。 选中 是否使用 limit 分页 后,需要配置。 |
同步最大记录数 |
每次同步最大记录数。默认值为 0 ,表示无限制。 |
是否使用 CheckPoint |
选中该选项后,将使用 CheckPoint。CheckPoint 可作为下次采集数据的起点,实现数据增量采集。 |
CheckPoint 列名称 |
CheckPoint 列名称。 选中 是否使用 CheckPoint 后,需要配置。
警告
该列的值必须递增,否则可能会出现数据漏采集问题(每次查询结果中的最大值将作为下次查询的输入)。 |
CheckPoint 列的数据类型 |
CheckPoint 列的数据类型,支持 int 和 time。int 类型的内部存储为 int64,time 类型支持 MySQL 的 date、datetime、time 类型。 选中 是否使用 CheckPoint 后,需要配置。 |
CheckPoint 列的初始值 |
CheckPoint 列的初始值。 选中 是否使用 CheckPoint 后,需要配置。 |
每次分页时是否保存一次 |
选中该选项,则每次分页时保存一次 CheckPoint。否则,每次同步完成后保存一次 CheckPoint。 |
同步时间 |
同步间隔,单位:ms。 |
JSON 配置方式
在 插件配置 中填写您的 Logtail 配置信息,示例如下所示。
-
inputs 为数据源配置,必选项。
重要一个 inputs 中只允许配置一个类型的数据源。
-
processors 为处理配置,用于解析数据。可选项,您可以配置一种或多种处理方式。
如果当前的 inputs 配置无法满足日志解析需求,您可以在 插件配置 中添加 processors 配置,即添加 Logtail 插件处理数据。例如提取字段、提取日志时间、脱敏数据、过滤日志等。更多信息,请参见 使用 Logtail 插件处理数据 。
{
"inputs": [
"type": "service_mysql",
"detail": {
"Address": "************.mysql.rds.aliyuncs.com",
"User": "****",
"Password": "*******",
"DataBase": "****",
"Limit": true,
"PageSize": 100,
"StateMent": "select * from db.VersionOs where time > ?",
"CheckPoint": true,
"CheckPointColumn": "time",
"CheckPointStart": "2018-01-01 00:00:00",
"CheckPointSavePerPage": true,
"CheckPointColumnType": "time",
"IntervalMs": 60000
}
参数 |
类型 |
是否必选 |
说明 |
type |
string |
是 |
数据源类型,固定为 service_mysql 。 |
Address |
string |
否 |
MySQL
地址。例如
默认值为 127.0.0.1:3306 。 |
User |
string |
否 |
用于登录 MySQL 数据库的用户名称。默认值为 root |
Password |
string |
否 |
用于登录 MySQL 数据库的用户密码。默认值为空。
如果安全需求较高,建议将用户名称和密码配置为
重要
如果您在控制台上修改了此参数,同步至本地后会覆盖本地的配置。 |
DataBase |
string |
否 |
MySQL 数据库名称。 |
DialTimeOutMs |
int |
否 |
连接 MySQL 数据库超时时间,默认值为 5000,单位:ms。 |
ReadTimeOutMs |
int |
否 |
读取 MySQL 查询结果的超时时间,默认值为 5000,单位:ms。 |
StateMent |
string |
否 |
SELECT 语句。 设置 CheckPoint 为 true 时, Statement 中 SELECT 语句的 where 条件中必须包含 CheckPoint 列( CheckPointColumn )。支持使用半角问号(?)表示替换符,与 CheckPoint 列配合使用。
例如设置
CheckPointColumn
为
id
,设置
CheckPointStart
为
0
,设置
StateMent
为
|
Limit |
boolean |
否 |
是否使用 Limit 分页。
建议使用 Limit 进行分页。设置 Limit 为 true 后,进行 SQL 查询时,系统将自动在 SELECT 语句中追加 LIMIT 语句。 |
PageSize |
int |
否 |
分页大小, Limit 为 true 时必须配置。 |
MaxSyncSize |
int |
否 |
每次同步最大记录数。默认值为 0 ,表示无限制。 |
CheckPoint |
boolean |
否 |
是否使用 CheckPoint。
CheckPoint 可作为下次采集数据的起点,实现数据增量采集。 |
CheckPointColumn |
string |
否 |
CheckPoint 列名称。 设置 CheckPoint 为 true 时,需要配置。
警告
该列的值必须递增,否则可能会出现数据漏采集问题(每次查询结果中的最大值将作为下次查询的输入)。 |
CheckPointColumnType |
string |
否 |
CheckPoint 列的数据类型,支持 int 和 time。int 类型的内部存储为 int64,time 类型支持 MySQL 的 date、datetime、time 类型。 设置 CheckPoint 为 true 时,需要配置。 |
CheckPointStart |
string |
否 |
CheckPoint 列的初始值。 设置 CheckPoint 为 true 时,需要配置。 |
CheckPointSavePerPage |
boolean |
否 |
是否每次分页时保存一次 CheckPoint。
|
IntervalMs |
int |
是 |
同步间隔,默认值为 60000,单位:ms。 |
修改本地配置
如果您没有在 插件配置 中输入真实的 Address、User、Password 等信息,可以在采集配置下发到本地后进行手动修改。
Linux 系统
-
登录 Logtail 所在服务器。
-
打开 /usr/local/ilogtail/user_log_config.json 文件,找到 service_mysql 关键字,修改 Address 、 User 、 Password 等字段。
-
执行以下命令重启 Logtail。
sudo /etc/init.d/ilogtaild stop; sudo /etc/init.d/ilogtaild start
Windows 系统
-
登录 Logtail 所在服务器。
-
打开 C:\Program Files\Alibaba\Logtail\user_log_config.json 文件,找到 service_mysql 关键字,修改 Address 、 User 、 Password 等字段。
Windows 64 位操作系统和 Windows 32 位操作系统文件位置不同,具体请参见 文件路径 。
-
执行以下命令重启 Logtail。
-
选择
。 -
在 服务 对话框中,选择对应的服务。
-
如果是 0.x.x.x 版本,选择 LogtailWorker 服务。
-
如果是 1.0.0.0 及以上版本,选择 LogtailDaemon 服务。
-
-
右键选择对应的操作,包括 启动 、 停止 或 重新启动 。
-
问题排查
使用 Logtail 采集日志后,如果预览页面或查询页面无数据,您可以参见 Logtail 采集日志失败的排查思路 进行排查。
数据库表和日志样例
数据库表样例和 Logtail 采集到的日志样例如下所示。
-
数据库表样例
CREATE TABLE `VersionOs` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `time` datetime NOT NULL, `version` varchar(10) NOT NULL DEFAULT '', `os` varchar(10) NOT NULL, `count` int(11) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `timeindex` (`time`) )
-
日志样例
"count": "4" "id: "721097" "os: "Windows" "time: "2022-08-25 13:00:00" "version": "1.3.0"