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 服務器上也不會有數據堆積占用空間)數據。