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配合工作 设置错误会有问题滴