系统架构。
在要收集日志的应用端每台机器安装一个logstash来收集日志。收集完后发送到一个redis单机服务器。
在redis上有一个logstash会把数据发送到ES中。
其中logstash统计如下:
master : apache(1) SM(1) MS(6) SMGC(1) MSGC(6)
slave : apache(1) SM(1) MS(4) SMGC(1) MSGC(4) tibco : adapter(2) prc_arc(1)另外有两个slave上多了个BGMS。所以总共logstash监控的文件数目为:33个文件。
logstash下载后直接使用。redis下载源代码后编译安装,没有做热河配置修改。
目前问题是有多个logstash向redis写入。redis中只有一个logstash读取redis数据并作加工然后发送到ES。这样对于redis来说,向它发送的数据太多,读出它的数据太慢,导致redis有数据堆积。
优化过程:
1 修改redis上logstash的配置。将Xmx由默认的1g调整为2g。修改logstash运行时配置文件,将向ES发送的plugin中增加参数woker,并设置为100(默认为1)。
2 redis服务器上logstash可以做调优:
threads => 50
input { redis { host => "localhost" data_type => "list" port => "6379" key => "log_raw_data" type => "redis-input" threads => 50 batch_count => 20 }}
workers => 50
output {# stdout{ codec=>rubydebug} elasticsearch { hosts =>"192.168.0.7:9200" index => "%{sysid}_%{type}" document_type => "%{daytag}" workers => 50 flush_size => 3000 }}
3 logstash启动增加pipeline-workers数量。
logstash -w 50 -f index_redis.conf
可参考的内容: