温馨提示×

Filebeat日志格式自定义方法

小樊
44
2026-01-02 11:53:38
栏目: 编程语言

Filebeat日志格式自定义方法

一 概念澄清

  • Filebeat自身运行日志:指 Filebeat 进程内部打印的日志(如启动、连接、报错等),可配置为文本JSON格式,便于本地排查或接入集中式日志系统。
  • 采集并输出的业务日志:指 Filebeat 从文件/标准输入读取的日志事件,可添加/删除字段、解析 JSON、控制索引名、打标签等,决定进入 Elasticsearch/Logstash/Kafka 的最终结构与内容。

二 自定义 Filebeat 自身运行日志格式

  • 配置段为 logging,常用选项:
    • level:日志级别,如 info/debug/warning/error
    • format:日志格式,支持 plain(默认)与 json
    • to_files / files:将日志写入文件;常用子项有 path、name、keepfiles、rotateeverybytes、permissions
  • 示例(输出 JSON 到文件,保留 7 个轮转文件,单个文件 10MB):
logging:
  level: info
  to_files: true
  format: json
  files:
    path: /var/log/filebeat
    name: filebeat.log
    keepfiles: 7
    rotateeverybytes: 10485760
    permissions: 0640
  • 应用与验证:
    • 重启服务:Linux 执行 sudo systemctl restart filebeat;Windows 通过服务管理器重启。
    • 查看日志:Linux 执行 tail -f /var/log/filebeat/filebeat.log;JSON 日志便于机器解析与检索。

三 自定义采集并输出的业务日志格式

  • 添加自定义字段与标签
    • 使用 fields 添加字段;设置 fields_under_root: true 将字段提升为顶层字段(可能与内置字段重名并覆盖)。
    • 使用 tags 为事件添加标签,便于分组与过滤。
  • 解析 JSON 日志
    • 单行 JSON:在输入上启用 json 解析,常用 keys_under_root: true 将解析出的键提升到事件根;json.add_error_key: true 在解析失败时添加 error.message 便于定位;json.message_key 指定将某字段作为 message 再进行解析。
  • 多行日志合并
    • 使用 multiline 将堆栈等跨行日志合并为单事件,常用组合:pattern 匹配首行、negate: truematch: after,并设定 max_linestimeout
  • 清理与整形
    • 使用 processorsdrop_fields 删除无用元数据(如 beat、input_type、offset、type 等),减少冗余与存储。
  • 输出到 Elasticsearch 的索引命名
    • 通过 output.elasticsearch.index 自定义索引名,支持日期模板(如 filebeat-%{+yyyy.MM.dd}),便于按日分片与生命周期管理。
  • 示例(综合配置片段)
filebeat.inputs:
- type: log
  paths:
    - /var/log/myapp/*.log
  fields:
    app: myapp
    env: prod
  fields_under_root: true
  tags: ["web", "nginx"]
  json.keys_under_root: true
  json.add_error_key: true
  json.message_key: log
  multiline:
    pattern: '^\['
    negate: true
    match: after
    max_lines: 500
    timeout: 5s

processors:
- drop_fields:
    fields: ["beat", "input_type", "offset", "type"]

output.elasticsearch:
  hosts: ["http://es.example.com:9200"]
  index: "myapp-logs-%{+yyyy.MM.dd}"
  • 应用与验证:
    • 重启 Filebeat 后,向目标日志写入样例,在 ES/Kibana 或通过控制台查看事件结构与字段是否符合预期。

四 常见问题与排查

  • 多行堆栈仍被拆散:检查 pattern/negate/match 是否与日志首行特征匹配,适当增大 max_linestimeout
  • JSON 解析失败:开启 json.add_error_key: true,在事件里查看 error.message 定位非法片段;确认 json.message_key 指向包含 JSON 的字段。
  • 自定义字段未出现在根层级:确认 fields_under_root: true 已设置,且不与内置字段冲突。
  • 索引未按预期命名:核对 output.elasticsearch.index 的日期模板语法(如 %{+yyyy.MM.dd})与写入时间时区。
  • 运行日志看不到新格式:确认 logging.format: json 已设置,且日志轮转参数(如 rotateeverybytes/keepfiles)合理;重启后查看 /var/log/filebeat/filebeat.log

0