filebeat output redis 報錯 i/o timeout


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 安裝 與錯誤


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM