跳到主要内容
版本:Next

文件输入配置指南

在 agent.yaml 的 input 段配置文件采集。参数类型与默认值仅以配置说明 — input 为准;本文提供 路径 glob、单行与多行逻辑事件,以及 可直接套用的 YAML。

Edge Agent 的 input 段配置 file 采集器(type: file,默认):尾随本地文件、支持多行合并、将每条逻辑事件序列化后写入出站队列。

路径与文件发现

paths

paths 为 glob 模式或具体文件路径的列表。采集器会:

  • 启动时解析所有模式,打开匹配的普通文件(不含目录本身);
  • 按 glob-scan-interval-ms(默认 5000)周期性重新 glob,发现新文件(例如日志轮转生成 app.log.2025-05-19);
  • 首次发现时按文件最后修改时间升序处理(先旧后新)。
备注

模式使用 Java NIO glob: 语法(*、**、?、[...])。Windows 上也请使用正斜杠 /。

模式示例匹配范围
/var/log/myapp/*.log/var/log/myapp/ 下所有 .log
/var/log/myapp/**该目录树下所有普通文件(递归)
/var/log/nginx/access.log单个文件
/data/events/app-*.json如 app-001.json、app-prod.json

路径中无 glob 字符且指向目录时,会采集该目录下所有普通文件(等价于追加 */)。

尾随 vs 从头读

配置项典型场景
read-from-beginningfalse(默认)生产尾随:首次打开且无已存位点时,从文件末尾开始(只读新增内容)。
read-from-beginningtrue补数或一次性追历史:首次打开从字节 0 读。重启后仍以已保存位点为准。
备注

位点保存在与出站队列相同的 WAL 数据库中,重启后从上次持久化偏移继续(与 WAL append 同步,不等待 Engine 返回 RECEIVED)。

轮转与多文件

配置项作用
glob-scan-interval-ms重新 glob 并挂载新路径的间隔。
close-inactive-ms超过该时间无读取则关闭文件句柄(默认 5 分钟)。
on-error: skip单文件 IO 错误时跳过继续(fail 则终止 Agent)。

单行事件 vs 多行合并

默认(不写 multiline 或未写 pattern): 每个物理行一个事件。适用于 NDJSON(每行一个 JSON)或很少堆栈的文本日志。

多行(设置 multiline.pattern): 按正则判断事件边界,将多行缓冲为一条逻辑事件。

multiline.match含义
after(默认)匹配正则的行作为新事件起始,此前缓冲行作为上一条事件发出。常见于每行以时间戳开头的日志。
before匹配正则的行作为当前事件的最后一行,追加后立即 flush。
negate: true对匹配结果取反(高级用法)。
配置项作用
max-lines单条事件最多缓冲的物理行数(默认 500)。
flush-idle-timeout-ms缓冲区空闲超过该毫秒数时强制 flush(默认 5000)。必须 > 0。
备注

YAML 双引号字符串中,正则反斜杠需转义(例如 "^\\d{4}-\\d{2}-\\d{2}")。

序列化形态

output-format.type下游收到
line(默认)每条事件一个 JSON,含 _file、_line、_offset、payload(单行或多行数组)。
json在可解析时输出结构化 JSON。

此为 Agent 事件封装,不是 EdgeSocket 线路编码,见 EdgeSocket Source


场景配置示例

以下仅展示 input;output、queue 等见 部署指南

1. 单应用目录 — 通配符采集

采集某目录下全部 *.log,只尾随新写入。

input:
paths:
- "/var/log/myapp/*.log"
read-from-beginning: false
glob-scan-interval-ms: 5000

2. 多目录或多命名模式

Nginx 访问/错误日志 + JSON 事件目录:

input:
paths:
- "/var/log/nginx/access.log"
- "/var/log/nginx/error.log"
- "/data/myapp/events/**/*.json"
encoding: UTF-8

3. NDJSON

不配置 multiline,每物理行一条事件,payload 为原始行内容。

input:
paths:
- "/data/ingest/*.ndjson"
output-format:
type: line

文件示例:

{"user":"a","action":"login"}
{"user":"b","action":"logout"}

4. Java / Spring 日志 — 时间戳开启新事件

以 2025-05-19 开头的行作为新事件起点,堆栈行归属上一条。

input:
paths:
- "/var/log/spring-boot/application.log"
multiline:
pattern: "^\\d{4}-\\d{2}-\\d{2}"
match: after
max-lines: 500
flush-idle-timeout-ms: 5000
output-format:
type: line

磁盘示例:

2025-05-19 10:00:00 ERROR com.example.Main - failed
java.lang.RuntimeException: boom
at com.example.Main.run(Main.java:1)
2025-05-19 10:00:01 INFO com.example.Main - recovered

→ 两条事件:第一条 3 行;第二条 1 行。

5. 以结束标记收束

固定尾行(如 ---END---)表示一条记录结束。

input:
paths:
- "/opt/batch/output/*.txt"
multiline:
pattern: "^---END---$"
match: before

6. 首次安装补历史,之后尾随

首次部署从文件头读取;重启后按已存位点续读。

input:
paths:
- "/var/log/myapp/*.log"
read-from-beginning: true
提示

首次跑完后可改回 read-from-beginning: false,重启仍以位点为准。

7. 按日期滚动的文件

如 app-2025-05-19.log 每日新增;glob + glob-scan-interval-ms 自动发现新文件。

input:
paths:
- "/var/log/myapp/app-*.log"
glob-scan-interval-ms: 3000
close-inactive-ms: 600000

8. 固定 input.id

省略 id 时使用稳定的采集源标识作为 WAL / 位点 sourceId(见 身份文件)。多 Agent 或 WAL 迁移时请保留 edge-agent.id 与 WAL,或显式指定:

input:
id: "edge-host-01-nginx"
paths:
- "/var/log/nginx/*.log"

嵌套 input.file

可将与 input 平级相同的键写在 input.file 下。两者同时存在时,file 块覆盖同名顶层字段。无特殊需求时建议用扁平 input。

input:
id: my-source
file:
paths:
- "/var/log/*.log"
multiline:
pattern: "^\\["
match: after