本文介绍如何通过日志服务控制台创建Logtail采集配置来采集MySQL查询结果。

前提条件

已在服务器上安装Logtail,详情请参见安装Logtail(Linux系统)安装Logtail(Windows系统)
说明 目前支持Linux Logtail 0.16.0及以上版本,Window Logtail 1.0.0.8及以上版本。

原理

Logtail根据Logtail采集配置定期执行指定的SELECT语句,将返回结果作为数据上传到日志服务。

Logtail获取到执行结果时,会将结果中配置的CheckPoint字段保存在本地,当下次执行SELECT语句时,会将上一次保存的CheckPoint带入到SELECT语句中,以此实现增量数据采集。

实现原理

功能

  • 支持MySQL类型的数据库。
  • 支持分页设置。
  • 支持时区设置。
  • 支持超时设置。
  • 支持checkpoint状态保存。
  • 支持SSL。
  • 支持限制每次最大采集数量。

应用场景

  • 根据自增ID或时间等标志采集增量数据。
  • 根据筛选条件自定义同步。

操作步骤

  1. 登录日志服务控制台
  2. 接入数据区域,选择MySQL查询结果-插件
  3. 选择日志空间页签中,选择目标Project和Logstore,单击下一步
    您也可以单击立即创建,重新创建Project和Logstore,详情请参见步骤1:创建Project和Logstore
  4. 创建机器组页签中,创建机器组。
  5. 机器组配置页签中,应用机器组。
    选择一个机器组,将该机器组从源机器组移动到应用机器组
  6. 数据源设置页签中,配置配置名称插件配置
    • inputs为Logtail采集配置,必选项,请根据您的数据源配置。
      说明 一个inputs中只允许配置一个类型的数据源。
    • processors为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 数据库用户名。不配置时,默认为root
    Password string 数据库密码。不配置时,默认为空。
    如果安全需求较高,建议将SQL访问用户名和密码配置为xxx,待配置同步至本地机器后,在本地文件/usr/local/ilogtail/user_log_config.json找到对应配置进行修改,详情请参见修改本地配置
    说明 如果您在控制台上修改了此参数,同步至本地后会覆盖当前本地的配置。
    DialTimeOutMs int 数据库连接超时时间,单位:ms。不配置时,默认为5000ms。
    ReadTimeOutMs int 数据库读取超时时间,单位:ms。不配置时,默认为5000ms。
    StateMent string SQL语句。

    设置CheckPointtrue时,StateMent中SQL语句的where条件中必须包含CheckPointColumn,并将该列的值配置为?。例如:CheckPointColumn配置为id,则StateMent配置为SELECT * from ... where id > ?

    Limit bool 是否使用Limit分页。不配置时,默认为false,表示不使用Limit分页。

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

    PageSize int 分页大小,Limittrue时必须配置。
    MaxSyncSize int 每次同步最大记录数。不配置时,默认为0,表示无限制。
    CheckPoint bool 是否使用checkpoint。不配置时,默认为false,表示不使用checkpoint。
    CheckPointColumn string checkpoint列名称。

    CheckPointtrue时必须配置。

    CheckPointColumnType string checkpoint列类型,支持int和time两种类型。int类型的内部存储为int64,time类型支持MySQL的date、datetime、time。

    CheckPointtrue时必须配置。

    CheckPointStart string checkpoint初始值。

    CheckPointtrue时必须配置。

    CheckPointSavePerPage bool 设置为true,则每次分页时保存一次checkpoint;设置为false,则每次同步完后保存checkpoint。
    IntervalMs int 同步间隔,单位:ms。
  7. 查询分析配置页签中,设置索引。
    默认已设置索引,您也可以根据业务需求,重新设置索引,具体请参见开启并配置索引
    说明
    • 全文索引和字段索引属性必须至少启用一种。同时启用时,以字段索引属性为准。
    • 索引类型为long、double时,大小写敏感和分词符属性无效。

修改本地配置

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

  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

后续步骤

Logtail采集MySQL查询结果到日志服务后,您可以在日志服务控制台上查看日志。数据库表结构和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:  "2017-08-25 13:00:00"  
    "version":  "1.3.0"