Skip to content

PostgreSQL Reader

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

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

PostgreSQL Reader是以定时任务的形式去执行 PostgreSQL 查询语句,将 PostgreSQL 读取到的内容全部获取则任务结束,等到下一个定时任务的到来,也可以仅执行一次。

典型配置如下

    "reader":{
        "log_path":"host=localhost port=5432 connect_timeout=10 user=pqgotest password=123456 sslmode=disable", // 等价于postgres_datasource
        "mode":"postgres",
        "postgres_datasource":"host=localhost port=5432 connect_timeout=10 user=pqgotest password=123456 sslmode=disable", // 该字段与 "log_path" 等价,两个都存在的情况下优先取 postgres_datasource 的值。
        "postgres_database":"<database>",
        "postgres_sql":"select * from xx;",
        "postgres_offset_key":"id",
        "postgres_limit_batch":"100",
        "postgres_cron":"00 00 04 * * *",
        "postgres_exec_onstart":"true"
    },
  • PostgreSQL reader输出的内容为json字符串,须使用json parser解析
  • mode : 使用 PostgreSQL reader,必须模式选为 postgres
  • postgres_datasource: 该字段与"log_path"等价,两个都存在的情况下优先取 datasource 的值,用于填写PostgreSQL数据源所需信息,填写的形式如 host=localhost port=5432, 属性和实际的值用=(等于)符号连接,中间不要有空格,不同的属性用 (空格)隔开,具体支持的属性如下所示:
    • dbname : 数据库名称,若此处填了,下面 postgres_database 可以不填。
    • user : 用户名称
    • password : 用户密码
    • host : PostgreSQL 服务地址
    • port : 要绑定的端口 (默认是 5432)
    • sslmode : 使用SSL的模式,默认是开启的,若关闭需要指定 sslmode=disable,其他模式还包括require(SSL、跳过认证),verify-ca(SSL,证书认证)、verify-full( SSL,证书认证、且认证服务器的hostname包含在证书中)
    • connect_timeout : 连接最大超时时间,设置为 0 表示无限制。
    • sslcert : 证书路径地址,文件必须包含 PEM 编码的数据
    • sslkey : Key 文件路径,文件必须包含 PEM 编码的数据
    • sslrootcert : root证书的文件路径,文件必须包含 PEM 编码的数据
    • 示例:一个填写完整的 postgres_datasource 字段类似于:"host=localhost port=5432 connect_timeout=10 user=pqgotest password=123456 sslmode=disable"
  • postgres_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
  • postgres_database: 数据库名称。
  • postgres_sql: 填写要执行的sql语句,可以用@(var)使用魔法变量。
  • postgres_offset_key: 指定一个 PostgreSQL 的列名,作为 offset 的记录,类型必须是整型,建议使用插入(或修改)数据的时间戳(unixnano)作为该字段。每次查询会指定这个 key 做where条件限制,避免单次查询性能消耗过大。
  • postgres_limit_batch: postgres_sql的语句,若数据量大,可以填写该字段,针对postgres_offset_key分批次查询。
    • postgres_offset_key填写为100,则查询范式为select * from table where postgres_offset_key >= 0 and postgres_offset_key < 0 + 100;
  • postgres_exec_onstart: true表示启动时执行一次,以后再按cron处理;false则表示到cron预设的时间才执行,默认为true。
  • sql_schema: 默认情况下会自动识别数据字段的类型,当不能识别时,可以sql_schema指定 mysql 数据字段的类型,目前支持stringlongfloat三种类型,单个字段左边为字段名称,右边为类型,空格分隔 abc float;不同的字段用逗号分隔。支持简写为float=>flong=>lstring=>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
  • magic_lag_duration: 针对魔法变量进行时间延迟,单位支持h(时)、m(分)、s(秒),如写24h,则渲染出来的时间魔法变量往前1天,2017年6月5日6时35分24秒 的 @(D) 渲染出来的就是4.
  • tag_file可选项,可以读取一个json格式的文件,并把json的数据作为标签附着在所有数据之上。典型的应用场景为一些机器或者容器相关的元数据存以json格式放在文件中,logkit发送的数据都带上这些元数据,以便查询时可以快速定位机器元数据,并根据元数据做报警等后续事宜。
Clone this wiki locally