如何配置Filebeat的输入插件
小樊
39
2025-12-22 16:24:41
配置 Filebeat 输入插件
一 配置结构与通用字段
- 在配置文件中通过 filebeat.inputs 数组定义多个输入,每个输入以 - type: <类型> 开头,常用类型包括 filestream(文件,推荐)、log(旧版文件输入,已不推荐)、stdin、tcp、container(容器日志)。
- 通用字段适用于多数输入类型:
- enabled: 是否启用该输入,默认 true。
- tags: 为事件添加标签列表。
- fields: 自定义字段(默认嵌套在 fields 下)。
- fields_under_root: 设为 true 时将自定义字段提升到事件顶级。
- processors: 事件处理链(如 drop_event、drop_fields、rename、convert 等)。
- 示例骨架:
filebeat.inputs:
- type: filestream
paths:
- /var/log/*.log
fields:
app: nginx
fields_under_root: true
tags: [“prod”, “web”]
processors:
- add_fields:
fields:
env: prod
二 常用输入类型与关键选项
- 文件类
- 推荐 filestream:
- 关键选项:paths(支持 glob,如 /var/log//.log、/data//**/.log** 递归)、parsers(内置 multiline、ndjson、container 解析器)。
- 示例:
filebeat.inputs:
- type: filestream
paths: [“/var/log/app/*.log”]
parsers:
- multiline:
type: count
count_lines: 3
- ndjson:
add_error_key: true
overwrite_keys: true
target: json_fields
- 旧版 log(已不推荐):仍可用,但建议迁移到 filestream。
- 标准输入与 TCP
- stdin:用于调试或管道输入。
- tcp:接收网络日志流。
- 关键选项:host(如 0.0.0.0:9000)、max_message_size(如 10MiB)。
- 示例:
filebeat.inputs:
- type: tcp
host: “0.0.0.0:9000”
max_message_size: 10MiB
- 容器日志
- container:读取容器日志文件并解析常见消息行与时间戳。
- 关键选项:paths(如 /data/docker/containers//.log)。
- 示例:
filebeat.inputs:
- type: container
paths: [“/data/docker/containers//.log”]
- 提示
- docker 输入类型在 7.2.0 起已废弃,改用 container。
三 行过滤与 JSON 解析
- 行过滤
- include_lines: 仅采集匹配正则的行(如 [‘^ERR’, ‘^WARN’])。
- exclude_lines: 排除匹配正则的行(如 [‘^DBG’])。
- exclude_files: 忽略匹配正则的文件(如 [‘.gz$’])。
- 顺序说明:若同时设置,先执行 include_lines,再执行 exclude_lines。
- JSON 解析(针对文件或容器日志的 message 字段)
- 关键选项:
- json.keys_under_root: 将解析出的键提升到事件顶级。
- json.add_error_key: 解析失败时添加 error 字段。
- json.overwrite_keys: 与内置顶级字段冲突时是否覆盖。
- json.target: 将解析结果放入指定字段下。
- 示例:
filebeat.inputs:
- type: filestream
paths: [“/var/log/app/*.json”]
parsers:
- ndjson:
add_error_key: true
overwrite_keys: true
target: json_data
json.keys_under_root: false
四 多行日志与容器场景
- 多行日志(如 Java 堆栈)
- 使用 filestream.parsers.multiline,常见策略:
- 按行数聚合:
filebeat.inputs:
- type: filestream
paths: [“/var/log/app/stack.log”]
parsers:
- multiline:
type: count
count_lines: 5
- 按正则合并(示例以 “Caused by:” 开头作为新事件开始):
filebeat.inputs:
- type: filestream
paths: [“/var/log/app/stack.log”]
parsers:
- multiline:
pattern: ‘^Caused by:’
negate: true
match: after
- 容器日志
- 使用 container 输入并指定 paths(如 /data/docker/containers//.log),Filebeat 会解析常见消息行并提取时间戳。
- 若之前使用 docker 类型,建议迁移到 container。
五 调试与运行
- 快速验证
- 控制台输出:在配置中设置 output.console.pretty: true,便于查看事件结构。
- 启动命令:
- 前台调试:filebeat -e -c filebeat.yml
- 指定配置文件目录:filebeat -e -c config/your.yaml
- 运行示例
- TCP 输入测试:
- 启动 Filebeat(含 type: tcp, host: “0.0.0.0:9000”)。
- 发送数据:echo ‘hello filebeat’ | nc 127.0.0.1 9000
- 观察控制台输出。
- 文件输入测试:
- 启动 Filebeat(含 type: filestream, paths: [“/tmp/test/*.log”])。
- 写入文件:echo ‘{“level”:“info”,“msg”:“start”}’ > /tmp/test/a.log
- 观察控制台输出。