我和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击中内存上限,停止响应。
我试图了解如何让多行工作在这种情况下,什么原因造成内存崩溃。
1条答案
按热度按时间nue99wik1#
要替换字符串的一部分,请使用mutate->gsub{}。
正如您所发现的,multiline用于将多个事件组合成一个事件。