CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/LoongCollector/文本日志
文档目录
概览版本管理
什么是输入插件
容器标准输出文本日志eBPF文件安全数据转发输入插件主机元数据采集主机监控数据自监控告警数据自监控指标数据eBPF网络可观测数据eBPF网络安全数据eBPF进程安全数据Prometheus 抓取一次性文件采集

LoongCollector

文本日志

inputfile插件可以实现从文本文件中采集日志。采集的日志内容将会保存在事件的content字段中。 Stable 推荐版本:iLogtail v1.0.27 及以上 | 参数 | 类型 | 是否必填 | 默认值 | 说明 | | --- | --- | --- | --- | --- | | Type | string | 是 | / | ...

文本日志

简介

input_file插件可以实现从文本文件中采集日志。采集的日志内容将会保存在事件的content字段中。

版本

Stable

版本说明

  • 推荐版本:iLogtail v1.0.27 及以上

配置参数

参数 类型 是否必填 默认值 说明
Type string 是 / 插件类型。固定为input_file。
FilePaths []string 是 / 待采集的日志文件路径列表(目前仅限1个路径)。路径中支持使用*和**通配符,其中**通配符仅能出现一次且仅限用于文件名前。
MaxDirSearchDepth int 否 0 文件路径中**通配符匹配的最大目录深度。仅当日志路径中存在**通配符时有效,取值范围为0~1000。
MaxCheckpointDirSearchDepth uint 否 0 还原检查点时如果文件已被移动,找回文件的最大目录搜索深度。
ExcludeFilePaths []string 否 空 文件路径黑名单。路径必须为绝对路径,支持使用*通配符。
ExcludeFiles []string 否 空 文件名黑名单。支持使用*通配符。
ExcludeDirs []string 否 空 目录黑名单。路径必须为绝对路径,支持使用*通配符
FileEncoding string 否 utf8 文件编码格式。可选值包括utf8和gbk。
TailSizeKB uint 否 1024 配置首次生效时,匹配文件的起始采集位置距离文件结尾的大小。如果文件大小小于该值,则从头开始采集,取值范围为0~10485760KB。
Multiline object 否 空 多行聚合选项。详见表1。
EnableContainerDiscovery bool 否 false 是否启用容器发现功能。仅当 LoongCollector 以 DaemonSet 模式运行,且采集文件路径为容器内路径时有效。
ContainerFilters object 否 空 容器过滤选项。多个选项之间为“且”的关系,仅当EnableContainerDiscovery取值为true时有效,详见表2。
ExternalK8sLabelTag map[string]string 否 空 对于部署于K8s环境的容器,需要在日志中额外添加的与Pod标签相关的tag。map中的key为Pod标签名,value为对应的tag名。 例如:在map中添加app: k8s_label_app,则若pod中包含app=serviceA的标签时,会将该信息以tag的形式添加到日志中,即添加字段__tag__:k8s_label_app: serviceA;若不包含app标签,则会添加空字段__tag__:k8s_label_app:
ExternalEnvTag map[string]string 否 空 对于部署于K8s环境的容器,需要在日志中额外添加的与容器环境变量相关的tag。map中的key为环境变量名,value为对应的tag名。 例如:在map中添加VERSION: env_version,则当容器中包含环境变量VERSION=v1.0.0时,会将该信息以tag的形式添加到日志中,即添加字段__tag__:env_version: v1.0.0;若不包含VERSION环境变量,则会添加空字段__tag__:env_version:
AppendingLogPositionMeta bool 否 false 是否在日志中添加该条日志所属文件的元信息,包括__tag__:__inode__字段和__file_offset__字段。
FlushTimeoutSecs uint 否 5 当文件超过指定时间未出现新的完整日志行时,将当前读取缓存中的内容作为一条数据输出。
EnableExactlyOnce uint 否 0 **实验功能!**Exactly Once 并发度(>0 启用 Exactly Once 处理与提交保障)。
AllowingIncludedByMultiConfigs bool 否 false 是否允许当前配置采集其它配置已匹配的文件。
FileOffsetKey string 否 log.file.offset 用于指定日志文件偏移量的字段名。
Tags map[string]string 否 空 重命名或删除tag。map中的key为原tag名,value为新tag名。若value为空,则删除原tag。若value为__default__,则使用默认值。支持配置的Tag名和默认值参照后文的表3。
  • 表1:多行聚合选项
参数 类型 是否必填 默认值 说明
Mode string 否 custom 多行聚合模式。可选值包括custom和JSON。
StartPattern string 当Multiline.Mode取值为custom时,至少1个必填 空 行首正则表达式。
ContinuePattern string 空 行继续正则表达式。
EndPattern string 空 行尾正则表达式。
UnmatchedContentTreatment string 否 single_line 对于无法匹配的日志段的处理方式,可选值如下:
  • discard:丢弃
  • single_line:将不匹配日志段的每一行各自存放在一个单独的事件中
  • 表2:容器过滤选项
参数 类型 是否必填 默认值 说明
K8sNamespaceRegex string 否 空 对于部署于K8s环境的容器,指定待采集容器所在Pod所属的命名空间条件。如果未添加该参数,则表示采集所有容器。支持正则匹配。
K8sPodRegex string 否 空 对于部署于K8s环境的容器,指定待采集容器所在Pod的名称条件。如果未添加该参数,则表示采集所有容器。支持正则匹配。
IncludeK8sLabel map[string]string 否 空 对于部署于K8s环境的容器,指定待采集容器所在pod的标签条件。多个条件之间为“或”的关系,如果未添加该参数,则表示采集所有容器。支持正则匹配。 map中的key为Pod标签名,value为Pod标签的值,说明如下:
  • 如果map中的value为空,则pod标签中包含以key为键的pod都会被匹配;
  • 如果map中的value不为空,则:
    • 若value以^开头并且以$结尾,则当pod标签中存在以key为标签名且对应标签值能正则匹配value的情况时,相应的pod会被匹配;
    • 其他情况下,当pod标签中存在以key为标签名且以value为标签值的情况时,相应的pod会被匹配。
    ExcludeK8sLabel map[string]string 否 空 对于部署于K8s环境的容器,指定需要排除采集容器所在pod的标签条件。多个条件之间为“或”的关系,如果未添加该参数,则表示采集所有容器。支持正则匹配。 map中的key为pod标签名,value为pod标签的值,说明如下:
    • 如果map中的value为空,则pod标签中包含以key为键的pod都会被匹配;
    • 如果map中的value不为空,则:
      • 若value以^开头并且以$结尾,则当pod标签中存在以key为标签名且对应标签值能正则匹配value的情况时,相应的pod会被匹配;
      • 其他情况下,当pod标签中存在以key为标签名且以value为标签值的情况时,相应的pod会被匹配。
      K8sContainerRegex string 否 空 对于部署于K8s环境的容器,指定待采集容器的名称条件。如果未添加该参数,则表示采集所有容器。支持正则匹配。
      IncludeEnv map[string]string 否 空 指定待采集容器的环境变量条件。多个条件之间为“或”的关系,如果未添加该参数,则表示采集所有容器。支持正则匹配。 map中的key为环境变量名,value为环境变量的值,说明如下:
      • 如果map中的value为空,则容器环境变量中包含以key为键的容器都会被匹配;
      • 如果map中的value不为空,则:
        • 若value以^开头并且以$结尾,则当容器环境变量中存在以key为环境变量名且对应环境变量值能正则匹配value的情况时,相应的容器会被匹配;
        • 其他情况下,当容器环境变量中存在以key为环境变量名且以value为环境变量值的情况时,相应的容器会被匹配。
        ExcludeEnv map[string]string 否 空 指定需要排除采集容器的环境变量条件。多个条件之间为“或”的关系,如果未添加该参数,则表示采集所有容器。支持正则匹配。 map中的key为环境变量名,value为环境变量的值,说明如下:
        • 如果map中的value为空,则容器环境变量中包含以key为键的容器都会被匹配;
        • 如果map中的value不为空,则:
          • 若value以^开头并且以$结尾,则当容器环境变量中存在以key为环境变量名且对应环境变量值能正则匹配value的情况时,相应的容器会被匹配;
          • 其他情况下,当容器环境变量中存在以key为环境变量名且以value为环境变量值的情况时,相应的容器会被匹配。
          IncludeContainerLabel map[string]string 否 空 指定待采集容器的标签条件。多个条件之间为“或”的关系,如果未添加该参数,则默认为空,表示采集所有容器。支持正则匹配。 map中的key为容器标签名,value为容器标签的值,说明如下:
          • 如果map中的value为空,则容器标签中包含以key为键的容器都会被匹配;
          • 如果map中的value不为空,则:
            • 若value以^开头并且以$结尾,则当容器标签中存在以key为标签名且对应标签值能正则匹配value的情况时,相应的容器会被匹配;
            • 其他情况下,当容器标签中存在以key为标签名且以value为标签值的情况时,相应的容器会被匹配。
            ExcludeContainerLabel map[string]string 否 空 指定需要排除采集容器的标签条件。多个条件之间为“或”的关系,如果未添加该参数,则默认为空,表示采集所有容器。支持正则匹配。 map中的key为容器标签名,value为容器标签的值,说明如下:
            • 如果map中的value为空,则容器标签中包含以key为键的容器都会被匹配;
            • 如果map中的value不为空,则:
              • 若value以^开头并且以$结尾,则当容器标签中存在以key为标签名且对应标签值能正则匹配value的情况时,相应的容器会被匹配;
              • 其他情况下,当容器标签中存在以key为标签名且以value为标签值的情况时,相应的容器会被匹配。
              • 表3:Tag配置项以及默认值
                配置项 是否默认添加 默认值
                FileInodeTagKey 否 file_offset
                FilePathTagKey 是 path
                K8sNamespaceTagKey 是(当EnableContainerDiscovery为true时) namespace
                K8sPodNameTagKey 是(当EnableContainerDiscovery为true时) pod_name
                K8sPodUidTagKey 是(当EnableContainerDiscovery为true时) pod_uid
                ContainerNameTagKey 是(当EnableContainerDiscovery为true时) container_name
                ContainerIpTagKey 是(当EnableContainerDiscovery为true时) container_ip
                ContainerImageTagKey 是(当EnableContainerDiscovery为true时) image_name

              样例

              采集指定目录下的文件

              采集/home/test-log路径下的所有文件名匹配*.log规则的文件,并将结果输出至stdout。

              • 输入
              {"key1": 123456, "key2": "abcd"}
              
              • 采集配置
              enable: true
              inputs:
                - Type: input_file
                  FilePaths: 
                    - /home/test-log/*.log
              flushers:
                - Type: flusher_stdout
                  OnlyStdout: true
                  Tags: true
              
              • 输出
              {
                  "__tag__:__path__": "/home/test-log/json.log",
                  "content": "{\"key1\": 123456, \"key2\": \"abcd\"}",
                  "__time__": "1657354763"
              }
              

              注意:__tag__ 字段的输出会因 LoongCollector / 兼容的旧版 iLogtail 具体版本与输出路径而有所差别。为了在标准输出中能够准确地观察到 __tag__,建议仔细检查以下几点:

              • flusher_stdout 的配置中,设置了 Tags: true
              • 若使用较新版本 Agent,在观察标准输出时,__tag__ 可能会被拆分为一行单独的信息,先于日志正文输出(与本文示例可能不一致),请勿遗漏。

              此注意事项适用于后文所有观察 __tag__ 字段输出的地方。

              采集指定目录下的所有文件

              采集/home/test-log路径下的所有文件名匹配*.log规则的文件(含递归),并将结果输出至stdout。

              • 采集配置
              enable: true
              inputs:
                - Type: input_file
                  FilePaths: 
                    - /home/test-log/**/*.log
                  MaxDirSearchDepth: 10
              flushers:
                - Type: flusher_stdout
                  OnlyStdout: true
                  Tags: true
              

              采集 K8s 容器文件(仅限以 DaemonSet 部署的 LoongCollector / 容器采集场景)

              采集K8s命名空间default中以deploy为Pod名前缀、Pod标签包含version: 1.0且容器环境变量不为ID=123的所有容器中,/home/test-log/路径下的所有文件名匹配*.log规则的文件,并将结果输出至stdout。

              • 采集配置
              enable: true
              inputs:
                - Type: input_file
                  FilePaths: 
                    - /home/test-log/*.log
                  EnableContainerDiscovery: true
                  ContainerFilters:
                    K8sNamespaceRegex: default
                    K8sPodRegex: ^(deploy.*)$
                    IncludeK8sLabel:
                      version: v1.0
                    ExcludeEnv:
                      ID: 123
              flushers:
                - Type: flusher_stdout
                  OnlyStdout: true
                  Tags: true
              

              采集简单多行日志

              采集文件/home/test-log/regMulti.log,文件内容通过行首正则表达式切分日志,然后通过正则表达式解析日志内容并提取字段,并将结果输出到stdout。

              • 输入
              [2022-07-07T10:43:27.360266763] [INFO] java.lang.Exception: exception happened
                  at com.aliyun.sls.devops.logGenerator.type.RegexMultiLog.f2(RegexMultiLog.java:108)
                  at java.base/java.lang.Thread.run(Thread.java:833)
              
              • 采集配置
              enable: true
              inputs:
                - Type: input_file
                  FilePaths: 
                    - /home/test-log/regMulti.log
                  Multiline:
                    StartPattern: \[\d+-\d+-\w+:\d+:\d+.\d+]\s\[\w+]\s.*
              processors:
                - Type: processor_parse_regex_native
                  SourceKey: content
                  Keys:
                    - time
                    - level
                    - msg
                  Regex: \[(\S+)]\s\[(\S+)]\s(.*)
              flushers:
                - Type: flusher_stdout
                  OnlyStdout: true
                  Tags: true
              
              • 输出
              {
                  "__tag__:__path__": "/home/test-log/regMulti.log",
                  "time": "2022-07-07T10:43:27.360266763",
                  "level": "INFO",
                  "msg": "java.lang.Exception: exception happened\n    at com.aliyun.sls.devops.logGenerator.type.RegexMultiLog.f2(RegexMultiLog.java:108)\n    at java.base/java.lang.Thread.run(Thread.java:833)",
                  "__time__": "1657161807"
              }
              

              采集复杂多行日志

              采集文件/home/test-log/regMulti.log,文件内容通过行首和行尾正则表达式切分日志,然后通过正则表达式解析日志内容并提取字段,并将结果输出到stdout。

              • 输入
              [2022-07-07T10:43:27.360266763] [ERROR] java.lang.Exception: exception happened
              [2022-07-07T10:43:27.360266763]    at com.aliyun.sls.devops.logGenerator.type.RegexMultiLog.f2(RegexMultiLog.java:108)
              [2022-07-07T10:43:27.360266763]    at java.base/java.lang.Thread.run(Thread.java:833)
              [2022-07-07T10:43:27.360266763]    ... 23 more
              [2022-07-07T10:43:27.360266763] Some user custom log
              [2022-07-07T10:43:27.360266763] Some user custom log
              [2022-07-07T10:43:27.360266763] [ERROR] java.lang.Exception: exception happened
              
              • 采集配置
              enable: true
              inputs:
                - Type: input_file
                  FilePaths: 
                    - /home/test-log/regMulti.log
                  Multiline:
                    StartPattern: \[\d+-\d+-\w+:\d+:\d+.\d+].*Exception.*
                    EndPattern: .*\.\.\. \d+ more
              processors:
                - Type: processor_parse_regex_native
                  SourceKey: content
                  Keys:
                    - msg
                    - time
                  Regex: (\[(\S+)].*)
              flushers:
                - Type: flusher_stdout
                  OnlyStdout: true
                  Tags: true
              
              • 输出
              {
                  "__tag__:__path__": "/home/test-log/regMulti.log",
                  "time": "2022-07-07T10:43:27.360266763",
                  "msg": "[2022-07-07T10:43:27.360266763] [ERROR] java.lang.Exception: exception happened\n[2022-07-07T10:43:27.360266763]    at com.aliyun.sls.devops.logGenerator.type.RegexMultiLog.f2(RegexMultiLog.java:108)\n[2022-07-07T10:43:27.360266763]    at java.base/java.lang.Thread.run(Thread.java:833)\n[2022-07-07T10:43:27.360266763]    ... 23 more"
              }
              
              {
                  "__tag__:__path__": "/home/test-log/regMulti.log",
                  "time": "2022-07-07T10:43:27.360266763",
                  "msg": "[2022-07-07T10:43:27.360266763] Some user custom log"
              }
              
              {
                  "__tag__:__path__": "/home/test-log/regMulti.log",
                  "time": "2022-07-07T10:43:27.360266763",
                  "msg": "[2022-07-07T10:43:27.360266763] Some user custom log"
              }
              

              文章大纲