logstash是ELK中的一员大将,

redis插件也是《The Logstash Book》中介绍的一个很好用的玩意儿。

之前,用比较小的集群部署的时候,没有介入redis中间件,所以也不是很清楚里面的配置,

后来用起来才发现配置有点坑。

第一次配置的时候,死活就是连接不起来,总是报错,说connection refused.

但在logstash机器redis-cli连接却不会有任何问题。

后来才发现,估计是bug,没有使用默认端口这个事情,竟然没法连通。。

------------------

不再废话,先给出我的可以工作的配置

------------------

输出日志到redis: log-to-redis.conf

input {
  file {
    path => "/opt/tengine_1.5.2/logs/access.log"
  }
}


output {
  redis {
    host => ["192.168.1.12"]
    port => 6379
    batch => true
    batch_events => 5
    data_type => "list"
    key => "est"
    codec => "json"
  }
  stdout {
    codec => rubydebug
  }
}

 

读取redis,并输出到elasticsearch或者其它任何地方: log-to-es.conf

input {
  redis {
    host => ["192.168.1.12"]
    port => 6379
    data_type => "list"
    key => "est"
    codec => "json"
  }
}

output {
  stdout {
    codec => rubydebug
  }

#  #open this comment, you know what happens
#  elasticsearch {
#    cluster => "esearch"
#  }
}

 

几个坑:

-  redis input plugin和output plugin的host配置类型不同

   output是array,input是string 也就是说,logstash output的时候,可以指定多个host,一个连不上,可以用另一个 防止单点故障

   唉,怪我自己看配置不仔细,默认input也是array类型,配置了 host => ['1.2.3.3:6380'],这下捅了马蜂窝,plugin干脆直接shutdown,我还以为是bug……

   报错也放这里吧,万一谁搜索到了,也免得纠结。

   

[root@cent-7-62]~# logstash -f log-to-es.conf 
Logstash startup completed
A plugin had an unrecoverable error. Will restart this plugin.
  Plugin: <LogStash::Inputs::Redis host=>"192.168.1.1:6380", port=>6379, data_type=>"list", key=>"est", codec=><LogStash::Codecs::JSON charset=>"UTF-8">, debug=>false, threads=>1, name=>"default", db=>0, timeout=>5, batch_count=>1>
  Error: initialize: name or service not known {:level=>:error}
Logstash shutdown completed

 

-  redis input plugin的batch设置和output plugin设置不同

   input:batch_count

   output:batch+batch_events+data_type配合工作 设置错误会有问题滴