Skip to content

MongoDB Reader

Sun Jianbo edited this page Jan 16, 2018 · 8 revisions

MongoDB reader 是logkit提供的从MongoDB读取数据的配置方式。MongoDB reader 输出的是json字符串,需要使用json的parser解析。

典型配置如下

    "reader":{
        "mongo_host":"localhost:27017",
        "meta_path":"./meta",
        "mode":"mongo",
        "mongo_database":"app123",
        "mongo_collection": "collection1",
        "mongo_offset_key":"_id",
        "mongo_limit_batch":"100",
        "mongo_cron":"00 00 04 * * *",
        "mongo_exec_onstart":"true",
        "mongo_filters":"{\"foo\": {\"i\": {\"$gt\": 10}}}"
    },
  1. mongo_host 选填 是mongodb的url地址,基础的是mongo的host地址以及端口,默认是localhost:9200,扩展形式可以写为: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]],用户名密码也可以写在这里。
  2. meta_path 选填 默认自动生成,是reader的读取offset的记录路径,记录mongo读取时的Offset,路径必须是一个文件夹。
  3. mode 必填 是读取方式,使用MongoDB Reader必须填写mongo
  4. mongo_database 必填 mongo的数据库名称
  5. mongo_collection 必填 mongo的表名。
  6. mongo_offset_key 选填 指定一个mongo的列名,作为offset的记录,类型必须是整型(比如unixnano的时间,或者自增的primary key)。 每次查询会指定这个key做where条件大于上次查询最后的记录这样的限制,避免单次查询性能消耗过大,同时也支持持续的数据导入过程中避免数据重复。 若不指定,则使用mongo的_id键,_id键是由时间戳(秒)+机器+进程号+自增位组成的,在低频数据写入的情况下是自增的,在多机器组成的mongo集群高并发写入的情况下,_id不是自增的,存在漏数据的可能。 默认使用_id,也保证了在纯粹从静态的mongo数据库导入pandora过程中,若重启logkit不会导致数据重复。
  7. mongo_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>
  8. mongo_limit_batch 选填 默认为"100", 表示单次请求获取的数据量。
  9. mongo_exec_onstart 选填 默认为false, true表示启动时执行一次,以后再按cron处理;false则表示到cron预设的时间才执行,默认为true。
  10. mongo_filters 选填 表示collection的过滤规则,默认不过滤,全部获取。最外层是collection名称,里面对应的是json的规则。如示例所示,表示foo这个collection,i字段的值大于10的全部数据。
  11. tag_file可选项,可以读取一个json格式的文件,并把json的数据作为标签附着在所有数据之上。典型的应用场景为一些机器或者容器相关的元数据存以json格式放在文件中,logkit发送的数据都带上这些元数据,以便查询时可以快速定位机器元数据,并根据元数据做报警等后续事宜。

注意

导出mongo的字段中,包含"_id" 的话,在打入Pandora的数据中,默认也会包含"_id",这份数据如果再要导出到LogDB,就会出现错误,因为_id是LogDB的保留字段。此时可以在Pandora Sender中指定 pandora_schema 字段设置别名,如 "pandora_schema":"_id id,...", 这样就可以正常导入。其他出现字段冲突的情况都可以使用别名功能处理。

Clone this wiki locally