采集MySQL查询结果

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何通过日志服务控制台创建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字段进行排序,否则会造成数据重复或其他问题。

image

功能

  • 支持MySQL数据库的查询结果。

  • 支持分页设置。

  • 支持时区设置。

  • 支持超时设置。

  • 支持保存CheckPoint状态。

  • 支持SSL。

  • 支持限制每次最大采集数量。

应用场景

  • 根据数据中的自增ID或时间等标识采集增量数据。

  • 根据筛选条件自定义同步。

操作步骤

  1. 登录日志服务控制台

  2. 接入数据区域,选择MySQL查询结果-插件

  3. 选择目标Project和Logstore,单击下一步

  4. 机器组配置页面,配置机器组。

    1. 根据实际需求,选择使用场景和安装环境。

      重要

      无论是否已有机器组,都必须根据实际需求正确选择使用场景和安装环境,这将影响后续的页面配置。

    2. 确认目标机器组已在应用机器组区域,单击下一步

      已有机器组

      源机器组列表选择目标机器组。

      image

      没有可用机器组

      单击创建机器组,在创建机器组面板设置相关参数。机器组标识分为IP地址用户自定义标识,更多信息请参见创建用户自定义标识机器组(推荐)创建IP地址机器组

      重要

      创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击重试。如果还未解决,请参见Logtail机器组无心跳进行排查。

  5. 数据源设置页签中,设置配置名称插件配置,然后单击下一步

    您可以通过表单配置方式或JSON配置方式完成数据源设置。更多信息,请参见Logtail配置详情

  6. 创建索引预览数据,然后单击下一步。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引

    重要

    如果需要查询日志中的所有字段,建议使用全文索引。如果只需查询部分字段、建议使用字段索引,减少索引流量。如果需要对字段进行分析(SELECT语句),必须创建字段索引。

  7. 单击查询日志,系统将跳转至Logstore查询分析页面。
    您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。更多信息,请参见查询和分析日志

Logtail配置详情

您可以通过表单配置方式或JSON配置方式完成数据源设置。

表单配置方式

数据源设置步骤中,完成如下配置。

参数

说明

配置名称

Logtail配置名称。

MySQL地址

MySQL数据库地址。例如rm-****.mysql.rds.aliyuncs.com

数据库用户名

登录MySQL数据库的用户名称。

数据库密码

登录MySQL数据库的用户密码。

如果安全需求较高,建议将用户名称和密码配置为xxx,待采集配置同步至本地机器后,在本地文件/usr/local/ilogtail/user_log_config.json中找到对应配置进行修改。具体操作,请参见修改本地配置

重要

如果您在控制台上修改了此参数,同步至本地后会覆盖本地的配置。

数据库名称

MySQL数据库名称。

连接数据库时间

连接MySQL数据库的超时时间,单位:ms。

查询超时时间

读取MySQL查询结果的超时时间,单位:ms。

SELECT语句

SELECT语句。

选中是否使用CheckPoint时,SELECT语句中的where条件中必须包含CheckPoint列(CheckPoint列名称中设置的值)。支持使用半角问号(?)表示替换符,与CheckPoint列配合使用。

重要

例如设置CheckPoint列名称id,设置CheckPoint列的初始值为0,设置SELECT语句SELECT * FROM xxx WHERE ID > ?。则每次采集后,系统会保存最后一条数据的ID作为Checkpoint,下次采集时查询语句中的半角问号(?)将被替换为该Checkpoint对应的ID。

是否使用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地址。例如rm-****.mysql.rds.aliyuncs.com

默认值为127.0.0.1:3306

User

string

用于登录MySQL数据库的用户名称。默认值为root

Password

string

用于登录MySQL数据库的用户密码。默认值为空。

如果安全需求较高,建议将用户名称和密码配置为xxx,待采集配置同步至本地机器后,在本地文件/usr/local/ilogtail/user_log_config.json中找到对应配置进行修改。具体操作,请参见修改本地配置

重要

如果您在控制台上修改了此参数,同步至本地后会覆盖本地的配置。

DataBase

string

MySQL数据库名称。

DialTimeOutMs

int

连接MySQL数据库超时时间,默认值为5000,单位:ms。

ReadTimeOutMs

int

读取MySQL查询结果的超时时间,默认值为5000,单位:ms。

StateMent

string

SELECT语句。

设置CheckPointtrue时,Statement中SELECT语句的where条件中必须包含CheckPoint列(CheckPointColumn)。支持使用半角问号(?)表示替换符,与CheckPoint列配合使用。

例如设置CheckPointColumnid,设置CheckPointStart0,设置StateMentSELECT * from ... where id > ?。则每次采集后,系统会保存最后一条数据的ID作为Checkpoint,下次采集时查询语句中的半角问号(?)将被替换为该Checkpoint对应的ID。

Limit

boolean

是否使用Limit分页。

  • true:使用。

  • false(默认值):不使用。

建议使用Limit进行分页。设置Limittrue后,进行SQL查询时,系统将自动在SELECT语句中追加LIMIT语句。

PageSize

int

分页大小,Limittrue时必须配置。

MaxSyncSize

int

每次同步最大记录数。默认值为0,表示无限制。

CheckPoint

boolean

是否使用CheckPoint。

  • true:使用。

  • false(默认值):不使用。

CheckPoint可作为下次采集数据的起点,实现数据增量采集。

CheckPointColumn

string

CheckPoint列名称。

设置CheckPointtrue时,需要配置。

警告

该列的值必须递增,否则可能会出现数据漏采集问题(每次查询结果中的最大值将作为下次查询的输入)。

CheckPointColumnType

string

CheckPoint列的数据类型,支持int和time。int类型的内部存储为int64,time类型支持MySQL的date、datetime、time类型。

设置CheckPointtrue时,需要配置。

CheckPointStart

string

CheckPoint列的初始值。

设置CheckPointtrue时,需要配置。

CheckPointSavePerPage

boolean

是否每次分页时保存一次CheckPoint。

  • true(默认值):每次分页时保存一次CheckPoint。

  • false:每次同步完成后保存一次CheckPoint。

IntervalMs

int

同步间隔,默认值为60000,单位:ms。

修改本地配置

如果您没有在插件配置中输入真实的Address、User、Password等信息,可以在采集配置下发到本地后进行手动修改。

Linux系统

  1. 登录Logtail所在服务器。

  2. 打开/usr/local/ilogtail/user_log_config.json文件,找到service_mysql关键字,修改AddressUserPassword等字段。

  3. 执行以下命令重启Logtail。

    sudo /etc/init.d/ilogtaild stop; sudo /etc/init.d/ilogtaild start

Windows系统

  1. 登录Logtail所在服务器。

  2. 打开C:\Program Files\Alibaba\Logtail\user_log_config.json文件,找到service_mysql关键字,修改AddressUserPassword等字段。

    Windows 64位操作系统和Windows 32位操作系统文件位置不同,具体请参见文件路径

  3. 执行以下命令重启Logtail。

    1. 选择开始 > 控制面板 > 管理工具 > 服务

    2. 服务对话框中,选择对应的服务。

      • 如果是0.x.x.x版本,选择LogtailWorker服务。

      • 如果是1.0.0.0及以上版本,选择LogtailDaemon服务。

    3. 右键选择对应的操作,包括启动停止重新启动

问题排查

使用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"