Назад | Перейти на главную страницу

logstash пытается подключиться к серверу Redis по сопоставленному адресу ipv6

Я только начал играть с logstash, и у меня возникла проблема с получением процесса отправителя журнала для отправки событий на сервер Redis на другом хосте.

В output раздел моего файла конфигурации logstash читает

output {
  redis { host => "11.22.33.44" data_type => "list" key => "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 (Network is unreachable)

то есть он пытается подключиться к хосту redis по IPv4-адресу, отображаемому в ipv6. У хоста нет собственного IPv6-адреса, и соединение не устанавливается.

Как я могу заставить процесс использовать AF_INET вместо того AF_INET6, или как-то настроить мой хост, чтобы обойти проблему?

Если это актуально, моя версия 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)

Это вызвано эта ошибка: the sysctl установка net.ipv6.bindv6only=1 нарушает работу сети Java в Debian squeeze (и, возможно, на других платформах).

Эта настройка имеет значение только для людей, которые хотят различать соединения ipv6 и ipv4. Меня это особо не волнует, поэтому я

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

запустил агент logstash, и он заработал!

Создатель logstash впоследствии любезно сказал мне, что вы также можете добавить -Djava.net.preferIPv4Stack=true в командную строку.