input {#redis {#host=> "10.246.187.12"#redis地址#host=> "10.246.152.116"#redis地址#port => "6379" #redis端口號#password => "123qwe" #如果有安全認證,此項為密碼#key => "logstash:redis"#type => "redis-input"#data_type => "list"#threads =>8 #啟用線程數量#batch_count => 10 #EVAL命令返回的事件數目#db => 0 #redis數據庫的編號#}file {ignore_older => 87400path => ["/app/audit/idpws-login-audit.log"]#path => ["/tmp/test.log"]start_position => beginningsincedb_path => "/app/logstash-7.12.1/sincedb-access"}}
工作流程:
?
- logstash啟動redis插件
- redis插件獲取參數,進行校驗工作
- 判斷監聽模式(list,channel,pattern_channel等),根據不同的監聽模式創建監聽任務
- 創建redis實例,綁定EVAL腳本;通過指定的redis模式,發送請求,監聽數據
- redis返回指定內容的數(可能是列表list,也可能是某個特定的頻道中的數據)
- 得到的數據,進行處理,返回給logstash
- 如果發送了停止信號,則根據不同的模式,發送不同的命令退出redis。
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相當于發布訂閱某組頻道。channel與pattern_channel區別就在于一個是監聽特定的鍵值,一個是監聽某一組鍵值。