【问题标题】:Optimize logstash configuration to reduce CPU utilization优化logstash配置以降低CPU利用率
【发布时间】:2016-06-30 03:02:54
【问题描述】:

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

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 利用率很高,因为我的Elasticsearch 集群无法快速索引它?

【问题讨论】:

    标签: logstash elastic-stack logstash-grok logstash-configuration


    【解决方案1】:

    移动这个:

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

    在第一个 grok 过滤器之前。您将保存您的第一个 grok 过滤器 99% 的先前工作。

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

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

    【讨论】:

    • 哦!我认为logstash永远不会等待!那么还要等多久呢?假设我的 es 集群的内存已填满,并且在内存填满一小时后我删除了一个索引..所以它会等待一个小时?
    • 我观察到当logstash无法达到一个输出时(在我的例子中是因为一个ES集群关闭了),它会等到它可以恢复输出(在1.5版中观察到,但我认为这是其他版本的案例)。所以是的,它会在你的情况下等待一个小时。您必须查看文档以获取更多详细信息。
    • 会看到..虽然不希望它等待。希望有一个选项可以指定仅在 es 集群处于非活动状态时删除日志。每当我的集群再次启动时,我都想要最近的日志……而不是一小时前的日志!
    • 显然重试次数取决于版本。您必须检查文档,我无法为您提供更多帮助
    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2013-02-07
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多