Skip to content

Microsoft SQL Server Reader

Sun Jianbo edited this page Apr 21, 2018 · 12 revisions

Microsoft SQL Server Reader 是为了让logkit支持多种数据源支持而增加的一种输入模式,区别于普通的文件输入,Microsoft SQL Server Reader是从 Microsoft SQL Server 中读取数据。

Microsoft SQL Server Reader是以定时任务的形式去执行sql语句,将sql读取到的内容全部获取则任务结束,等到下一个定时任务的到来。

典型配置如下

    "reader":{
        "log_path":"server=<hostname or instance>;user id=<username>;password=<password>;port=<port>", // 等价于mssql_datasource
        "meta_path":"./meta",
        "mode":"mssql",
        "mssql_datasource":"server=<hostname or instance>;user id=<username>;password=<password>;port=<port>", // 该字段与"log_path"等价,两个都存在的情况下优先取mysql_datasource的值。
        "mssql_database":"<database>",
        "mssql_sql":"select * from xx;select x,y from xx@(YY)",
        "mssql_offset_key":"id",
        "mssql_limit_batch":"100",
        "mssql_cron":"00 00 04 * * *",
        "mssql_exec_onstart":"true"
    },
  • mssql reader输出的内容为json字符串,须使用json parser解析

  • mode : 使用mssql reader,必须模式为mssql

  • mssql_datasource: 该字段与"log_path"等价,两个都存在的情况下优先取datasource的值。需要按规则填写mssql数据源所需信息。

    • username: 用户名
    • password: 用户密码
    • hostname: mssql地址,实例
    • port: mssql端口,默认1433
    • 示例:一个填写完整的mssql_datasource字段类似于:"server=localhost\SQLExpress;user id=sa;password=PassWord;port=1433"
  • mssql_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>
  • mssql_database: 数据库名称。

  • mssql_sql: 填写要执行的sql语句,可以用@(var)使用魔法变量,用;分号隔开,多个语句按顺序执行,多条sql输出的内容格式schema必须相同,否则请使用多个配置文件构建多个runner解决。

  • mssql_offset_key: 指定一个mssql的列名,作为offset的记录,类型必须是整型,建议使用插入(或修改)数据的时间戳(unixnano)作为该字段。每次查询会指定这个 key 做 where 条件限制,避免单次查询性能消耗过大。

  • mssql_limit_batch: mssql_sql的语句,若数据量大,可以填写该字段,分批次查询。

    • mssql_offset_key存在,假设填写为100,则查询范式为select * from table where mssql_offset_key >= 0 and mssql_offset_key < 0 + 100;
    • 若没填写mssql_offset_key,则直接执行整个SQL select * from table,没有分页。
  • mssql_exec_onstart: true表示启动时执行一次,以后再按cron处理;false则表示到 cron 预设的时间才执行,默认为 true。

  • sql_schema: 默认情况下会自动识别数据字段的类型,当不能识别时,可以sql_schema指定 mssql 数据字段的类型,目前支持stringlongfloat三种类型,单个字段左边为字段名称,右边为类型,空格分隔 abc float;不同的字段用逗号分隔。支持简写为float=>flong=>lstring=>s. 如:"sql_schema":"abc string,bcd float,xyz long"

  • 魔法变量: 目前支持,,,,,的魔法变量。

    • @(YYYY) 年份
    • @(YY) 年份后两位,如06。
    • @(MM): 月份,补齐两位,如02
    • @(M): 月份,不补齐
    • @(D): 日,不补齐
    • @(DD): 日,补齐两位,如05
    • @(hh): 小时,补齐两位
    • @(h): 小时
    • @(mm): 分钟,补齐两位
    • @(m): 分钟
    • @(ss): 秒,补齐两位
    • @(s): 秒
  • magic_lag_duration: 针对魔法变量进行时间延迟,单位支持h(时)、m(分)、s(秒),如写24h,则渲染出来的时间魔法变量往前1天,2017年6月5日6时35分24秒 的 @(D) 渲染出来的就是4.

  • tag_file可选项,可以读取一个json格式的文件,并把json的数据作为标签附着在所有数据之上。典型的应用场景为一些机器或者容器相关的元数据存以json格式放在文件中,logkit发送的数据都带上这些元数据,以便查询时可以快速定位机器元数据,并根据元数据做报警等后续事宜。

已知问题

对于 SQL Server 2008 和 2008 R2 引擎使用登录报错的情况,需要安装一下补丁。

  • SQL Server 2008 R2 用户安装 SQL Server 2008 R2 Service Pack 2 下载链接
  • SQL Server 2008 用户,则需要安装 Microsoft SQL Server 2008 Service Pack 3 并更新。

详见官方链接

SQL Server 2008 and 2008 R2 engine cannot handle login records when SSL encryption is not disabled. To fix SQL Server 2008 R2 issue, install SQL Server 2008 R2 Service Pack 2. To fix SQL Server 2008 issue, install Microsoft SQL Server 2008 Service Pack 3 and Cumulative update package 3 for SQL Server 2008 SP3. More information: http://support.microsoft.com/kb/2653857

Clone this wiki locally