2019独角兽企业重金招聘Python工程师标准>>>
Redis插件参数配置详解
工作流程
- logstash启动redis插件
- redis插件获取参数,进行校验工作
- 判断监听模式(list,channel,pattern_channel等),根据不同的监听模式创建监听任务
- 创建redis实例,绑定EVAL脚本;通过指定的redis模式,发送请求,监听数据
- redis返回指定内容的数(可能是列表list,也可能是某个特定的频道中的数据)
- 得到的数据,进行处理,返回给logstash
- 如果发送了停止信号,则根据不同的模式,发送不同的命令退出redis。
最小化配置
input {redis {data_type => "list" #logstash redis插件工作方式key => "logstash-test-list" #监听的键值host => "127.0.0.1" #redis地址port => 6379 #redis端口号}}output {stdout{}}
详细配置
input {redis {batch_count => 1 #EVAL命令返回的事件数目data_type => "list" #logstash redis插件工作方式key => "logstash-test-list" #监听的键值host => "127.0.0.1" #redis地址port => 6379 #redis端口号password => "123qwe" #如果有安全认证,此项为密码db => 0 #redis数据库的编号threads => 1 #启用线程数量}}output {stdout{}}
参数详解
threads
开启多少个线程读取redis数据,也就是从redis输入到logstash的速度,线程越多读取速度越快,但是根据接收节点的接收速度来设置,如果输入过快,接收速度不够,则会出现丢数据的情况,设置一个最佳的threads值需要和接收节点做反复测试才能得出。单个logstash启动后,如果配置多个threads,那么最后打印出的信息与队列中的信息顺序是不一样的。
db
Redis里面有数据库的概念,一般是16个,默认登录后是0,可以通过命令选择。如果应用系统选择使用了不同的数据库,那么可以通过配置这个参数从指定的数据库中读取信息。
key
Redis中的数据都是通过键值来索引的,不管是字符串还是列表,所以这个key相当于数据库中的表。
如果是list或者channel模式,key都是指定的键值;而如果是pattern_channel,那么key可以通过glob通配的方式来指定。
password
有的Redis为了安全,是需要进行验证的。只有设置了password,才能正确的读取信息。相反,如果redis没有设置密码,而logstash中配置了密码,也会报错!
batch_count
这个属性设置了服务器端返回的事件数目,比如设置了5条,那么每次请求最多会直接获取5条日志返回。
data_type logstash工作的类型
logstash中的redis插件,指定了三种方式来读取redis队列中的信息。
- list=>BLPOP
- channel=>SUBSCRIBE
- pattern_channel=>PSUBSCRIBE
其中list,相当于队列;channel相当于发布订阅的某个特定的频道;pattern_channel相当于发布订阅某组频道。
扩展 logstash 成多节点集群的时候,频道会出现一个问题:通过频道发布的一条信息,会被所有订阅了该频道的 logstash 进程同时接收到,然后输出重复内容!两个终端同时启动 logstash -f redis-input.conf 进程,结果会是两个终端都输出消息。
这种时候,就需要用 list 类型。在这种类型下,数据输入到 redis 服务器上暂存,logstash 则连上 redis 服务器取走 (BLPOP 命令,所以只要 logstash 不堵塞,redis 服务器上也不会有数据堆积占用空间)数据。