Skip to content

Readers

Sun Jianbo edited this page May 23, 2017 · 11 revisions

Reader

File Reader

file reader 的典型配置如下

    "reader":{
        "log_path":"./logdir",
        "meta_path":"./meta",
        "file_done":"./meta",
        "mode":"dir",
        "encoding":"utf-8",
        "donefile_retention":"7",
        "read_from":"newest",
        "ignore_hidden":"true",  // 可不选,默认开启
        "ignore_file_suffix":".pid, .swp", // 可不选,默认不忽略
        "valid_file_pattern":"qiniulog-*.log" // 可不选,默认为 "*"
    },
  1. log_path 必填项,需要收集的日志的文件(夹)路径
  2. meta_path 可选项,是reader的读取offset的记录路径,必须是一个文件夹,在这个文件夹下,会记录本次reader的读取位置。默认会根据runner名称结合log_path的hash值自动生成。
  3. file_done 可选项,是reader完成后标志读取完成的文件放置位置,如果不填,默认放在meta_path下。singleFile模式下,若文件被rotate,则只匹配当前日志文件夹下,前缀相同的文件,inode相同作为rotate后的文件记录到file_done文件中,该策略只是把移动后的第一个文件放到metafile_done文件里面。
  4. mode 必填项,读取方式,有 dirfiletailx 三种读取模式。
    • 当选项为dir的时候,log_path 必须是精确的文件夹路径,例如 /home/qiniu/path/, logkit会在启动时根据文件夹下文件时间顺序依次读取文件,当读到时间最新的文件时会不断读取追加的数据,直到该文件夹下出现新的文件。使用dir模式的经典日志存储方式为整个文件夹下存储业务日志,文件夹下的日志使用统一前缀,后缀为时间戳,根据日志的大小rotate到新的文件。
    • 当选项为file的时候,log_path 必须是精确的文件路径,例如 /home/qiniu/path/server.log , logkit会不断读取该文件追加的数据。使用file模式的经典日志存储方式类似于nginx的日志rotate方式,日志名称为固定的名称,如access.log,rotate时直接move成新的文件如access.log.1,新的数据仍然写入到access.log
    • 当选项为tailx的时候,logpath 是一个匹配路径的模式串,例如 /home/*/path/*/logdir/*.log*, 此时会展开并匹配所有符合该表达式的文件,并持续读取所有有数据追加的文件。每隔stat_interval的时间,重新刷新一遍logpath模式串,添加新增的文件。tailx模式比较灵活,几乎可以读取所有日志更新,需要注意的是,使用tailx模式容易导致文件句柄打开过多。tailx模式的文件重复判断标准为文件的inode编号,即rename文件名不会导致数据重复读取。
  5. read_from 可选项,在创建新文件或meta信息损坏的时候(即历史读取记录不存在),将从文件的哪个位置开始读取。可以设置为oldest,从文件开始的部分全量读取,也可以设置为newest从文件最新的部分开始读取。如果字段不填,默认从最老的开始消费。tailx读取模式下,设置为oldest模式可能会导致数据重复读取(如rotate的方式是copy一份数据),设置为newest则有可能在感知的时间周期内丢失一部分数据。
  6. expire 可选项,针对tailx读取模式读取的日志, 写法为数字加单位符号组成的字符串duration写法,支持时h、分m、秒s为单位,类似3h(3小时),10m(10分钟),5s(5秒), 默认的expire时间是24h, 当达到expire时间的日志,就放弃追踪。放弃追踪的文件会被记录到file_done中,认为已经读取完毕。
  7. max_open_files 可选项,针对tailx读取模式读取的日志,最大能追踪的文件数,默认为256。同时追踪的文件过多会导致打开的文件句柄超过系统限制,请谨慎配置该项。超过限制后,不再追踪新添加的日志文件,直到部分追踪文件达到expire时间。
  8. stat_interval 可选项,针对tailx读取模式读取的日志,刷新过期的跟踪日志文件, 刷新logpath模式串,感知新增日志的定时检查时间, 写法为数字加单位符号组成的字符串duration写法,支持时h、分m、秒s为单位,类似3h(3小时),10m(10分钟),5s(5秒),默认3m(3分钟)。
  9. datasource_tag 可选项,表示把读取日志的路径名称也作为标签,记录到解析出来的数据结果中,默认不添加,若datasource_tag不为空,则以该字段名称作为标签名称。例如 "datasource_tag":"mydatasource"; 则最终解析的日志中会增加一个字段mydatasource记录读取到日志的路径。可用于区分tailx模式下的日志数据是从哪个日志路径下读取的问题。
  10. ignore_hidden 可选项,读取的过程中是否忽略隐藏文件,默认忽略
  11. ignore_file_suffix 可选项,针对dir读取模式需要解析的日志文件,可以设置读取的过程中忽略哪些文件后缀名,默认忽略的后缀包括".pid", ".swap", ".go", ".conf", ".tar.gz", ".tar", ".zip",".a", ".o", ".so"
  12. donefile_retention 可选项,日志读取完毕后donefile的保留时间,默认7天。如果donefile里面的文件一直因为别的runner不能删除,donefile也不会删除。
  13. valid_file_pattern 可选项,针对dir读取模式需要解析的日志文件,可以设置匹配文件名的模式串,匹配方式为glob展开模式,默认为*,即匹配文件夹下全部文件。
  14. encoding 可选项,读取日志文件的编码方式,默认为utf-8,即按照utf-8的编码方式读取文件。支持读取文件的编码格式包括:UTF-16,GB18030,GBK,cp51932,windows-51932,EUC-JP,EUC-KR,ISO-2022-JP,Shift_JIS,TCVN3及其相关国际化通用别名。
  15. head_pattern 可选项,默认不填,reader每次读取一行,若要读取多行,则填写head_pattern表示匹配多行的第一行使用的正则表达式。tailx模式在多行匹配时,若一条日志的多行被截断到多个文件,那么此时无法匹配多行。dirfile模式下会自动处理文件截断的拼接。head_pattern最多缓存20MB的日志文件进行匹配。使用多行匹配情况的一个经典场景就是使用grok parser解析应用日志,此时需要在head_pattern中指定行首的正则表达式,每当匹配到符合行首正则表达式的时候,就将之前的多行一起返回,交由grok parser解析。如果配置的parser只能解析单行,如目前提供的csv_parser,json_parser,那么此处的head_pattern必须为空,否则会导致解析错误。

ElasticSearch Reader

ElasticSearch Reader 的典型配置如下

    "reader":{
        "es_host":"http://localhost:9200",
        "meta_path":"./meta",
        "mode":"elastic",
        "es_limit_batch":"100",
        "es_index":"app-repo-123",
        "es_type": "type_app",
        "es_keepalive":"1d"
    },
  1. ElasticSearch Reader 输出的是json字符串,需要使用json的parser解析。
  2. es_host es的host地址以及端口
  3. meta_path 是reader的读取offset的记录路径,记录es读取时的ScrollID,路径必须是一个文件夹。
  4. mode 是读取方式,使用ElasticSearch Reader必须填写elastic
  5. es_limit_batch es一次获取的batch size,默认为100条一个batch。
  6. es_index es的索引名称,必填。
  7. es_type es的type名称
  8. es_keepalive es reader一旦挂掉了,重启后可以继续读取数据的ID(Offset记录)在es服务端保存的时长,默认1d,写法按es的单位为准,m分钟,h小时,d天。

MongoDB Reader

MongoDB reader 的典型配置如下

    "reader":{
        "mongo_host":"localhost:27017",
        "meta_path":"./meta",
        "mode":"mongo",
        "mongo_database":"app123",
        "mongo_collection": "collection1",
        "mongo_offset_key":"_id",
        "mongo_cron":"00 00 04 * * *",
        "mongo_exec_onstart":"true",
        "mongo_filters":"{\"foo\": {\"i\": {\"$gt\": 10}}}",
        "mongo_cacert": "/path/to/cert.pem"
    },
  1. MongoDB reader 输出的是json字符串,需要使用json的parser解析。
  2. mongo_host mongo的host地址以及端口
  3. meta_path 是reader的读取offset的记录路径,记录mongo读取时的Offset,路径必须是一个文件夹。
  4. mode 是读取方式,使用MongoDB Reader必须填写mongo
  5. mongo_database mongo的数据库名称
  6. mongo_collection mongo的表名
  7. mongo_offset_key 指定一个mongo的列名,作为offset的记录,类型必须是整型(比如unixnano的时间,或者自增的primary key)。 每次查询会指定这个key做where条件大于上次查询最后的记录这样的限制,避免单次查询性能消耗过大,同时也支持持续的数据导入过程中避免数据重复。 若不指定,则使用mongo的_id键,_id键是由时间戳(秒)+机器+进程号+自增位组成的,在低频数据写入的情况下是自增的,在多机器组成的mongo集群高并发写入的情况下,_id不是自增的,存在漏数据的可能。 默认使用_id,也保证了在纯粹从静态的mongo数据库导入pandora过程中,若重启logkit不会导致数据重复。
  8. mongo_cron 定时任务触发周期,支持两种写法。
    • crontab的写法,类似于* * * * * *,对应的是秒(0~59),分(0~59),时(0~23),日(1~31),月(1-12),星期(0~6),填*号表示所有遍历都执行。
    • 描述式写法,类似于"@midnight", "@every 1h30m",必须@符合开头,目前支持@hourly,@weekly,@monthly,@yearly,@every <time duration>
  9. mongo_exec_onstart true表示启动时执行一次,以后再按cron处理;false则表示到cron预设的时间才执行,默认为true。
  10. mongo_filters 表示collection的过滤规则,最外层是collection名称,里面对应的是json的规则。如示例所示,表示foo这个collection,i字段的值大于10的全部数据。
  11. mongo_cacert 存放mongo的鉴权证书,目前暂时不支持

Mysql Reader

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

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

reader 的典型配置如下

    "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"
    },
  • mysql reader输出的内容必须使用inner sql parser解析
  • 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: 定时任务触发周期,支持两种写法。
    • crontab的写法,类似于* * * * * *,对应的是秒(0~59),分(0~59),时(0~23),日(1~31),月(1-12),星期(0~6),填*号表示所有遍历都执行。
    • 描述式写法,类似于"@midnight", "@every 1h30m",必须@符合开头,目前支持@hourly,@weekly,@monthly,@yearly,@every <time duration>
  • mysql_database: 数据库名称。
  • mysql_sql: 填写要执行的sql语句,可以用@(var)使用魔法变量,用;分号隔开,多个语句按顺序执行。
  • mysql_offset_key: 指定一个mysql的列名,作为offset的记录,类型必须是整型。每次查询会指定这个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。
  • 魔法变量: 目前支持,,,,,的魔法变量。
    • @(YYYY) 年份
    • @(YY) 年份后两位,如06。
    • @(MM): 月份,补齐两位,如02
    • @(M): 月份,不补齐
    • @(D): 日,不补齐
    • @(DD): 日,补齐两位,如05
    • @(hh): 小时,补齐两位
    • @(h): 小时
    • @(mm): 分钟,补齐两位
    • @(m): 分钟
    • @(ss): 秒,补齐两位
    • @(s): 秒

Mssql Reader

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

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

reader 的典型配置如下

    "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输出的内容必须使用inner sql 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: 定时任务触发周期,支持两种写法。
    • 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)使用魔法变量,用;分号隔开,多个语句按顺序执行。
  • mssql_offset_key: 指定一个mssql的列名,作为offset的记录,类型必须是整型。每次查询会指定这个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,则类似于 select * from table limit 0,100
  • mssql_exec_onstart: true表示启动时执行一次,以后再按cron处理;false则表示到cron预设的时间才执行,默认为true。
  • 魔法变量: 目前支持,,,,,的魔法变量。
    • @(YYYY) 年份
    • @(YY) 年份后两位,如06。
    • @(MM): 月份,补齐两位,如02
    • @(M): 月份,不补齐
    • @(D): 日,不补齐
    • @(DD): 日,补齐两位,如05
    • @(hh): 小时,补齐两位
    • @(h): 小时
    • @(mm): 分钟,补齐两位
    • @(m): 分钟
    • @(ss): 秒,补齐两位
    • @(s): 秒

Kafka Reader

Kafka reader 的典型配置如下

    "reader":{
        "mode": "kafka",
        "kafka_groupid":"mac1",
        "kafka_topic":"test_topic1,test_topic2",
        "kafka_zookeeper":"localhost:2181, localhost:2181, localhost:2181",
        "read_from":"oldest"
    },
  • Kafka reader 输出的是raw data,可根据具体情况自定义parser进行解析。
  • mode 是读取方式,使用Kafka Reader必须填写kafka
  • kafka_topic kafka的topic名称列表
  • kafka_groupid kafka的consumer group名称。
  • kafka_zookeeper zookeeper地址列表
  • read_from 可选,oldest:从partition最开始的位置,newest:从partition最新的位置。默认从oldest位置开始消费。
Clone this wiki locally