如何使用Filebeat及processors解析自定义混合日志,无需依赖Logstash
完整可实现需求的Filebeat配置如下
filebeat.inputs: - type: log enabled: true paths: - /tmp/a.log processors: # 第一步:拆分原始日志提取目标字段,避免和根字段重名减少歧义 - dissect: tokenizer: "TID: [-1234] [] [%{log_time}] INFO {org.wso2.carbon.event.output.adapter.logger.LoggerEventAdapter} - Unique ID: Evento_Teste, Event: %{event_json_str}" field: "message" # 第二步:用日志提取的时间替换根节点@timestamp - timestamp: field: dissect.log_time # 匹配日志时间格式,采用Golang标准参考时间写法 layouts: - '2006-01-02 15:04:05,000' # 若日志不是UTC时区,可修改为对应时区,例如东八区填Asia/Shanghai timezone: "UTC" remove_field: "dissect.log_time" # 第三步:解析Event对应的JSON内容并替换message - decode_json_fields: fields: ["dissect.event_json_str"] # 解析后内容直接放到message字段,如需把JSON字段放到根节点则填空字符串 target: "message" overwrite_keys: true remove_field: "dissect.event_json_str" # 可选:删除冗余的dissect节点、原始日志message字段 - drop_fields: fields: ["dissect"] ignore_missing: true output.console: pretty: true
配置说明
- 时间格式匹配采用Golang的标准参考时间
2006-01-02 15:04:05,000,完全适配你日志里的年-月-日 时:分:秒,毫秒格式,解析成功后会直接覆盖Filebeat默认生成的采集时间为日志实际打印时间。 - 如果你不需要把Event内容解析为结构化JSON,只想把原始JSON字符串作为message的值,可删除
decode_json_fields处理器,新增rename处理器直接把dissect.event_json_str重命名为message即可。 - 可根据实际存储需求调整
drop_fields的配置,决定是否保留原始日志、dissect中间字段等内容。
内容的提问来源于stack exchange,提问作者Kleyson Rios
相关产品推荐
相关产品推荐

