-
Notifications
You must be signed in to change notification settings - Fork 255
MySQL Reader
redHJ edited this page Jul 10, 2018
·
19 revisions
MySQL Reader是为了让logkit支持多种数据源支持而增加的一种输入模式,区别于普通的文件输入,MySQL Reader是从MySQL中读取数据。
MySQL Reader是以定时任务的形式去执行mysql语句,将mysql读取到的内容全部获取则任务结束,等到下一个定时任务的到来。
"reader":{
"log_path":"<username>:<password>@tcp(<hostname>:<port>)", // 等价于mysql_datasource
"meta_path":"./meta",
"mode":"mysql",
"mysql_datasource":"<username>:<password>@tcp(<hostname>:<port>)", // 该字段与"log_path"等价,两个都存在的情况下优先取mysql_datasource的值。
"mysql_database":"<database>",
"mysql_sql":"select * from xx;select x,y from xx@(YY)",
"mysql_offset_key":"id",
"mysql_limit_batch":"100",
"mysql_cron":"00 00 04 * * *",
"mysql_exec_onstart":"true",
"history_all": "false",
"mysql_table": "",
},
-
mode
: 使用mysql reader,必须模式为mysql -
mysql_datasource
: 该字段与"log_path"等价,两个都存在的情况下优先取datasource的值。需要按规则填写mysql数据源所需信息。-
username
: 用户名 -
password
: 用户密码 -
hostname
: mysql地址 -
port
: mysql端口 -
示例
:一个填写完整的mysql_datasource字段类似于:"admin:123456@tcp(10.101.111.1:3306)"
-
-
mysql_cron
: 定时任务触发周期,支持三种写法。- 直接写"loop",任务会不停的循环,执行完一次再接着执行下一次,后面可以跟循环的间歇时间,如"loop 10s",表示每次循环间隔10s,支持的单位还有"m(分钟)","h(小时)"
- crontab的写法,类似于
* * * * * *
,对应的是秒(0~59
),分(0~59
),时(0~23
),日(1~31
),月(1-12
),星期(0~6
),填*号表示所有遍历都执行。
- 描述式写法,类似于"@midnight", "@every 1h30m",必须
@
符合开头,目前支持@hourly
,@weekly
,@monthly
,@yearly
,@every <time duration>
,@midnight
-
mysql_database
: 数据库名称,数据库名称也支持魔法变量,可以用@(var)的形式写年月日的魔法变量,具体的变量与数字的对应关系参照魔法变量
的描述。当history_all
为true时,表示导入历史数据,此时,数据库名称使用魔法变量只支持@(YYYY) @(YY) @(MM) @(DD) @(hh) @(mm) @(ss)的写法(不支持@(M) @(D) @(h) @(m) @(s)单个数字表示),同时支持在最后使用通配符*,表示匹配所有后缀例如 mydb@(YYYY)@(MM)@(DD)test*,会匹配出所有以mydb为前缀,日期早于当前时间,同时日期后紧跟着test的数据库,如果当前时间为20180601,则此时mydb20180530test、mydb20180530test001、mydb20180531test002都符合要求。 -
mysql_sql
: 默认为空,自动读取数据库中所有的表;也可以填写要执行的sql语句,可以用@(var)使用魔法变量,用;
分号隔开,多个语句按顺序执行。多条sql输出的内容必须schema相同,否则请使用多个配置文件解决不同sql schema问题。 -
mysql_offset_key
: 指定一个 mysql 的列名,作为 offset 的记录,类型必须是整型,建议使用插入(或修改)数据的时间戳(unixnano)作为该字段。每次查询会指定这个 key 做where条件限制,避免单次查询性能消耗过大。 -
mysql_limit_batch
:mysql_sql
的语句,若数据量大,可以填写该字段,分批次查询。- 若
mysql_offset_key
存在,假设填写为100,则查询范式为select * from table where mysql_offset_key >= 0 and mysql_offset_key < 0 + 100
; - 若没填写
mysql_offset_key
,则类似于select * from table limit 0,100
。
- 若
-
mysql_exec_onstart
:true
表示启动时执行一次,以后再按cron处理;false
则表示到cron预设的时间才执行,默认为true。 -
sql_schema
: 默认情况下会自动识别数据字段的类型,当不能识别时,可以sql_schema
指定mysql
数据字段的类型,目前支持string
、long
、float
三种类型,单个字段左边为字段名称,右边为类型,空格分隔abc float
;不同的字段用逗号分隔。支持简写为float
=>f
,long
=>l
,string
=>s
. 如:"sql_schema":"abc string,bcd float,xyz long"
。 -
魔法变量
: 目前支持年
,月
,日
,时
,分
,秒
的魔法变量,以当前时间2017年6月5日6时35分24秒
为例。- @(YYYY) 年份,就是
2017
- @(YY) 年份后两位,就是
17
。 - @(MM): 月份,补齐两位,就是
06
- @(M): 月份,不补齐,就是
6
- @(D): 日,不补齐,就是
5
- @(DD): 日,补齐两位,如
05
- @(hh): 小时,补齐两位, 如
06
- @(h): 小时,如
6
- @(mm): 分钟,补齐两位,
35
- @(m): 分钟,
35
- @(ss): 秒,补齐两位,
24
- @(s): 秒,
24
- @(YYYY) 年份,就是
-
magic_lag_duration
: 针对魔法变量进行时间延迟,单位支持h(时)、m(分)、s(秒),如写24h
,则渲染出来的时间魔法变量往前1天,2017年6月5日6时35分24秒
的 @(D) 渲染出来的就是4. -
history_all
可选项,默认为false,表示不导入历史数据,设置为true时,表示导入符合条件的历史数据,配合mysql_database
、mysql_table
使用。 -
mysql_table
可选项,默认为空,表示读取数据库中的所有表,表名也支持魔法变量,可以用@(var)的形式写年月日的魔法变量,具体的变量与数字的对应关系参照魔法变量
的描述。当history_all
为true时,表示导入历史数据,此时,表名使用魔法变量只支持@(YYYY) @(YY) @(MM) @(DD) @(hh) @(mm) @(ss)的写法(不支持@(M) @(D) @(h) @(m) @(s)单个数字表示),同时支持在最后使用通配符*,表示匹配所有后缀例如 mytable@(YYYY)@(MM)@(DD)test*,会匹配出所有以mydb为前缀,日期早于当前时间,同时日期后紧跟着test的表名,如果当前时间为20180601,则此时mytable20180530test、mytable20180530test001、mytable20180531test002都符合要求。配合magic_lag_duration使用
快速开始 | Pandora | Readers | Parsers | Senders | Download | 七牛智能日志管理平台 | logkit-pro专业版