filebeat如何配置日志输出格式
Filebeat通过filebeat.yml配置日志输出格式,利用add_fields或dissect处理器实现,支持json、csv、plaintext及dissect格式。dissect需定义模板拆解字段,修改配置后需重启服务生效。常用于日志采集与格式化,灵活适配Elasticsearch、Logstash、Kafka等输出,支持条件判断、多行合并及字段
说到日志收集,Filebeat 绝对算得上轻量级选手里的明星——它负责把分散在各处的日志数据,源源不断地送到 Elasticsearch、Logstash 这类后端存储里。不过,光让它跑起来还不够,很多时候你还需要精确控制日志的输出格式,否则下游解析起来会非常头疼。那么,怎么配置这个格式呢?答案就在 filebeat.yml 这个配置文件里。

拿一个最基本的配置来举例,你一看就明白:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
# 设置日志输出的格式
processors:
- add_fields:
targets: ["log"]
fields:
format: "json" # 可以是 "json", "csv", "plaintext" 或 "dissect"
# 如果你选择 "dissect" 格式,你需要定义一个 dissect 模板来解析你的日志
processors:
- dissect:
tokenizer: '%{timestamp} %{log_level} %{message}'
field: "message"
target_prefix: ""
overwrite_keys: true
# 输出到控制台(或其他输出)
output.elasticsearch:
hosts: ["localhost:9200"]
这个例子里,我们通过一个 add_fields 处理器,给日志加了一个叫 format 的字段,用来指明日志本来的格式。可选的值无非这么几种:
- json:日志本身就是 JSON 格式,直接拿来用就行。
- csv:日志是用逗号分隔的值,典型的结构化数据。
- plaintext:纯文本,啥格式也没有,最原始的情况。
- dissect:这种场景最灵活——你的日志可能长得很个性,得靠一个模板来告诉 Filebeat 该怎么拆解。
如果你选了 dissect,那就得提供一个模板,比如上面例子里的 %{timestamp} %{log_level} %{message},意思就是:把每条日志按空格拆成三部分——时间戳、日志级别、消息正文。这样 Filebeat 就能自动把原始文本里的关键信息提取出来,变成结构化的字段。
需要提醒的是,这只是一个最基础的配置示例。实际生产环境里,你很可能需要调整输入路径、加更多的处理器,或者改输出目标。每次改完 filebeat.yml,别忘了重启 Filebeat 服务,否则配置不会生效:
sudo systemctl restart filebeat
如果你用的不是 systemd,那换成对应的重启命令就行。总之,核心就两步:写对配置,然后重启。


































