search
数据采集 采集源配置 tailf 日志采集

tailf 日志采集

简介

采集文件尾部数据(类似tail -f),上报到 DataFlux 中。

前置条件

配置

进入 DataKit 安装目录下的 conf.d/log 目录,复制 tailf.conf.sample 并命名为 tailf.conf。示例如下:

[[inputs.tailf]]
    # 日志文件列表,可以指定绝对路径,支持使用 glob 规则进行批量指定
    # 推荐使用绝对路径
    logfiles = ["/tmp/tailf_test/**/*.log"]

    # 文件路径过滤,使用 glob 规则,符合任意一条过滤条件将不会对该文件进行采集
    ignore = [""]

    # 从文件首部开始采集,当此参数为 true 时,采集器会关闭自动发现文件的功能
    from_beginning = false

    # 数据源,必填
    source = ""

    # pipeline 脚本路径,如果为空将使用 $source.p,如果 $source.p 不存在将不使用 pipeline
    pipeline_path = ""

    ## 解释文件内容时所使用的的字符编码,如果设置为空,将不进行转码处理
    ## 注意不要选错编码,否则会导致数据无法正常显示
    ## ex: character_encoding = "utf-8"
    ##     character_encoding = "utf-16le"
    ##     character_encoding = "utf-16be"
    ##     character_encoding = "gbk"
    ##     character_encoding = "gb18030"
    ##     character_encoding = ""
    #character_encoding = ""

    ## 自定义多行数据,将正则表达式匹配到的行数据,添加到前一行末尾,通常用来记录log中的调用栈
    ## 此段如果被注释,将不进行多行数据匹配,上传原数据
    #[inputs.tail.multiline]
    ## 设置正则表达式,例如 ^/D 行首非数字位,添加到上一行末尾
    #pattern = "^\D"

    ## 该值必须是 previous 或 next,用以表明多行的上下关系
    #match_which_line = "previous"

    # 自定义 tags
    # [inputs.tailf.tags]
    # tags1 = "value1"

pipeline 配置和使用: pipeline 文档

- 如果配置文件中 pipeline_path 为空,默认使用 $source.p
- 如果 $source.p 不存在,将不使用 pipeline 功能
- 所有 pipeline 脚本文件,统一存放在 datakit 安装路径下的 pipeline 和 pattern 文件夹中,具体写法请看文档

默认情况下,采集器会自动发现新文件,以确保符合规则的新文件能够尽快采集。注意,当 from_beginning 为 true,将强制关闭自动发现文件功能,否则会出现数据重复的问题。

glob 规则简述(图表数据来源):

通配符 描述 例子 匹配 不匹配
* 匹配任意数量的任何字符,包括无 Law* Law, Laws, Lawyer GrokLaw, La, aw
? 匹配任何单个字符 ?at Cat, cat, Bat, bat at
[abc] 匹配括号中给出的一个字符 [CB]at Cat, Bat cat, bat
[a-z] 匹配括号中给出的范围中的一个字符 Letter[0-9] Letter0, Letter1 … Letter9 Letters, Letter, Letter10
[!abc] 匹配括号中未给出的一个字符 [!C]at Bat, bat, cat Cat
[!a-z] 匹配不在括号内给定范围内的一个字符 Letter[!3-5] Letter1… Letter3 … Letter5, Letterxx

另需说明,除上述 glob 标准规则外,采集器也支持 ** 进行递归地文件遍历,如示例配置所示。

指标说明:

  • tags 以用户配置为第一优先。
  • 采集器会补充 filename 字段为当前内容的文件路径。
  • fields 只有 __content 一个元素,即文本的行内容。

示例数据

tailf_source filename=/tmp/test.t message="this is log content 1" 1590399226185118010
tailf_source filename=/tmp/test.t message="this is log content 2" 1590399226385218167
tailf_source filename=/tmp/test.t message="this is log content 3" 1590399226585314775
tailf_source filename=/tmp/test.t message="this is log content 4" 1590399226785420725
tailf_source filename=/tmp/test.t message="this is log content 5" 1590399226985528809
tailf_source filename=/tmp/test.t message="this is log content 6" 1590399227185633882
tailf_source filename=/tmp/test.t message="this is log content 7" 1590399227385747017
tailf_source filename=/tmp/test.t message="this is log content 8" 1590399227585893074