我刚刚开始使用logstash ,而且在将日志发送器进程发送到其他主机上的redis服务器时遇到问题。
我的logstashconfiguration文件的output节读取
输出{
redis {host =>“11.22.33.44”data_type =>“list”key =>“logstash”}
}
但是,当我运行logstash进程时,我收到包含错误消息
:exception =>#<SocketError:networking无法访问>
有点strace ing显示它在这里是失败的:
(13,{sa_family = AF_INET6,sin6_port = htons(6379),inet_pton(AF_INET6,“:: ffff:11.22.33.44”,&sin6_addr)= -1 ENETUNREACH(Network is unreachable)
即它试图连接到ipv6映射的ipv4地址上的redis主机。 主机没有本地ipv6地址,连接失败。
我怎么能得到进程使用AF_INET而不是AF_INET6 ,或者以某种方式configuration我的主机解决这个问题?
如果它是相关的,我的Java版本是
java版本“1.6.0_18” OpenJDK运行环境(IcedTea6 1.8.13)(6b18-1.8.13-0 + squeeze2) OpenJDK 64位服务器虚拟机(构build14.0-b16,混合模式)
这是由这个bug引起的: sysctl设置net.ipv6.bindv6only=1在Debian挤压(可能是其他平台)中破坏了Javanetworking。
该设置似乎只是想区分ipv6和ipv4连接的人。 我真的不关心这个,所以我做了
$ sudo sysctl -w net.ipv6.bindv6only = 0
启动logstash代理,它工作!
logstash的创build者随后告诉我,你也可以在命令行中添加-Djava.net.preferIPv4Stack=true 。