温馨提示×

如何配置Filebeat的输入插件

小樊
39
2025-12-22 16:24:41
栏目: 编程语言

配置 Filebeat 输入插件

一 配置结构与通用字段

  • 在配置文件中通过 filebeat.inputs 数组定义多个输入,每个输入以 - type: <类型> 开头,常用类型包括 filestream(文件,推荐)、log(旧版文件输入,已不推荐)、stdintcpcontainer(容器日志)。
  • 通用字段适用于多数输入类型:
    • enabled: 是否启用该输入,默认 true
    • tags: 为事件添加标签列表。
    • fields: 自定义字段(默认嵌套在 fields 下)。
    • fields_under_root: 设为 true 时将自定义字段提升到事件顶级。
    • processors: 事件处理链(如 drop_eventdrop_fieldsrenameconvert 等)。
  • 示例骨架:
    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(内置 multilinendjsoncontainer 解析器)。
      • 示例:
        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:用于调试或管道输入。
      • 示例:
        filebeat.inputs:
        • type: 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
      • 观察控制台输出。

0