目前我的过滤器如下:
filter {
grok {
match => {
"message" => '%{SYSLOG5424SD:logLevel}\t<%{JAVACLASS:Job} *>\t%{TIMESTAMP_ISO8601:Date}\t%{GREEDYDATA:kvmessage}'
}
}
if ([message] !~ "LogstashEvent") {
drop { }
}
grok {
match => {
"kvmessage" => '%{SYSLOG5424SD}%{GREEDYDATA:kvmess}'
}
}
kv {
source => "kvmess"
field_split => "|"
}
}
我正在使用输入过滤器从大量文件中获取输入。最大可能是大约6000个文件。但是,在生成的大量日志中,我感兴趣的日志只是其中包含“LogstashEvent”的日志 - 这甚至还不到总日志的1%。我猜测必须有更快的方式来做这件事,而不是我现在正在做的事情。现在,logstash的CPU利用率约为20%,这比我预期的要高得多 - 考虑到我的过滤器不是很大(虽然输入量很大)
我还在上面生成kvmessage
以在第二个grok中使用它。我最后不需要那个。无论如何都要丢弃映射?
虚拟日志,说明我在此处尝试分析的日志类型:
[INFO] 2016-06-28 17:20:49,308 [LogstashEvent] a = 1 | b = talkischeap | c = showmecode | d = 24 | e = 0
我的每台主机上的logstash的CPU利用率是否可能很高,因为我的elascticsearch集群无法快速索引?
答案 0 :(得分:2)
移动它:
if ([message] !~ "LogstashEvent") {
drop { }
}
在第一个grok过滤器之前。你将保存你的第一个grok过滤器99%的先前工作。
您可以使用remove_field`选项删除字段,该选项存在于所有过滤器中。 (drop_field option)
我不认为索引速度会产生负面影响。当elasticsearch无法为logstash编制足够快的索引时,logstash将等待它并停止读取文件。