filebeat output redis 報錯 i/o timeout
先把報錯內容貼出來。
ERROR redis/client. go:214 Failed to RPUSH to redis list with write tcp 172.16.73.32:54822->172.16.73.33:52611: i/o timeout ERROR redis/client. go:92 Failed to publish events: write tcp 1172.16.73.32:54822->172.16.73.33:52611: i/o timeout
報錯內容是寫入超時了。解析問題,在redis的服務的信息正常情況下,可能的問題,第一可能性:是消息隊列堵塞了,第二可能性是:連接redis 服務器的網絡不太好。
1 redis消息隊列阻塞
我的錯誤就是這個,我在logstash 進行讀取redis 的時候配置出了問題,解析也出了問題,所以導致消息隊列阻塞了,filebeat 也自然寫不進去了。
解決辦法:
先檢查 logstash 的input的配置:
正確配置實例:
input { redis { host => "172.16.73.33" #redis ip port => "52611" #redis 端口 password =>"123456" #redis 密碼 db => 9 # 指定redis 庫編號 batch_count => 1 # 這個默認值125,指從redis一次性讀取多少條數據,關於這個為什么設置為1,我在的另外一篇文章會寫到。 data_type => "list" #數據類型 key => "filebeat" #key 值名稱 } }
output 的配置也需要指定正確 ,否則輸出不出去,也是會堵塞的。
檢查 input 堵塞了還是 output 堵塞了,我們可以先讓output 輸出到控制台 ,然后看是否可以輸出數據,可以的話就是 ouput 的配置有誤。
反之則是我們的 input 獲取不到消息隊列 ,檢查input 的配置是否正確。
2. 連接redis 網絡不太好。
由於一些網絡原因會導致我們連接redis 會超時 ,最后導致 io timeout .我們可以在filebeat 里面進行設置超時時間來避免這一問題。
filebeat.yml
output.redis: hosts: ["172.16.73.33:52611"]
password: "123456"
key: "filebeat"
db: 9
timeout: 60 #添加這個參數,設置超時時間,默認值這個是5。
添加 timeout 參數 用來設置 超時時間。來減緩網絡帶來的影響。具體設置的數值根據你業務的情況進行設置。
3. redis 版本過低。
官方建議的redis版本是2.6版本以上,所以如果我們是使用的redis 2.6 以下的版本,那么很大可能性就是版本導致的問題,我們可以使用2.6 以上的版本進行測試。看看是否是版本導致的問題。
redis的新版本安裝文檔:redis 安裝 與錯誤