优化 logstash 配置以降低 CPU 利用率

Optimize logstash configuration to reduce CPU utilization

目前我的过滤器看起来像:

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%日志。我猜必须有比我现在正在做的更快的方法来做到这一点。现在 CPU logstash 的利用率约为 20%,这比我预期的要高得多 - 考虑到我的过滤器不是很大(尽管输入量很大)

我还生成了上面的 kvmessage 以在第二个 grok 中使用它。我终于不需要那个了。无论如何要删除映射?

一个虚拟日志,说明我在这里尝试分析的日志类型:

[INFO] 2016-06-28 17:20:49,308 [LogstashEvent]a=1|b=talkischeap|c=showmecode|d=24|e=0

是否有可能 CPU logstash 在我的每个主机上的利用率很高,因为我的 elascticsearch 集群无法快速索引它?

移动这个:

if ([message] !~ "LogstashEvent") {
    drop { }
}

在第一个 grok 过滤器之前。您的第一个 grok 过滤器将节省其之前工作的 99%。

您可以使用 remove_field` 选项删除字段,该选项存在于所有过滤器中。 (drop_field option)

而且我认为索引速度不会产生负面影响。当 elasticsearch 无法为 logstash 足够快地索引时,logstash 将等待它并停止读取文件。