logstash tentando se conectar ao servidor redis no endereço ipv6 mapeado

1

Acabei de começar a jogar com o logstash , e estou com um problema ao obter um processo de envio de log para enviar eventos para um servidor redis em outro host.

A sub-rotina output do meu arquivo de configuração do logstash lê

output {
  redis { host => "11.22.33.44" data_type => "list" key => "logstash" }
}

No entanto, quando executo o processo logstash, recebo mensagens de erro contendo

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

Um pouco de strace ing revela que está falhando aqui:

connect(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)

i.e. ele está tentando se conectar ao host redis em um endereço ipv4 mapeado por ipv6. O host não possui um endereço ipv6 nativo e a conexão falha.

Como posso obter o processo para usar AF_INET em vez de AF_INET6 ou, de alguma forma, configurar meu host para contornar o problema?

Caso seja relevante, minha versão do java é

java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
    
por Flup 18.03.2013 / 13:47

1 resposta

2

Isso é causado por este bug : o sysctl setting net.ipv6.bindv6only=1 quebra a rede Java no squeeze Debian (e provavelmente em outras plataformas).

A configuração só parece importar para as pessoas que desejam distinguir as conexões ipv6 e ipv4. Eu realmente não me importo com isso, então eu fiz

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

iniciou o agente logstash e funcionou!

O criador do logstash gentilmente me disse depois que você também pode adicionar -Djava.net.preferIPv4Stack=true à linha de comando.

    
por 18.03.2013 / 15:40