如何为.log与.json日志构建统一处理Pipeline?求解决方案
解决方案
Logstash要同时处理JSON和纯文本.log日志,核心是通过条件判断区分日志类型,分别应用对应的解析逻辑。你之前的配置存在语法错误(Logstash用=>而非=,且json是独立插件而非直接赋值codec),且未覆盖纯文本日志的处理分支,以下是可行配置:
完整Filter配置示例
filter { # 先尝试解析JSON格式日志 json { source => "message" remove_field => ["message"] # 解析成功后可移除原始message字段,按需选择 } # 若JSON解析失败(说明是.log纯文本日志),使用Grok解析 if "_jsonparsefailure" in [tags] { grok { # 替换为你的.log日志对应的Grok模式,这里举通用示例 match => { "message" => "%{TIMESTAMP_ISO8601:log_time} %{LOGLEVEL:level} %{DATA:logger} - %{GREEDYDATA:content}" } remove_field => ["message"] # 按需移除原始字段 } # 可选:移除JSON解析失败标签,避免干扰后续处理 mutate { remove_tag => ["_jsonparsefailure"] } } }
关键说明
- JSON解析分支:使用
json插件解析message字段,解析成功后会将JSON结构展开为Logstash字段;若解析失败,Logstash会自动添加_jsonparsefailure标签。 - 纯文本.log处理分支:通过
if "_jsonparsefailure" in [tags]判断进入纯文本逻辑,用grok插件匹配你的.log日志格式。需根据实际.log的结构替换示例中的Grok模式(比如Nginx日志可用预定义的%{NGINXACCESS}模式)。 - 语法修正:Logstash配置中,插件参数使用
=>而非=,且插件需用{}包裹配置块。
如果你的.log日志是自定义格式,可通过Logstash自带的调试工具验证Grok模式的匹配效果,再替换到配置中。
内容的提问来源于stack exchange,提问作者Crypto Master
相关产品推荐
相关产品推荐

