You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logstash Grok判断%符号配置异常导致Kibana无日志问题求助

问题根因

Logstash 配置语法不支持在 grok 过滤器块内部嵌套条件判断语句。你将判断 message 字段是否包含%的if逻辑写在了grok {}块内部,会导致filter插件加载失败、日志处理链路中断,因此Kibana无法接收到日志。

修复方案

将二次Grok解析的逻辑拆分为独立的grok过滤器,放在首次Grok解析的外层,外层套条件判断即可,修正后的完整配置如下:

filter {
   if [solution] == "horizon" {
      # 首次基础Grok解析
      grok {
         id => "horizon_base_grok"
         match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level}  %{DATA:horizon.component}             %{DATA:horizon.process}:%{GREEDYDATA:message}" }
         overwrite => ["message"]
      }
      # 条件判断放在grok块外部,匹配到%时执行二次解析
      if '%' in [message] {
         grok {
             id => "horizon_free_mem_grok"
             match => { "message" => "%{DATA:free_mem_string} < %{NUMBER:free_mem_value:int}%{GREEDYDATA:message}" }
             overwrite => ["message"]
             # 可选配置:如果二次匹配失败不添加失败标签,避免影响后续逻辑
             tag_on_failure => []
         }
      }
      if [log-level] not in [ "ERROR","WARN","FATAL" ] {
         drop {}
      }
   }

   date {
      id => "horizon_date"
      match => [ "timestamp","ISO8601" ]
      add_tag => [ "horizon_date" ]
   }
}

修改说明

  • 移除了嵌套在首次grok块内部的非法条件判断逻辑
  • 二次Grok解析使用独立的过滤器实现,和原始需求完全一致:首次解析完成后,若message包含%则执行二次匹配提取内存相关字段
  • 新增可选配置tag_on_failure => [],可避免二次Grok匹配失败时给日志打上_grokparsefailure标签,不影响正常日志的流转

内容的提问来源于stack exchange,提问作者JF_LTQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:06:06