如何自定义Filebeat的日志格式
自定义Filebeat日志格式主要分为两类场景:自定义日志输出格式(发送到目标系统如Elasticsearch/Logstash的格式)和自定义Filebeat自身运行日志格式。以下是具体操作步骤:
日志输出格式的自定义需通过processors(处理器)实现,用于解析、添加或转换日志字段,适配目标系统(如Elasticsearch、Logstash)的分析需求。
Filebeat的主配置文件通常位于:
/etc/filebeat/filebeat.ymlC:\Program Files\Filebeat\filebeat.ymlvi、Notepad++)打开该文件。processors是Filebeat的核心配置项,可通过多种处理器实现日志格式的自定义:
add_fields处理器向日志事件中添加自定义字段(如环境标识、应用名称),支持将字段放在根级别或嵌套在指定对象中。processors:
- add_fields:
fields:
environment: "production"
app_name: "web_server"
示例(添加嵌套字段):processors:
- add_fields:
target: "metadata" # 嵌套在metadata对象下
fields:
region: "us-west-1"
service: "auth"
mutate处理器移除无用字段(如敏感信息)或保留指定字段,减少日志体积。password字段):processors:
- mutate:
remove_field: ["password", "secret_key"]
示例(保留timestamp、message字段):processors:
- mutate:
keep_fields: ["timestamp", "message"]
key=value或JSON字符串),可使用dissect(简单键值对)或grok(复杂正则)处理器提取字段。dissect解析timestamp=2025-10-18 log_level=INFO message=User logged in):processors:
- dissect:
tokenizer: "%{timestamp} %{log_level} %{message}"
field: "message" # 从message字段中解析
target_prefix: "" # 解析后的字段存入根级别
示例(grok解析Apache访问日志):processors:
- grok:
patterns:
- "%{COMBINEDAPACHELOG}"
field: "message"
decode_json_fields处理器将message字段中的JSON字符串解析为结构化字段。message中的JSON):processors:
- decode_json_fields:
fields: ["message"] # 解析message字段
target: "" # 解析后的字段存入根级别
overwrite_keys: true # 覆盖同名字段
output.elasticsearch部分添加processors,解析后的字段会随日志事件发送到Elasticsearch。output.elasticsearch:
hosts: ["localhost:9200"]
processors:
- add_fields:
fields:
log_source: "filebeat-server"
- decode_json_fields:
fields: ["message"]
output.logstash部分添加processors,Logstash会接收解析后的结构化日志。output.logstash:
hosts: ["localhost:5044"]
processors:
- add_fields:
fields:
pipeline_id: "logstash_pipeline_1"
Filebeat自身的运行日志(如启动信息、错误日志)格式可通过logging配置段调整,支持plain(默认文本)和json(结构化JSON)两种格式。
同上,编辑filebeat.yml。
在logging部分添加format参数:
logging:
level: info # 日志级别(debug/info/warning/error)
to_files: true # 输出到文件
files:
path: /var/log/filebeat # 日志目录
name: filebeat.log # 日志文件名
keepfiles: 7 # 保留最近7天日志
permissions: 0640 # 文件权限
format: json # 关键:设置为JSON格式
示例JSON日志输出:{"log.level": "info","@timestamp": "2025-10-18T10:00:00.000Z","log.logger": "filebeat","message": "Starting Filebeat","log.origin": {"file.name": "filebeat.go","file.line": 320}}
format或设置为plain(默认值),日志将以易读的文本形式输出:logging:
level: info
to_files: true
files:
path: /var/log/filebeat
name: filebeat.log
format: plain # 可省略,默认为plain
示例文本日志输出:2025-10-18T10:00:00.000Z INFO filebeat Starting Filebeat
修改配置后,重启Filebeat服务使更改生效:
sudo systemctl restart filebeat
filebeat.yml前建议备份原文件,避免配置错误导致Filebeat无法启动。script处理器编写自定义脚本(需JavaScript或Lua知识),参考Filebeat官方文档的“Scripting”章节。@timestamp、message)。