智能日志管理平台

  • 文本文件

    最近更新时间:2018-09-21 10:37:35

    file reader是logkit从文件读取日志的配置方式,共包含 dirfiletailxfileautodirx 五种模式。

    dir 模式,从文件夹中读取

    填写日志所在文件夹路径(log_path),如 /Users/loris/logdir/,logkit-pro 在启动时根据文件夹下文件更新时间顺序依次读取文件,读取到时间最新的文件时会不断读取追加的数据,直到该文件夹下出现新的文件。

    收集场景

    使用 dir 模式的经典日志存储方式为整个文件夹下存储单个服务的业务日志,文件夹下的日志通常有统一前缀,后缀为时间戳,根据日志的大小 rotate 到新的文件。如配置的文件夹为 logdir,下面的文件为 logdir/a.log.20170621 , logdir/a.log.20170622, logdir/a.log.20170623 这种模式的日志。即某个服务日志按文件大小分隔日志,每次分割后新命名文件并以时间戳为后缀,并且该文件夹下只有这一个服务。dir 模式首先会对文件夹下文件整体排序,依次读取各个文件,读完最后有个文件后会查找时间(文件 ctime)更新文件并重新排序,依次循环。logkit-pro 会负责将多个文件串联起来。即数据读取过程中 a.log.20170621 中最后一行的下一行就是 a.log.20170622 的第一行。

    file 模式,从文件中读取

    填写精确的日志文件路径(log_path),如 /Users/loris/logdir/my.log,logkit-pro 不断读取该文件追加的数据。

    收集场景

    使用 file 模式的经典日志存储方式类似于 nginx 的日志 rotate 方式,日志名称为固定的名称,如 access.log , rotate 时直接 move 成新的文件如 access.log.1,新的数据仍然写入到 access.log。此时 配置 logkit-pro 收集永远只针对 access.log 这一个固定名称的文件进行收集。对于 logkit-pro 来说, Runner 也只会不断收集 access.log 这一个文件。检测文件是否 rotate 成功的标志是文件的 inode 号,在 windows 下则是 fd 的属性编号。对于使用 nfs 系统的用户来说,由于 inode 号不稳定,请谨慎使用这个模式。

    tailx模式,按通配符匹配多个文件读取

    填写匹配路径的模式串(log_path),例如 /Users/*/path/*/logdir/*.log*

    收集场景

    使用 tailx 模式的场景可以比较灵活,几乎可以读取所有被通配符匹配上的日志文件,对于单个日志文件使用 file 模式不断追踪日志更新,logpath 是一个匹配路径的模式串,例如 /home/*/path/*/logdir/*.log*, 此时会展开并匹配所有符合该表达式的文件,并持续读取所有有数据追加的文件。每隔 stat_interval 的时间,重新刷新一遍 logpath 模式串,添加新增的文件。需要注意的是,使用 tailx 模式容易导致文件句柄打开过多。tailx 模式的文件重复判断标准为文件名称,若使用 rename, copy 等方式改变日志名称,并且新的名字在 logpath 模式串的包含范围内,在 read_fromoldest 的情况下则会导致重复写入数据,设置为 newest 则有可能在感知的时间周期内丢失一部分数据。选择 tailx 模式请谨慎配置文件名称,防止日志 rotate 时老数据的命名进入 tailx 的模式串范围内,导致不断重复读取数据。

    fileauto模式,根据路径自动选择模式从文件中读取

    自动根据用户上传的路径匹配上述三种文件读取模式中的一种。

    选择的策略如下:

    1. 判断路径中是否带有 * , 若包含,则选择 tailx 模式。
    2. 判断路径是否为文件夹,若是文件夹,则选择 dir 模式。注意:dir 模式下,不同文件不断追加,会导致数据重复收集,请手动选择 tailx 模式。
    3. 最后选择 file 模式。

    dirx模式,按通配符匹配多个目录读取其中的文件

    填写匹配路径的模式串(log_path),例如 /Users/*/path/*/logdir/

    收集场景

    使用dirx 模式的场景主要解决有通配符需求,但是通配到的是文件夹,文件夹按照dir模式产生日志。dirx 可以读取所有被通配符匹配上的日志目录,对于单个日志目录使用 dir 模式不断追踪日志更新,logpath 是一个匹配路径的模式串,例如 /home/*/path/*/logdir/, 此时会展开并匹配所有符合该表达式的目录,并持续读取这些目录下所有有数据追加的文件。每隔 stat_interval 的时间,重新刷新一遍 logpath 模式串,添加新增的目录。需要注意的是,使用 dirx 模式容易导致文件句柄打开过多。dirx 模式的目录和文件重复判断标准为文件名称,若使用 rename, copy 等方式改变日志名称,并且新的名字在 logpath 模式串的包含范围内,在 read_fromoldest 的情况下则会导致重复写入数据,设置为 newest 则有可能在感知的时间周期内丢失一部分数据。选择 dirx 模式请谨慎配置文件名称,防止日志 rotate 时老数据的命名进入 dirx 的模式串范围内,导致不断重复读取数据。dirx 模式 下对目录过期的判断是当目录下所有的文件全部过期才将该目录标记为过期。

    基础配置信息

    • 读取起始位置(read_from):在创建新文件或 meta 信息损坏的时候(即历史读取记录不存在),将从文件的哪个位置开始读取。可以设置为 oldest,从文件开始的位置全量读取,也可以设置为 newest 从logkit开始运行后文件新追加的部分开始读取。如果字段不填,默认从最老的开始消费。tailx 读取模式下,设置为 oldest 模式可能会导致数据重复读取(在 rotate 的方式是 copy 一份数据时会出现),设置为 newest 则有可能在感知到新文件出现的时间周期内丢失一部分在这个时间周期内产生的数据

    • 忽略文件的最大过期时间(expire):针对 tailx 和 dirx 读取模式读取的日志, 写法为数字加单位符号组成的字符串 duration 写法,支持时 h、分 m、秒 s 为单位,类似 3h(3小时),10m(10分钟),5s(5秒), tailx 默认的 expire 时间是 24h,dirx 默认的 expire 时间是 0s(即永不过期), 当达到 expire 时间的日志,就放弃追踪。在过期时间为 0s 时如果 dirx 追踪的目录较多,建议调大最大打开文件数(max_open_files)。

    • 清理元数据的过期时间(submeta_expire):针对 tailx 和 dirx 读取模式读取的日志,当元数据的文件达到expire时间,则对其进行清理操作。写法为数字加单位符号组成的字符串 duration 写法,支持时 h、分 m、秒 s 为单位,类似 3h(3小时),10m(10分钟),5s(5秒), tailx 和 dirx 默认的 submeta_expire 时间是 720h,即 30 天。

    高级选项

    • 数据保存路径(meta_path):reader 读取 offset 的记录路径,必须是一个文件夹,在这个文件夹下,会记录本次 reader 的读取位置。默认会根收集器名称结合上传路径的 hash 值自动生成。注意,如果指定该选项,请确保每个配置的保存路径各不相同.

    • 编码方式(encoding):读取日志文件的编码方式,默认为 utf-8,即按照 utf-8 的编码方式读取文件。支持读取文件的编码格式包括:UTF-16GB18030GBKcp51932windows-51932EUC-JPEUC-KRISO-2022-JPShift_JISTCVN3 及其相关国际化通用别名。

    • 读取速度限制(readio_limit):读取文件的磁盘限速,填写正整数,单位为 MB/s, 默认限速 20 MB/s

    • 来源标签(datasource_tag):表示把读取日志的路径名称也作为标签,记录到解析出来的数据结果中,默认不添加,若 datasource_tag 不为空,则以该字段名称作为标签名称。例如 "datasource_tag":"mydatasource"; 则最终解析的日志中会增加一个字段 mydatasource 记录读取到日志的路径。可用于区分 tailx 模式下的日志数据是从哪个日志路径下读取的问题。dir 模式下,可能存在部分数据标记的不准确,偏差到下一个文件。(因为读取的时候是读到 bufferreader 的缓冲区,所以当buffer reader还在读前一部分数据的时候,可能底层的多文件拼接的seq reader已经读取到下一个文件,而此时调用的结果会是下一个文件的结果,所以出现异常。这种情况只有在数据出现在文件末尾且缓冲区已经读到下一个文件的情况。)

    • 按正则表达式规则换行(head_pattern):默认不填,reader 每次读取一行,若要读取多行,则填写。head_pattern表示匹配多行的第一行使用的正则表达式。tailx 模式在多行匹配时,若一条日志的多行被截断到多个文件,那么此时无法匹配多行。dir、file 模式下会自动处理文件截断的拼接。head_pattern最多缓存 20MB的日志文件进行匹配。使用多行匹配情况的一个经典场景就是使用grok parser解析应用日志,此时需要在head_pattern中指定行首的正则表达式,每当匹配到符合行首正则表达式的时候,就将之前的多行一起返回,交由后面的parser解析。

    • 文件末尾加上换行符(newfile_newline):默认为false,只针对dir模式,开启后,不同文件结尾自动添加换行符。

    • 是否忽略隐藏文件(ignore_hidden):读取的过程中是否忽略隐藏文件,默认忽略。

    • 忽略此类后缀文件(ignore_file_suffix):针对 dir 读取模式需要解析的日志文件,可以设置读取的过程中忽略哪些文件后缀名,默认忽略的后缀包括".pid", ".swap", ".go", ".conf", ".tar.gz", ".tar", ".zip",".a", ".o", ".so"

    • 以 linux 通配符匹配文件(valid_file_pattern):针对 dir 读取模式需要解析的日志文件,可以设置匹配文件名的模式串,匹配方式为 linux 通配符展开方式,默认为 *,即匹配文件夹下全部文件。

      • 通配符语法说明:
      • 匹配任意非文件路径分隔符的零或多个字符
      • ? 匹配任意非文件路径分隔符的单个字符
      • [符号集] 匹配符号集中的所有字符
    • 最大打开文件数(max_open_files):针对 tailx 和 dirx 读取模式读取的日志,最大能追踪的文件数,默认为 256。同时追踪的文件过多会导致打开的文件句柄超过系统限制,请谨慎配置该项。超过限制后,不再追踪新添加的日志文件,直到部分追踪文件或目录达到 expire 时间

    • 扫描间隔(stat_interval):针对 tailx 和 dirx 读取模式读取的日志,刷新过期的跟踪日志文件, 刷新 logpath 模式串,感知新增日志的定时检查时间, 写法为数字加单位符号组成的字符串 duration 写法,支持时 h、分m、秒s为单位,类似3h(3小时),10m(10分钟),5s(5秒),默认3m(3分钟)

    以上内容是否对您有帮助?
  • Icon free helper
    Close