Java

logstash 嘗試連接到映射的 ipv6 地址上的 redis 伺服器

  • March 20, 2013

我剛剛開始使用logstash,並且在獲取日誌發送程序程序以將事件發送到另一台主機上的 redis 伺服器時遇到問題。

output我的 logstash 配置文件的節讀取

輸出 {
redis {主機=>“11.22.33.44”數據類型=>“列表”鍵=>“logstash”}
}

但是,當我執行 logstash 程序時,我收到包含以下內容的錯誤消息

:exception=>#<SocketError: Network is unreachable>

一點straceing 表明它在這裡失敗了:

connect(13, {sa_family=AF_INET6, sin6_port=htons(6379), inet_pton(AF_INET6, "::ffff:11.22.33.44", &sin6_addr) = -1 ENETUNREACH (網路不可達)

即它正在嘗試連接到 ipv6 映射的 ipv4 地址上的 redis 主機。主機沒有本機 ipv6 地址,連接失敗。

我怎樣才能讓程序使用AF_INET而不是AF_INET6,或者以某種方式配置我的主機來解決問題?

如果它是相關的,我的java版本是

java版本“1.6.0_18”
OpenJDK 執行時環境 (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2)
OpenJDK 64 位伺服器 VM(內部版本 14.0-b16,混合模式)

這是由這個錯誤引起的:該sysctl設置net.ipv6.bindv6only=1破壞了 Debian 擠壓中的 Java 網路(可能還有其他平台)。

該設置似乎只對想要區分 ipv6 和 ipv4 連接的人有意義。我真的不在乎這個,所以我做了

$ sudo sysctl -w net.ipv6.bindv6only=0

啟動了logstash代理,它工作了!

logstash 的創建者後來好心告訴我,你也可以添加-Djava.net.preferIPv4Stack=true到命令行。

引用自:https://serverfault.com/questions/488839