logstash多行自定义json解析失败

dffbzjpn  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(820)

我和Kafka在排队 json 物体。我正在用一个基于java的离线生产者填充这个队列。json对象的结构如下图所示:

{ 
    "key": "999998", 
    "message"  : "dummy \n Messages \n Line 1 ", 
    "type"  : "app_event", 
    "stackTrace" : "dummyTraces", 
    "tags" : "dummyTags" 

}

注意 \n 在“消息”中。
我用一百万个对象加载了队列,并用以下脚本启动了logstash:

input {
        kafka {
                zk_connect => "localhost:2181"
                topic_id => "MemoryTest"
                type => "app_event"
                group_id => "dash_prod"
        } 
}

filter{
        if [type] == "app_event" {
                multiline {
                         pattern => "^\s"
                         what => "previous"
                }
        }
}

output {
    if [type] == "app_event" {
        stdout { 
         codec => rubydebug 
         }

          elasticsearch {
                  host => "localhost"
                  protocol => "http"
                  port => "9200"
                  index => "app_events"
                  index_type => "event"     
          }
    }
}

应删除多行筛选器 \n 从消息字段。当我开始登录时,我会遇到两个问题:
没有一个事件被推到弹性。我得到错误: _jsonparsefailure . 还要注意,一个事件的消息“吞噬”了连续的事件。
据“消息”消息{{{{{{\n\n\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n MyTraces\“,\n\n\t\n\t\n\t\t\n\n\n\n\n\n\n\n\t\n\n\n\n\n\n\n\n\n\n\t\n\t\t\t\n\t\t\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\n\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\n\n\t\n\n\t\n\t\n\n\n\t\t\t\n\n\n\n\n\t\t\n\t\n\n\t\n\n\n\n\n\t\n\n\n\t\t\t\n\n\n\t\t\“,“type”=>“应用程序事件”}
几分钟后,可用堆内存达到上限,logstash停止。
此问题附带内存配置文件。13分钟后,logstash击中内存上限,停止响应。

我试图了解如何让多行工作在这种情况下,什么原因造成内存崩溃。

nue99wik

nue99wik1#

要替换字符串的一部分,请使用mutate->gsub{}。

filter {
  mutate {
    gsub => [
      # replace all forward slashes with underscore
      "fieldname", "/", "_",
      # replace backslashes, question marks, hashes, and minuses
      # with a dot "."
      "fieldname2", "[\\?#-]", "."
    ]
  }
}

正如您所发现的,multiline用于将多个事件组合成一个事件。

相关问题