目前,我正在使用文件输入插件在Logstash中处理gzip文件。它消耗非常大的内存,并且即使在提供了很大的堆大小之后也要继续重新启动。截至目前,我们平均每分钟处理50个文件,并计划每分钟处理1000个文件。对于100个文件,RAM需求达到10Gb。调整此配置的最佳方法是什么,是否有更好的方法来处理logstash中的大量数据。 建议使用nodejs或任何其他语言编写处理引擎。
下面是logstash conf。
input {
file {
id => "client-files"
mode => "read"
path => [ "/usr/share/logstash/plugins/message/*.gz" ]
codec => "json"
file_completed_action => log_and_delete
file_completed_log_path => "/usr/share/logstash/logs/processed.log"
}
}
filter {
ruby {
code => 'monitor_name = event.get("path").split("/").last.split("_").first
event.set("monitorName", monitor_name )
split_field = []
event.get(monitor_name).each do |x|
split_field << Hash[event.get("Datapoints").zip(x)]
end
event.set("split_field",split_field)'
}
split {
field => "split_field"
}
ruby {
code => "event.get('split_field').each {|k,v| event.set(k,v)}"
remove_field => ["split_field","Datapoints","%{monitorName}"]
}
}