如何减少Logstash内存使用量

时间:2018-02-02 06:07:38

标签: performance memory-management logstash logstash-configuration logstash-file

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

1。这是预期的行为吗?
2。有没有办法通过logstash减少巨大的内存使用量?

1 个答案:

答案 0 :(得分:8)

经过以下几天的研究后,我回答了我的问题。

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

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

    set "LS_JAVA_OPTS=-Xms512m –Xmx512m"
    
  2. 否则可能会在文件开头的setup.bat中添加。

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

    1. 可以使用here提到的方法优化Logstash管道配置(输入/过滤器/输出)。
    2. 通过这种方式,我断言我的Logstash过滤器配置是否已经过优化。

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

        • ignore_older - 以秒为单位 - 完全忽略任何早于给定秒数的文件
        • max_open_files - 以数字表示 - 以优化已打开文件的最大数量
        • close_older - 关闭旧文件的秒数
        • exclude - 不需要的文件名数组(带或不带通配符)
      2. 在我的情况下,我只需要观看最近的文件并忽略旧文件,我已按如下方式设置配置:

        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 
          }
        }