13

我正在使用在独立系统(无云或集群)中运行的 Logstash-5.6.5(在 Windows 中)。计划查看一些日志文件并将其发布到本地运行弹性搜索。但是当检查 Logstash 的内存使用情况时,如果没有配置来观看任何文件,它会显示大约 600MB 的内存使用情况。当我进一步添加输入文件管道配置时,它会进一步增加内存(对于观看 3 个日志文件,它增加了 70MB,但我计划添加更多多达 20 个日志)。

1. 这是预期的行为吗?
2. 有什么办法可以减少logstash的巨大内存占用?

4

1 回答 1

19

经过几天的研究,下面是我对我的问题的回答。

以下是我们可以优化 Logstash 内存的方法:

  1. Logstash 内存使用量主要由堆大小累积。这可以通过在启动 Logstash 之前在环境变量LS_JAVA_OPTS中设置堆内存大小来有效控制(在我的情况下是 Windows 版本):

    set "LS_JAVA_OPTS=-Xms512m –Xmx512m"
    

否则可能是这个可以添加到文件开头的 setup.bat 中。

通过这种方式,我将 Logstash 的总内存使用量限制为最大 620 MB。

  1. Logstash 管道配置(输入/过滤器/输出)可以使用此处提到的方法进行优化。

通过这种方式,我断言我的 Logstash 过滤器配置是否经过优化。

  1. 此外,还可以使用以下几个属性来优化管道输入文件配置,以忽略/关闭旧日志文件,如此处所述这将防止不必要地创建管道线程。

    • ignore_older - 以秒为单位 - 完全忽略任何早于给定秒数的文件
    • max_open_files - in numbers - 优化打开文件的最大数量
    • close_older - 在几秒钟内关闭旧文件
    • exclude - 不需要的文件名数组(带或不带通配符)

在我的情况下,我只需要查看最近的文件并忽略旧文件,我已经相应地设置了配置,如下所示:

input {
  file {
    #The application log path that will match with the rolling logs.
    path => "c:/path/to/log/app-1.0-*.log"
    #I didn't want logs older than an hour.
    #If that older file gets updated with a new entry 
    #that will become the new file and the new entry will be read by Logstash
    ignore_older => 3600 

    #I wanted to have only the very recent files to be watched. 
    #Since I am aware there won't be more then 5 files I set it to 5.
    max_open_files => 5 

    #If the log file is not updated for 5 minutes close it. 
    #If any new entry gets added then it will be opened again.
    close_older => 300 
  }
}
于 2018-02-06T17:51:56.873 回答