如何自定义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)。