LogStash::Inputs::Redis 支持三种 data_type(实际上是redis_type),不同的数据类型会导致实际采用不同的 Redis 命令操作:
list => BLPOP
channel => SUBSCRIBE
pattern_channel => PSUBSCRIBE
其中list,相当于队列;channel相当于发布订阅的某个特定的频道;pattern_channel相当于发布订阅某组频道。
Redis发布订阅中使用到的命令就只有三个:PUBLISH,SUBSCRIBE,PSUBSCRIBE
PUBLISH 用于发布消息
SUBSCRIBE 也叫频道订阅,用于订阅某一特定的频道
PSUBSCRIBE 也叫模式订阅,用于订阅某一组频道,使用glob的方式,比如xxx-*可以匹配xxx-a,xxx-b,xxx-ddd等等
pattern_channel模式之redis_pattern_channel.conf 配置文件:
redis_pattern_channel.conf 配置文件:
input {
redis {
data_type => "pattern_channel" #logstash redis插件工作方式
key => "redis_pattern_channel-*" #监听的键值
host => "localhost" #redis地址
port => 6379 #redis端口号
threads => 5 #启用线程数量
}
}
output {
stdout { codec => rubydebug }
}
打开2个控制台同时执行:
/usr/share/logstash/bin/logstash -f /usr/share/logstash/config/conf.d/redis_pattern_channel.conf
然后在redis客户端输入:PUBLISH redis_pattern_channel-jimmy "hello jimmy"
(JSON格式测试数据:PUBLISH redis_pattern_channel-json '{"message":"hello world","@version":"1","@timestamp":"2014-08-08T16:34:21.865Z","host":"raochenlindeMacBook-Air.local","key1":"value1"}')
每个控制台都会显示如下
list模式之redis_list.conf 配置文件:
input {
redis {
data_type => "list"
key => "logstash-list"
host => "localhost"
port => 6379
batch_count => 1
threads => 5
}
}
output {
stdout { codec => rubydebug }
}
打开2个控制台同时执行:
/usr/share/logstash/bin/logstash -f /usr/share/logstash/config/conf.d/redis_list.conf
然后在redis客户端输入:RPUSH logstash-list "hello world"
只有一个控制台会显示如下